マイクロサービスアーキテクチャ(以下、MSA)という言葉を聞くようになりました。きっかけはファウラーのブログ「Microservices」(2014年3月)ですが、昨年10月のJavaOne SFでも多くの講演でMicroservicesという言葉を聞かれ、多くのエンジニアがすぐに共感していたことが分かりました。今後、日本でも広く知られる言葉になることでしょう。
一方でMSAは誤解を招きやすいバズワードとも言える気がします。というわけで、僕なりのMSAについての考えをまとめてみました。
MSAは「優れたウェブサービスを観察したところ同じようなアーキテクチャだったので、それをマイクロサービスアーキテクチャと名付けた」というものです。逆に言えば「大きなウェブサービスを作ろうと思ったときの定石」といえます。「各要素を疎結合に構成し、連携する」「それぞれの要素に適した技術を使う」といったアイデアは突飛なものではありません。
大きなウェブサービスであればMSAという言葉がある前からMSA的に作っていたでしょうし、僕自身もそのようにシステムを設計していました。もちろん、先進的な企業ならではの取り組みもありますが、基本的な思想は同一です。
ですから、MSAがブームになったからといって「MSAを目的にしたアーキテクチャ設計」をしたところで失敗することになります。対象システムにとって適切な手法を選択したら自然にMSAになるはずです。それを無理にMSAにすべきではありません。アジャイルを目的としたプロジェクトが失敗したように、手段を目的としてはなりません。優れたウェブサービスがMSAであっただけで、MSAを採用したから優れたウェブサービスになるわけではありません。
SOAとMSA
エンタープライズであればSOAとの違いについて考える必要があります。資料中にもありますが、僕はSOAがトップダウンの理想論であったのに対して、MSAはボトムアップの現実論として捉えています。これは時代背景の違いと言えるでしょう。
SOAは「バラバラであったシステム群をいかに統合していくか」が課題であった時代に創られた言葉であり、一方で、MSAは「巨大なサービスをいかに複数のシステム群で構成するのか」が課題の現代における言葉です。SOAからMSAまでの10年で状況が変わったのです。
MSAと政治学
個人的な興味ですが、SOAからMSAへというアーキテクチャ設計の移り変わりは、政治学における「封建制」「君主制」「民主制」という流れと似ていると考えています。
その昔は個別のシステムは個別の部署によって管轄されて独立して存在していました。それぞれの責任は明確であったものの境目は曖昧で、個別に問題解決をしていたといえます。
これが封建制の時代。各領主には主権があり、個別の法制度が許され、比較的独立していたのです。
しかし、1990年代ごろから各システム間の連携が多くなると全体整合性の観点からシステム資産の活用度を高めるニーズが出てきます。そこで提唱されたのがSOAでした。SOAでは各システムのインターフェースに統一のルールが求められました。EAIによるデータ交換のハブ化、MDM(マスタデータマネジメント)によるデータモデルの統制、BPMによるプロセスの自動化など、企業全体を俯瞰した考えです。
これが君主制の時代。一人の王によって法制度が定められ、各地方では領主たちが統治を預けられていた時代です。ただし、君主制には偉大な王が必要であり、多くの君主制は統制の限界を迎えて打倒されていきます。
そして、2000年代を超えてくるとウェブサービスと呼ばれる巨大なシステムが作り上げられるようになりました。ウェブサービスは全体が継続的に稼働することが求められ、それを構成する各システムは切れ目なく連携続けなくてはなりません。各システムはサービス全体に組み込まれるように作られるため、インターフェースは明確なものの、それら自身の構成はライフサイクルやメンバーにしたほうが効率的でした。
これが民主制の時代。国全体としては明確な境界線を持っており中央政府も存在しますが、地方の統治は個別の自治体に任されています。地方自治体には権利はあるものの国としてのまとまりが求められるわけです。
もちろん、細かいアラはあるのですが巨大な企業システムを国に例えると、時代と共に成熟していくのは当然のように思います。