フィオラノ ソフトウェア ジャパン ブログ
    Twitter
  • Facebook
  • Google+

マイクロサービス (その5) –賢さをどこに求めるか–

miroservice-banner

前回 (その4) は、機能性の低いパイプ (Dumb pipe: 土管) のアーキテクチャとして、仮想的なバスを提示しました。

今回は、“smart endpoints and dumb pipes (賢いエンドポイントと機能性の低いパイプ)” の一方である “smart endpoint (賢いエンドポイント)” について考察してみたいと思います。
ビジネス ロジックを複数のマイクロサービスからなるコレオグラフィとして実現し、マイクロサービス間の通信はライトウェイトなメッセージング サーバーで構成される仮想的なバス (Dumb pipe: 土管) によって支えるアーキテクチャが良いと説明しました。
このアーキテクチャによって、オンプレミスやクラウド上に分散されて配置されるマイクサービスを連携し、1つのビジネス ロジックとして実行することが可能になります。

VirtualBus
土管とコレオグラフィ

個々のマイクロサービスは、それが有する機能特性/機能ドメインによって下記の稼働環境を他マイクロサービスとは非依存に選択でき、これがマイクロサービスの利点ともなっています。

  • 開発言語
  • 稼働プラットフォーム (マシン/OS)
  • 配置場所 (オンプレミス/クラウド、他組織の IT 環境、デバイスなど)

 

また、データは個々のマイクロサービスの中に隠蔽され、マイクロサービス間でデータを共有することはできる限り避けるように設計実装されます。こうすることで、他マイクロサービスを含む外部の変化変更からの影響を最小化できるからです。

 

メディエーション機能 *1

前述のようにマイクロサービス間の非依存性/疎結合性を高めると、マイクロサービスが通信する際にデータ形式などの違いを吸収するなど、本来のビジネスロジックではないメディエーション機能が必要となってきます。

メディエーションとは、日本語に訳すと “調停” や “仲介” という意味で、マイクロサービス間のデータ スキーマなどの違いを調整し、両者がうまくコミュニケーションできるようにする機能です。代表的なメディエーション機能を下の表にまとめました。

メディエーション機能
データ変換

  • データマッピング
  • XML – プレイン テキスト間の変換
  • EDI 電文 – XML 間の変換
  • XML – JSON 間の変換
  • XML から PDF への変換
データ暗号化、圧縮
フローコントロール (データのルーティング)

  • 複数のマイクロサービスからのデータを 1つにまとめる
  • データの分割
  • データの内容に応じた送信先マイクロサービスへの振り分け
  • 受信したデータのフォーマット チェックなどの検証

 

これらのメディエーション機能を如何に実現するかが、マクロサービスによるアプリケーション構築における課題の一つです。

ビジネス ロジックを実行するマイクロサービスの中にこれらのメディエーション機能をも持たせることは、マイクロサービスの利点を失わせるものです。モノリスなアプリケーションに近づいてしまう方法です。

フィオラノ ソフトウェアでは、メディエーション機能もマイクロサービスとして実装する方法を推進しています。フィオラノので製品では、上記の表に示したメディエーション機能毎にマイクロサービスを用意し、製品にバンドルしています。これらのマイクロサービスは、ユーザー独自のビジネス ロジックを実行するマイクロサービスと通信できるようにあらかじめプリビルトされています。細かな動作はパラメータ指定で選択できるようにしており、プログラミングすることなくビジネス ロジック間にメディエーション機能を組み込むことができるようになっています。

 

アダプター

マイクロサービスによるアプリケーション開発あるいはアプリケーション連携において課題となってくるのが、既存のアプリケーションです。コストや困難度を無視すれば、マイクロサービス アーキテクチャに基づくものへと再構築するということも可能です。しかしながら、製品ベンダーなどから提供されているパッケージ ソフトの場合には、作り変えることは不可能です。

レガシーなアプリケーションやパッケージ製品などは、マイクロサービスとするのではなく、今ある姿のまま稼働させることがベターな方法です。ただし、マイクロサーサービスからこれらの非マイクサービスなアプリケーションへのアクセス手段を用意しておく必要があります。これによって、既存ロジックをマイクロサービスによる新しいアプリケーションの中でも利用/再利用できるようになるからです。

アクセス手段は、いわゆるアダプターとしての機能を持ったマイクロサービスがベストです。

アダプターはアクセス先がサポートしているプロトコルに応じて、下の表に示す種類毎にマイクロサービスとして用意します。

アダプター (代表的なもの)
SAP アダプター Salesforce アダプター
DBMS (JDBC) アダプター JMS / MOM 用各種アダプター
Web サービス (SOAP) アダプター HTTP アダプター
REST アダプター FTP アダプター
SMTP アダプター POP3 アダプター
SMS アダプター HL7 アダプター
FIX アダプター SWIFT アダプター
EDI 用各種アダプター EJB アダプター
ファイル 読み書き用アダプター

 

マイクロサービスのレイヤー

マイクロサービスは次の3種のタイプに分けて考えるのが、現実のアプリケーション開発やアプリケーション連携には妥当な方法論のように思います。

  • アプリケーション本来の機能を実装したマイクロサービス
    ビジネス ロジックを実装。他のアプリケーションでもビジネス ロジックとして再利用可能。
  • サポート機能を実装したマイクロサービス
    その都度開発するのではなく、マイクロサービスの部品としてコンテナに格納しておく。あるいはマイクロサービスをサポートするプラットフォーム製品ベンダーのバンドルを利用する。
  • メディエーション マイクロ サービス
    データ変換などのメディエーション機能を果たす
  • アダプター マイクロサービス

マイクロサービス形態ではないビジネス ロジックにアクセスするための機能を果たす

 

これらのマイクロサービスのタイプは下図のようにレイヤー構造として図式化することができます。

maicroservice_layer
マイクロサービスのレイヤ

“賢いエンドポイント” を実現するための現実的な解は、上図のようにマイクロサービスをタイプ分けしておくことだと思います。

 

参考 (資料、文献、Webサイトなど)

1. メディエーション機能

メディエーション機能の詳細については、筆者の ThinkIT での連載記事を参照してください。

1) ESB におけるデータ変換 (前篇)

http://thinkit.co.jp/free/article/0703/7/3/

2) ESB におけるデータ変換 (後編)

http://thinkit.co.jp/free/article/0703/7/4/

3) アプリケーションの連携方式

http://thinkit.co.jp/free/article/0703/7/5/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>