コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:TAKAHASHI Shuuji/マイクロサービス

マイクロサービス英語microservices)は、ソフトウェア開発の技法の1つであり、1つのアプリケーション疎に結合されたサービスの集合体として構成するサービス指向アーキテクチャ(service-oriented architecture; SOA)の1種である。マイクロサービスアーキテクチャでは、各サービスはきめ細かい粒度を持ち、軽量なプロトコルを用いて通信を行う。アプリケーションを異なる小さなサービスに分割することの利点は、モジュラリティが高くなることである。これによって、アプリケーションの理解、開発、テストがより簡単に行えるようになり、アーキテクチャの腐敗に対する弾力性が向上する[1]。マイクロサービスによる開発を行うことで、開発が並列化され、少人数の自律的なチームにより、各チームが所有するサービスを独立に、開発、デプロイ、スケールさせることが可能になる[2]。また、継続的リファクタリングを通して、個々のサービスのアーキテクチャ全体を置き換えることも可能になる[3]。マイクロサービスベースのアーキテクチャでは、継続的デリバリー継続的デプロイが可能になる[4]

はじめに

[編集]

マイクロサービスとは何かという公式な定義は存在しないが、業界において徐々にコンセンサスが形成されてきている。マイクロサービスを特徴づける定義としてよく引き合いに出されるものとしては、以下のような点が挙げられる。

  • マーティン・ファウラーや他の専門家たちによれば、マイクロサービス・アーキテクチャ(microservice architecture; MSA)は、特定の技術にとらわれないHTTPなどのプロトコルを使用して、目的を達成するためにネットワーク越しのコミュニケーションのプロセスを実行する[5][6][7]。ただし、サービスは共有メモリなどの他の種類のプロセス間通信のメカニズムを使用することもある[8]。また、たとえばOSGIバンドルなどのように、同一のプロセス内で実行される場合もある。
  • マイクロサービス・アーキテクチャにおけるサービスは、独立にデプロイが可能である[9][1]
  • サービスは、きめ細かいビジネス機能を中心に組織される。マイクロサービスにおいて粒度は重要である。なぜなら、粒度こそ、このアプローチをSOAと異なるものにしているからである。
  • 各サービスに最も適した、異なるプログラミング言語データベース、ハードウェアおよびソフトウェア環境で開発することができる[1]。これは、1つのマイクロサービスがさまざまなプログラミング言語のパッチワークのように書かれるという意味ではない。While it is almost certainly the case that different components that the service is composed of, will require different languages or API's (example, the web server layer may be in Java or Javascript, but the database may use SQL to communicate to an RDBMS), this is really reflective of a comparison to the monolithic architecture style. If a monolithic application were to be re-implemented as a set of microservices, then the individual services could pick their own implementing languages. So one microservice could pick Java for the web layer, and another microservice could pick a Node.js based implementation, but within each microservice component, the implementing language would be uniform.
  • サービスはサイズが小さく、メッセージングを行い、コンテキストによって境界づけられ、自律的に開発される。また、中央集権的ではなく、独立してデプロイが可能である。そして、自動化されたプロセスにより、自動ビルド自動リリースが実行される[9]

マイクロサービスは、モノリシックなアプリケーション内にある1つのレイヤー(たとえば、ウェブコントローラや、フロントエンド向けバックエンド(backend-for-frontend)[10]ではない。むしろ、自身のみでビジネス機能を提供する、明確なインターフェイスを持った小さなピースである(サービス内部のコンポーネントとしてレイヤーアーキテクチャを実装することさえある)。戦略的な観点からは、マイクロサービスは 「ただ1つのことをして、それをうまくやる」[11]というUnix哲学に本質的には従っているのだと考えられる。マーティン・ファウラーは、マイクロサービス・アーキテクチャには次のような性質があると述べている[5]

  • 当然のものとしてモジュラー構造を強制する。
  • 継続的デリバリーのソフトウェア開発プロセスに向いている。アプリケーションの小さなパーツを変更しても、1つか少数のサービスのみをリビルドして再デプロイすればよい。
  • 細かな粒度インターフェイス(デプロイ可能なサービスからは独立したもの)、ビジネス駆動開発(たとえば、ドメイン駆動設計など)などの、いくつかの定義された原則(principles)に従う。

歴史

[編集]

サービスの粒度

[編集]

言語学的アプローチ

[編集]

技術

[編集]

サービスメッシュ

[編集]

批判

[編集]

マイクロサービスのアプローチは、いくつかの問題により批判の対象になっている。

認知的な負荷

[編集]

実装

[編集]

関連項目

[編集]

出典

[編集]
  1. ^ a b c Chen, Lianping (2018). Microservices: Architecting for Continuous Delivery and DevOps. The IEEE International Conference on Software Architecture (ICSA 2018). IEEE.
  2. ^ Richardson. “Microservice architecture pattern” (英語). microservices.io. 2017年3月19日閲覧。
  3. ^ Chen, Lianping; Ali Babar, Muhammad (2014). Towards an Evidence-Based Understanding of Emergence of Architecture through Continuous Refactoring in Agile Software Development. The 11th Working IEEE/IFIP Conference on Software Architecture(WICSA 2014). IEEE. doi:10.1109/WICSA.2014.45
  4. ^ Balalaie, Armin; Heydarnoori, Abbas; Jamshidi, Pooyan (2016-05). “Microservices Architecture Enables DevOps: Migration to a Cloud-Native Architecture”. IEEE Software 33 (3): 42–52. doi:10.1109/ms.2016.64. ISSN 0740-7459. 
  5. ^ a b Martin Fowler. “Microservices”. 14 February 2018時点のオリジナルよりアーカイブ。 Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
  6. ^ Newman, Sam (2015-02-20). Building Microservices. O'Reilly Media. ISBN 978-1491950357 
  7. ^ Wolff, Eberhard (2016-10-12). Microservices: Flexible Software Architectures. ISBN 978-0134602417. http://microservices-book.com 
  8. ^ Micro-services for performance”. Vanilla Java (2016年3月22日). 2017年3月19日閲覧。
  9. ^ a b Nadareishvili, I., Mitra, R., McLarty, M., Amundsen, M., Microservice Architecture: Aligning Principles, Practices, and Culture, O’Reilly 2016
  10. ^ Backends For Frontends Pattern”. Microsoft Azure Cloud Design Patterns. Microsoft. Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
  11. ^ Lucas Krause. Microservices: Patterns and Applications. ASIN B00VJ3NP4A 

参考文献

[編集]

[[Category:サービス指向 (ビジネスコンピューティング)]] [[Category:未査読の翻訳があるページ]]