サービスディスカバリ

サービスディスカバリメカニズムは、サービスインスタンスが起動・終了したときにサービスレジストリを更新する。クライアントがサービスを呼び出すと、サービスディスカバリメカニズムはサービスレジストリにクエリを送り、利用できるインスタンスの一覧を取得し、どれかにルーティングする。

アプリケーションレベルの実装パターン

サービスディスカバリとそのクライアントがサービスレジストリを操作する アプリケーションレベルでサービスディレクトリが存在すると、プラットフォームをまたいでサービスが存在しても、処理できるというメリットがある。

  • Self registration パターン
    • サービスインスタンスがサービスレジストリの登録APIを呼び出して自分のアドレスを登録する
  • Client-side discovery パターン
    • クライアントがサービスレジストリからリストを取得し、クライアント自身でバランシングアルゴリズムを使ってサービスインスタンスを選択する

プラットフォームが提供するパターン

DockerやKubernatesなどのデプロイプラットフォームは、組み込みでサービスがレジストリとディスカバリメカニズムを持っている。 プラットフォームが提供する最大の利点は、プラットフォームを利用する側が意識せずともサービスディスカバリを行ってくれるという点にある。また、サービスにもクライアントにもサービスディスカバリのためのコードが含まれなくなるため、言語やフレームワークに依存せずに利用ができる。

  • 3rd party registration パターン
    • サービスがレジストリに登録するのではなく、サードパーティであるレジストラが登録処理をする
    • サービスのソースコードが影響を受けない。
    • また、サービスインスタンスにヘルスチェックをおこない、インスタンスの登録/登録解除を行える
  • Server-side discovery パターン
    • クライアントでレジストリに問い合わせずに、DNS名をリクエストルーター(ロードバランサー)に送り、ルーターがサービスレジストリに問い合わせし、利用可能なサービスインスタンスにリクエストの転送を行う
    • AWS Elastic Load Balancerなどで提供されている
    • [https://scrapbox.io/files/60b78ce84b9ae5001cf91206.png]