サービスディスカバリ
マイクロサービスが他のサービスのネットワーク位置を動的に発見する仕組み
マイクロサービスインフラ
サービスディスカバリとは
サービスディスカバリは、マイクロサービスが他のサービスのネットワーク位置 (IP アドレス、ポート) を動的に発見する仕組みである。コンテナやサーバーレスでは IP が動的に変わるため、ハードコードできない。
クライアントサイド vs サーバーサイド
| 方式 | 説明 | 例 |
|---|---|---|
| クライアントサイド | クライアントがレジストリに問い合わせ | Consul, Eureka |
| サーバーサイド | ロードバランサーがルーティング | ALB, API Gateway |
| DNS ベース | DNS で名前解決 | Cloud Map, Route 53 |
サーバーレスでのサービスディスカバリ
Lambda ベースのアーキテクチャでは、従来のサービスディスカバリは不要。AWS のサービス統合が代替する。
Lambda A → API Gateway の URL → Lambda B
Lambda A → DynamoDB のテーブル名 → DynamoDB
Lambda A → SQS のキュー URL → SQS
ECS タスクが起動すると Cloud Map に自動登録され、order-service.myapp.local で名前解決できる。
ECS でのサービスディスカバリ
ECS では Cloud Map による DNS ベースの自動登録、ALB のパスベースルーティング、App Mesh によるサービスメッシュの 3 つの方法がある。
CloudFormation の参照
# CloudFormation の !Ref と !GetAtt がサービスディスカバリの役割
OrderFunction:
Properties:
Environment:
Variables:
TABLE_NAME: !Ref OrdersTable # テーブル名
QUEUE_URL: !Ref NotificationQueue # キュー URL
BUCKET_NAME: !Ref AssetBucket # バケット名
サーバーレスでは CloudFormation の参照が最もシンプルなサービスディスカバリ。
ヘルスチェック
Service:
Properties:
HealthCheckCustomConfig:
FailureThreshold: 3
サービスディスカバリにはヘルスチェックが不可欠。不健全なインスタンスをルーティングから除外する。
より深く学ぶには関連書籍が役立つ。