マイクロサービス(microservices)とは何か

マイクロサービス(microservices)という言葉をご存知でしょうか? 今、エンタープライズ界隈のソフトウェアエンジニアの間でマイクロサービスという言葉がにわかに盛り上がりつつあります。

マイクロサービスはJames Lewis氏によって提案された言葉です。詳細については、彼がMartin Fowler氏と共著で書いた「Microservices」という記事を参照してほしいのですが、ようするにひとつのアプリケーションを、Railsのような一枚岩のアーキテクチャではなく、複数の軽量なサービスを連携させたアーキテクチャでつくろうというアプローチです。

上述の記事 では、マイクロサービスの特徴が九つほど上げられています。

このような特徴が挙がっているものの、SOAとどう違うのかという疑問を抱くかもしれません。実際のところ、マイクロサービスはSOAの焼き直しにすぎないという主張もあります。

しかし、SOAという用語は既に多くの場面で語られすぎていて、多義的な用語となっています。SOAと一言でいったときに、設計思想といった広い概念を指す場合もあれば、WS-*やESBの導入といった狭い概念を指す場合もあります。マイクロサービスという用語が指し示す領域は、SOAという概念と交差する部分もあるものの、組織構造から要素技術、インフラストラクチャー自動化、設計思想といった領域も含む用語となっています。

マイクロサービスは新しい言葉です。そして、その言葉が指し示そうとしている内容は、アーキテクチャというよりも、スタイルであるといった方がわかりやすいのかもしれません。

私個人としては、マイクロサービスという用語は、モノリシックなアーキテクチャを採用して成長してきたウェブ企業がその問題に対応していくなかで、自然と培ってきたテクニックやスタイルに名前がついたものとしてとらえています。

モノリシックなアプリケーションのコードベースが巨大化すると、まず、全体像を把握できるエンジニアがいなくなります。そして、他のエンジニアによるデグレーションを防止するための自動テストの数が増加し、実行に多大なコストを支払わなくてはならなくなっていきます。多数のサーバにアプリケーションを配置するデプロイメントのプロセスは複雑になり、その把握が困難になってきます。

そういった問題を解決するために、巨大な一枚岩のアプリケーションを個々の独立したサービスへ分割していこうというのは、自然なアプローチとなります。そのときに、エンタープライズ向け製品のベンダーが提供するSOAミドルウェア製品群を採用するのではなく、RESTful APIといったウェブで利用されている技術を採用するというのも、ウェブ企業にとっては自然な選択です。

マイクロサービスという用語は、SOAの焼き直しのように見えます。また、それを構成するとされている要素についても、目新しいものはありません。私は、だからこそ、マイクロサービスという用語が、自分たちの開発スタイルやアーキテクチャを自然に表現するものとして気に入っています。今後、自分たちのアーキテクチャを紹介するときには、SOAという用語を違和感を持ちながらつかうのではなく、マイクロサービスという用語を使いたいとおもいます。