こちらの、パターン集を集めている?Webサイトに載っていたので読んでみました。
http://microservices.io/patterns/microservices.html
Context and Problem
レイヤー分けされたり、hexagonal architectureをもつアプリケーションは、以下のようなコンポーネントから構成される。
- Presentation compornents
- Business logic
- Database access logic
- Application integration logic
このような様々なレイヤー分けされたサービスから構成されるシステムを(ざっくりと)マイクロサービスと呼ぶ。
これらの構成をもつアプリにおけるデプロイアーキテクチャはどのようなものか?
Solution
- Scale Cubeなアプリケーションアーキテクチャ
- 機能的に分解された多くのサービスの集合としてアプリケーションが動作する
- サービスは、HTTP/RESTのような同期的なコミュニケーションと、AMQPのような非同期的なコミュニケーションを使う
- サービスは、それぞれが独立して開発/デプロイされる
- それぞれのサービスは、それぞれが分離するために自身のDBをもつ。それらのDBはレプリケーションやアプリケーションレベルのイベントで保守される。
Solutionの問題
- 開発者は、モノリシックアーキテクチャ以上の、分散システムを構築するための複雑性を扱わなければいけない
- IDEやツールの多くは、モノリシックアーキテクチャ向けのもの
- Testingがより困難になる
- サービス間の内部処理の実装が必要
- それぞれの開発チーム間の連携を構築する必要がある
- 分散トランザクションを使う必要が有る
- デプロイが複雑
- 個々のサービスが独立して起動、利用可能になるまでの時間が必要なので、サービスが利用可能になるまでに最大でサービス分のオーバーヘッドがかかる
類似
API Gateway pattern
APIを受け取るgatewayを境界に、Client/Serverで扱う処理を分散させる
Netflix APIのようなもの

Scale Cube
The Art of Scalabilityに記載されているパターン
アプリケーションのスケールを、箱型のXYZ軸のそれぞれの軸をもとに表現して説明したパターン
- X軸スケーリング
- Horizontal duplication
- アプリケーションのクローンを増やすことでスケールさせる
- Y軸スケーリング
- Functional Decomposition
- 1つのサービスを複数のサービスに分離させ、動作させること
- Z軸スケーリング
- Data partitioning
- コードの独立したコピーをそれぞれのサーバーで動作させることで、X軸スケールのように動作させる
- X軸との差は、このZ軸はデータのサブセットのみに責任をもつ
関連用語
AMQP
Advanced Message Queuing Protocol