アプリケーションをクラウドネイティブに構成すること
企業や団体のクラウド採用はパブリック・プライベートともに増加傾向にあります。しかしながら、基盤としてIaaSのようなクラウドを採用したとしても、アプリケーションがオンプレミスを前提とした構成をとっているかぎり、迅速性や柔軟性といったクラウドのメリットを最大限享受することはできません。変化に対応することを前提とし、インフラのサービス化による「突き放し」と「割り切り」を許容する、いわゆる「クラウド的な発想」を持ち、アプリケーションをクラウドネイティブに構成することの重要性が認識され始めています。
マイクロサービス
一方で、2014年ころから、マイクロサービスというアプリケーションの構成方法が注目を浴びています。ことばの詳細はJames Lewis, Martin Fowler両氏の記事参考1などに記されていますが、ひとことで表現するならば、「小さなサービスを組み合わせて大きな仕組みを実現する方法」のことです。各サービスは単独で機能し、互いに疎結合であり、シンプルなインタフェースで接合されている、という構成です。往年のSOAに似ていますが、SOAよりもさらにサービスの粒度は細かい傾向にあり、さらに、開発と運用のライフサイクルやインフラの自動化までを考え方に含めているのが異なっています。名著「UNIXという考え方」参考2には、プログラムを小さく単純なものにすることで、移植性やスケーラビリティを高くできる、ということが記されていますが、この思想をシステムアーキテクチャでも実現するのがマイクロサービスのカナメなのだと筆者は理解しています。
マイクロサービスとクラウドネイティブアプリ
マイクロサービスはクラウドネイティブアプリをつくる手段のひとつとして有用です。マイクロサービスの考え方でシステムアーキテクチャを設計すると、必要となる単機能サービス群を列挙し、それをレゴブロックのように組み合わせて全体像をデザインすることになります。各サービスはシンプルで独立性が高く容易にスケールアウト可能で、クラウド上で構成するには好都合なわけです。障害耐性の面でも、マイクロサービスにより描かれる「サービス間のメッセージンググラフ」と、クラウドにおける障害管理単位(リージョンやゾーン)と適切にマッピングすることで、束になって障害に備える、ということが容易に実現できるわけです。
「変化に素早く対応したい」「束になって障害耐性を担保したい」「継続的な開発運用を効果的に実施したい」「容易にスケールアウトさせたい」というのは、クラウドネイティブ世代の「アタリマエ」です。この「アタリマエ」に応える手段が経験的に溜まっていき、それを体系化したのがマイクロサービスだといえます。基盤としてのクラウド利用検討と並行して、アプリケーションの構成・つくりかた・運用の仕方をクラウドネイティブにしていく、という取り組みは、今後さらに活発になってくると考えられます。