はじめに:自己紹介
西野大介(@nishino_chekhov)と申します。SOMPOホールディングス株式会社デジタル戦略部(SOMPO Digital Lab)に所属し、損保ジャパン日本興亜グループにおける先進技術の研究開発を担当しています。本業以外では、国内/海外の各種カンファレンスへの登壇や企業向けの講演、そして本連載のような技術系記事の執筆により、テクノロジーに関する情報提供を幅広く行っております。
一言でいうと:マイクロサービスとは
「マイクロサービス・アーキテクチャ」または単に「マイクロサービス」と呼ばれる開発手法。それがどのようなものかを一言で定義するなら、「複数の独立した機能を組み合わせることで、一つの処理を実現するアーキテクチャ」であると言えます。ポイントは、一つの処理を実現するのが一つの機能ではなく、複数の機能であるというところです。
※ アーキテクチャってそもそも何だっけ? と思った方は、「アプリケーションの構造」という言葉に置き換えてください。
以降、この定義をもとに解説していきます。
前提:モノリスとは
マイクロサービスについて理解するために、マイクロサービスでない従来型のアーキテクチャと比較していきましょう。従来型とは、先ほどの定義を裏返し「大きな単一の機能により、一つの処理を実現するアーキテクチャ」とすることができます。これを、マイクロサービスとの対比で、一般に「モノリシック・アーキテクチャ」または「モノリス」と呼びます。英語で「一枚岩」を意味し、「大きな単一機能」という特徴を表現したものです。
モノリスとの比較で見る構造
より具体的な構造比較で両者を見ていきましょう。モノリスが一枚岩であるとは言っても、一般的なWebやスマホアプリを実現するシステムであれば、いわゆる三層構造(ユーザーインターフェース、ビジネスロジック、データ)のように役割によって分かれた構造になっているものが一般的です。
しかし、ユーザーインターフェースからくるリクエストに対し、モノリスの場合は一つのマシン内に配置されている大きな機能によって処理を行います。対してマイクロサービスは、複数のマシンにまたがる機能に値を投げながら処理していきます。
モノリスも内部的には機能ごとにプログラムが分かれていますが、あくまで同一マシンの中にあり、分割できません。つまり、モノリスはあくまで「大きな単一機能」です。対してマイクロサービスを構成する各機能は別のマシンに分かれており、通信によって値(テキストデータ)を投げ合うことによってつながります。これを定義の上で「独立した機能」としています。
※ なお、ここでいうマシンとは物理的なものとは限らず、仮想マシンやそれに類する技術も含みます。