マイクロサービスのデザインパターン

マイクロサービスにもデザインパターンがあるはずだと,この辺りを参考にまとめてみる.

Circuit Breaker

  • 分散されたサービスの呼び出しにおいて,提供サービスがfailしているに関わらず,サービス呼び出し側が,呼び出しを続けると計算リソースの枯竭を招き,システム全体の性能低下を招く.サービスと呼び出し側コードの間にCircuit Breakerを置くことで,failしたサービスへのコネクションを抑制し,サービスが復旧した際の迅速な全体回復を行う.

Bulkhead

  • システム障害を局所化するために,同じシステムを複数用意し,それぞれを障壁を用いて孤立化しておく.障壁とは,データセンター単位,VM単位,コンテナ単位などが考えられる.

API Gateway / Orchestrated API

  • サービス利用者にとって,サービスの粒度が小さすぎる場合など,それぞれと接続するのは効率が悪いときがある.また,オーケストレイトされたサービスを呼び出したい場合には,APIを直接呼び出すのではなく,API Gatewayを介して接続する.個人的には,Gatewayを介することで,ここにモニタリングや認証の仕組みを持ち込める反面,ここが単一故障点になる気もする.また,ここが重くなると,マイクロサービスが忌み嫌うESBに向かってしまう.

Service Registry / Service Discovery

  • サービス同士が直接つながるのではなく,サービスをService Registryに登録し,Service Registryを用いた発見,結合を行う.UDDI再び?

Instantiation

  • サービスをどのスタックレベルでinstantiateするか.以下の様な粒度がある.
  • Multiple service instances per host
  • Single service instance per host
  • Service instance per VM
  • Service instance per Container

Polyglot Persistence

  • 一つのシステムの中で)複数のデータベース (SQLやNoSQL)を用途に応じて使い分けること
  • Polyglot Programmingのデータベース版
  • 特定のdata consistencyメカニズムを意味するのではなく,複数のデータベース実装を使い分けるという意味で用いられているようだ

Consumer-Driven Contracts

  • 通常1対多となるサービスの提供者と消費者間でのサービス契約において,消費者が,提供者のサービス全体ではなく,必要な部分のみを「期待」 (expectation)として提供者側に提示することで,提供サービスの更新への耐性を向上させ,サービスやビジネスの価値を高めることができる.

Tolerant Reader

  • サービスを疎結合しても,サービス間の通信はなくならない.コードの更新に対して耐性を持ったデータ読み込みのパターン
  • “送信するものに関しては厳密に、受信するものに関しては寛容に.” by Jon Postel

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中