サービスディスカバリ

マイクロサービスが他のサービスのネットワーク位置を動的に発見する仕組み

マイクロサービスインフラ

サービスディスカバリとは

サービスディスカバリは、マイクロサービスが他のサービスのネットワーク位置 (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

サービスディスカバリにはヘルスチェックが不可欠。不健全なインスタンスをルーティングから除外する。

より深く学ぶには関連書籍が役立つ。

関連用語