[翻訳]マイクロサービスの考え方、SOAとの違い。


今日、Javaエバンジェリストの寺田さんに会社にお越しいただき、現在のシステム開発を取り巻く環境が向かっている方向性について、ご教示頂きました。
キーワードは"Microservices"。
恥ずかしながら、今日までこのキーワードすら聞いたことがなかったので、早速自宅に帰ってからググってみました。
自分の理解の確認を兼ねて、Wikipedia(英語版)からの意訳をここに記します。

Microservicesとは?

マイクロサービスとは、SOAの延長線上にあるソフトウェアアーキテクチャの考え方です。
SOAと同じように、マイクロサービスアーキテクチャ(MSA)の中にあるサービス達は、要件を満たすためにネットワークを通じて互いにコミュニケーションを取るプロセスです。
また、SOAと同様に、これらのサービスはテクノロジーに依存しないプロトコルを利用します。このマイクロサービスの構築スタイルは、DevOpsに続く最初のSOAを具現化したものであり、継続的デプロイシステムを構築するために次第にポピュラーになってきています。

この考え方は、段階的な開発・変更にフォーカスしているためか、マイクロサービスはこれまでのシステム開発に比べて投資を早く回収できる方法であると捉えられがちです。

SOAと比較して、マイクロサービスはサービスはどのくらいのサイズであるべきか、また、サービスはお互いにどのように通信すべきかに対しての回答を持ち、マイクロサービスアーキテクチャでは、サービスは小さく、通信プロトコルは軽量であるべきと定義されています。
システムの責務を分散することのメリットは、結合(cohesion)を強くし、連結(coupling)を弱めることです。

これは、新たな機能の追加や既存の機能の変更を容易にし、更にシステムの品質を高めます。また、これは個々のサービスのアーキテクチャが作成されていることを継続的リファクタリングを通じて許可します。
そして、結果的に大きな事前おの必要性を低下し、シンプルで継続的なソフトウェアリリースを可能にします。

マイクロサービスとサービス中心的アーキテクチャ(SOA)は異なるゴールを持ちます。SOAは再利用と分離にフォーカスしているのに対し、マイクロサービスは巨大なアプリケーションを段階的に機能追加できる、かつ管理を容易が容易なシステムに置き換えることフォーカスしています。

元サイトURL
https://en.wikipedia.org/wiki/Microservices

---翻訳ここまで---

他にも、Microservicesの提唱者であるMartin Fowler氏のページなどに詳しい解説が乗っていたり、同氏の動画がYouTubeに上がっていたりします。
時間があれば、これらのサイトについても翻訳し、理解を深めたいと思います。

Martin Fowler氏のWebサイト
http://www.martinfowler.com/articles/microservices.html

同氏のYoutube
https://www.youtube.com/user/martinfowlercom