サービスディスカバリ

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

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

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

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

# 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

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

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

この記事は役に立ちましたか?

関連用語

関連する記事