ビス」と、「アセット管理サービス」が 必要とわかる 10 Strategy service Create strategy Get strategy API エンドポイント イベント Strategy created Get user User service Asset service Get asset Search asset
order service は、投 資のリクエストを受け付けた 後、支払い処理の完了を待って から、実際の発注を行う 12 Strategy investment Create payment Confirm Payment details Payment completed Get strategies Client Strategy order service Payment service Strategy service Strategies Create orders Save request Process payment 複数のアクション が混在している?
態変化に責任を持つ」というク リーンアーキテクチャーの考え 方にマッピングできる 15 Payment completed Get strategies Strategy order service Payment service Strategy service Strategies Create orders Order service Order details Place orders Order completed
のが Orchestration パターンで、プロセスの全体を意識しないサービス群がイベントフ ローで自立連携するのが Choreography パターンと理解できる 16 Service A Service B Service C Service D API リクエスト リクエスト Service A Service B Service C Service D API リクエスト イベント Orchestration パターン Choreography パターン
売却リクエストを 外部システムに送信 Stock exchange B Stock exchange C REST API SOAP CSV を FTP 転送 Market service Stock exchange A Stock exchange B Stock exchange C SOAP service FTP service
分割しておく • ビジネス要件の変化に伴う機能追加の際は、「単 一責任の原則」を破らないよう、必要に応じて サービスの分割を検討する 23 Micro service API 既存の API に フィールドを追加 API 既存のサービスに API を追加 Micro service API 新しいマイクロ サービスを追加 機能追加のパターン
はいかない・・・ 28 処理の流れと失敗ケース Create order Confirm reservation Charge fee Client Order service Stock transaction service Fee service Save order Reserve stock × Reserve stock
• プロセスに含まれる処理が 変わるごとに、Order service に変更が必要 Create order Confirm reservation Charge fee Client Order service Stock transaction service Fee service Reserve stock Market service Confirm charge Place order Confirm place order Confirm order
Compensating アクション Order A1: Create order C1: Cancel order A2: Update status (placed) C2: Update status (cancelled) Stock transaction A3: Reserve stock C3: Release stock Fee A4: Charge fee C4: Refund fee Market A5: Place order C5: Cancel order Order service Stock transaction service Fee service Market service Order created A1 Stock reserved Fee charged Order placed A3 A4 A5 A2
ID を発行して、各サービスは ID ごとに実行した アクションをデータベースに記録しておく • 各サービスは自律的に動作するため、あらゆる処理 パターンにおいて、意図通りのロールバックが行わ れることを事前検証するのは大変 • トレーシングの仕組みを導入して、エラー発生時の 動作を再現・確認できるようにすることが必要 (すべてのアクションを ID と共にログに記録して おく) Order service Market service Order failed C1, C2 Stock transaction service Fee service C3 C4
で、エラー発生時の確認が容易になる Stock transaction service Fee service Market service A1: Create order A3: Reserve stock A4: Charge fee A5: Place order C3: Release stock C4: Refund fee C2: Update status (cancelled) Failed Saga log ワークフロー マネージャー
ページング機能 ◦ /orders?customerIds=4,5,10,20 ID 指定での検索 • 複数のサービスに跨ったデータを Join する場合は、そのための機能を個別に実装する ◦ 図は API Gateway で実装する例で、この場合は、クライアント開発チームが実装する BFF パターンが推奨される Customer service Order service get all customers (1) for each customer: get order (2) (1) (2) get orders for all customers
複製先のサービスが必要なタイミングで自発的に複製元のデータを取りに行く • 重複データの一時的な不整合があることを前提としたアプリケーション設計が必要 Order service Order database Fee service Order id Stock id Units Fee details 782346 abc 25 ・・・・ get fee details create order get order details Fee service のデータを重複保存
でさらに負荷が増加して、最終的に完全停 止する • サービス停止の影響が呼び出し元のサービ スに伝搬していき、全面的なサービス停止 に到る Order service Fee service Market service × × Micro Service A × ロード バランサー Fee service Fee service × Order service ?