前回は “smart endpoints and dumb pipes (賢いエンドポイントと機能性の低いパイプ)” の意味することにについて考察しました。
今回は、マイクロサービス間の連携を支えるこの “smart endpoints and dumb pipes” の具体的なアーキテクチャについて考えてみます。
マイクロサービスとは、複数のマイクロサービスが連携して業務処理を実現するアプリケーション アーキテクチャです。
単一の機能にしぼった小さな (マイクロな) サービスを連携させることで、大きな処理を実現するアプローチは、UNIX シェルのパイプのエッセンスを有しています。
UNIX のパイプ機能はすべてのコマンドが単一のマシン上で (別の言い方をすれば、単一のシェルのもとで ) 稼働することを前提としていました。
マイクロサービスでは下図に示すような分散環境で実行することが必要となります。
分散配置されたマイクロサービス間を連携するメカニズムとしては、メッセージング プロトコルによる通信をサポートするサーバーがたいへん有用なものとなります。
メッセージングのプロトコルには、JMS (Java メッセージ サービス) が適しています。(優位点については、メッセージング 前編 *1 も参照してください。)
- WS* 標準に基づく SOAP や BPEL に比べて非常にライトウェイトなプロトコルである
- 軽量プロトコルとはいえ、次の有用な機能を有している
- メッセージ配信の保証機能が備わっている
- パブリッシュ/サブクライブによる複数の相手先への同一メッセージの配信
- メッセージ セレクション (条件に適合するメッセージのみの配信、相手先の選択)
- 非同期メッセージングによってマイクロサービス間の疎結合性を高めることができる
- 非同期メッセージングによるコレオグラフィ *2 が実現できる
この JMS メッセージ サーバーは、下図に示すように、中央に位置するのではなく、マイクロサービスと同様に複数のサーバーに分散配置されます。
そして、メッセージ サーバー同士もJMS プロトコルによる通信によって互いに連携します。
マイクロサービスを提唱したMartin Fowler氏らが説く “土管 (dumb pipe)” は、対極にある”賢いパイプ (smart pipe)” から “賢い” 機能をできるだけ排するアプローチです。(詳細は、マイクロサービス その3 — 土管 (Dumb pipe) の意味 — *3 を参照してください。)
- ハブ サーバーによる中央集権的な制御
- WS* 標準に基づく SOAP や BPEL などの複雑なプロトコルによるマイクロサービス間の通信
- メッセージ ルーティング、データ変換などのメディエーション機能
- ビジネス ルールの適用などのビジネス ロジックを付加的に支援する機能
このアプローチは、従来のプラットフォーム製品が有していた機能をできる限りマイクロサービス側に移し、中央に君臨している連携プラットフォームの “くびき” を軽減し、マイクロサービスの自治の自由度を高めることを意味しています。
上述のメッセージ サーバーの分散配置というアプローチも、以下を実現するものです。
- ライトウェイトな JMS プロトコルによる通信機能がメインの機能
- マイクロサービス間の連携を中央で制御するものが存在しない
- マイクロサービスは自律的に動作するコレオグラフィ *2 (自治による制御) によって連携する
下図は、マイクロサービスを支えるパイプ メカニズムを仮想的なバス アーキテクチャとして図式化したものです。
仮想的なバスが従来の ESB (エンタープライズ サービス バス) などの連携プラットフォームに代わるものとなります。その実体は、分散配置される複数の JMS メッセージ サーバーから構成されます。
マイクロサービスは、JMS 非同期メッセージングによって連携し、自律的に稼働するコレオグラフィとしてアプリケーションを実現します。
次回は、”賢さ” をどこに求めるかについて考えてみたいと思います。
参考資料、文献、Webサイトなど
1. JMS (Java メッセージ サービス) の優位点
当ブログ内の記事「メッセージング再入門 (前篇) — JMS を使用することの意味 —」を参照してください。
2. コレオグラフィ
当ブログ内の記事「コレオグラフィとオーケストレーション」を参照してください。
3. “土管 (dumb pipe)” は、対極にある “賢いパイプ (smart pipe)” から “賢い” 機能をできるだけ排するアプローチ
当ブログ内の記事「マイクロサービス その3 — 土管 (Dumb pipe) の意味」を参照してください。
Twitter Facebook Google+