マイクロサービス間の連携をシーケンス図で可視化する
🔗 はじめに
本記事では、マイクロサービスアーキテクチャにおける連携の流れをシーケンス図で表現する方法を解説します。
マイクロサービスは、それぞれが独立してデプロイ・スケール可能な小さなサービス群で構成されますが、ビジネスロジックを達成するにはサービス間連携が不可欠です。
ここでは、典型的な連携パターンをPlantUMLでモデル化し、視覚的に理解しやすくします。
🧩 典型的な連携シナリオの例
今回は以下のような典型的な3サービス構成を例にします:
-
API Gateway:クライアントとのフロント役
-
User Service:ユーザー情報の取得・管理
-
Order Service:注文処理を担当
🛠️ PlantUMLによるマイクロサービス連携のシーケンス図
以下は、「ユーザーが注文履歴を取得する」という処理の流れを示したシーケンス図です。
@startuml
actor Client
participant "API Gateway" as Gateway
participant "User Service" as User
participant "Order Service" as Order
Client -> Gateway: GET /orders
Gateway -> User: GET /user-info
User --> Gateway: user data
Gateway -> Order: GET /orders?userId=xxx
Order --> Gateway: order list
Gateway --> Client: order list with user info
@enduml
🔍 ポイント解説
-
クライアントからは1リクエストで完了
-
バックエンドではUserとOrderの2サービスが連携
-
Gatewayが集約役として中継・統合している
🔁 リトライ・障害・非同期処理を含めた例
次は、Order Serviceが混雑しており、リトライする場合の例です。
@startuml
Client -> Gateway: POST /order
Gateway -> Order: create order
loop Retry up to 3 times
Order --> Gateway: 503 Service Unavailable
Gateway -> Order: retry
end
Order --> Gateway: 201 Created
Gateway --> Client: Order confirmed
@enduml
リトライロジックやステータスコードの流れを明示することで、運用上の注意点が共有しやすくなります。
📡 非同期通信(Pub/SubやQueueベース)の表現
マイクロサービスでは非同期処理も頻繁に登場します。以下はメッセージキューを介した処理の一例です。
@startuml
actor Client
participant "API Gateway" as Gateway
participant "Queue (Kafka/SQS)" as Queue
participant "Billing Service" as Billing
Client -> Gateway: POST /payment
Gateway -> Queue: publish(payment info)
Queue -> Billing: consume(payment info)
Billing -> Billing: process payment
@enduml
🔍 ポイント
-
publish
とconsume
の表現はあくまで概念的 -
非同期処理であるため、戻り値のタイミングは図に含めない設計もあり
📌 よく使う構文の補足(マイクロサービス編)
記法 | 意味 |
---|---|
loop |
リトライ処理やポーリングの表現に便利 |
alt / else |
成功/失敗のフロー分岐 |
participant |
サービス名(必要に応じてエイリアスも) |
note right |
説明補足の挿入にも使える |
🎁 おわりに
マイクロサービス連携をシーケンス図で整理することで、サービス間の依存関係、処理の責務、障害点を明確にすることができます。
PlantUMLはGitで管理できるため、仕様変更時の差分確認にも強く、ドキュメントの属人化を防ぐ手段としても非常に有効です。
次のステップとしては、SAGAパターンや分散トランザクションの表現など、さらに高度なシナリオも扱ってみましょう!
必要であれば、この内容をベースに「エラーハンドリング特化」や「フロント~バック全体のエンドツーエンド図」などのバリエーションも作れますよ。どうしますか?