サービスディスカバリ
マイクロサービスが他のサービスのネットワーク位置を動的に発見する仕組み
サービスディスカバリとは
サービスディスカバリは、マイクロサービスが他のサービスのネットワーク位置 (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
サービスディスカバリにはヘルスチェックが不可欠。不健全なインスタンスをルーティングから除外する。
より深く学ぶには関連書籍が役立つ。
この記事は役に立ちましたか?
関連用語
サービスメッシュ
マイクロサービス間の通信を透過的に管理するインフラ層で、トラフィック制御・認証・監視を提供する
DNS
ドメイン名を IP アドレスに変換するインターネットの名前解決システム
ロードバランシング
複数のサーバーにトラフィックを分散し、可用性とスケーラビリティを向上させる仕組み
入力バリデーション
ユーザー入力を検証し、不正なデータがシステムに入り込むのを防ぐセキュリティの基本
サーバーレス
サーバーの管理をクラウドプロバイダーに委ね、コードの実行に対してのみ課金されるコンピューティングモデル
マイクロサービス
1 つの大きなアプリケーションを複数の小さなサービスに分割し、それぞれが独立してデプロイ・スケール可能な状態で協調動作するアーキテクチャパターン