サービスディスカバリ
サービスディスカバリメカニズムは、サービスインスタンスが起動・終了したときにサービスレジストリを更新する。
クライアントがサービスを呼び出すと、サービスディスカバリメカニズムはサービスレジストリにクエリを送り、利用できるインスタンスの一覧を取得し、どれかにルーティングする。
アプリケーションレベルの実装パターン
サービスディスカバリとそのクライアントがサービスレジストリを操作する
アプリケーションレベルでサービスディレクトリが存在すると、プラットフォームをまたいでサービスが存在しても、処理できるというメリットがある。
サービスインスタンスがサービスレジストリの登録APIを呼び出して自分のアドレスを登録する
クライアントがサービスレジストリからリストを取得し、クライアント自身でバランシングアルゴリズムを使ってサービスインスタンスを選択する
プラットフォームが提供するパターン
DockerやKubernatesなどのデプロイプラットフォームは、組み込みでサービスがレジストリとディスカバリメカニズムを持っている。
プラットフォームが提供する最大の利点は、プラットフォームを利用する側が意識せずともサービスディスカバリを行ってくれるという点にある。また、サービスにもクライアントにもサービスディスカバリのためのコードが含まれなくなるため、言語やフレームワークに依存せずに利用ができる。
サービスがレジストリに登録するのではなく、サードパーティであるレジストラが登録処理をする
サービスのソースコードが影響を受けない。
また、サービスインスタンスにヘルスチェックをおこない、インスタンスの登録/登録解除を行える
クライアントでレジストリに問い合わせずに、DNS名をリクエストルーター(ロードバランサー)に送り、ルーターがサービスレジストリに問い合わせし、利用可能なサービスインスタンスにリクエストの転送を行う
AWS Elastic Load Balancerなどで提供されている
https://scrapbox.io/files/60b78ce84b9ae5001cf91206.png