サービスディスカバリとは
サービスディスカバリ(Service Discovery)とは、プログラムがサービスを利用する際に、そのサービスがネットワーク上のどこに位置しているかを特定するプロセスです。具体的には、サービス識別子(例えば
ドメイン名)から、実際のサーバー接続情報(IPアドレスなど)を取得することを指します。この仕組みにより、サービスの実体が頻繁に変わる環境でも、安定したサービスアクセスが可能になります。
概要
従来の環境では、サービスを提供するサーバーのIPアドレスは固定されていることが多く、サービス利用者はそのIPアドレスを直接プログラムに記述(ハードコード)していました。しかし、クラウドコンピューティングやコンテナ技術の普及により、サーバーが頻繁に生成・破棄されるようになり、IPアドレスが動的に割り当てられることが一般的になりました。そのため、ハードコードされたIPアドレスに依存するのではなく、サービス利用時に動的に実体参照を解決するサービスディスカバリの必要性が高まりました。
要件
サービスディスカバリには、以下のような特性が求められます。
サービス死活監視: 正常に機能しているサービスにのみルーティングを行うこと。
ネットワーク位置集約: 複数のサービスインスタンスから適切なものを選択すること。
可用性: システム全体の安定性を保つため、
単一障害点とならないように高い可用性を実現すること。
手法
サービスディスカバリを実現するための主な手法は以下の通りです。
DNSラウンドロビン:
ドメイン名に対して、複数のサーバーIPアドレスをラウンドロビン方式で返す手法です。
サービスレジストリ: サービス、サービスインスタンス、サービス位置などの情報を一元管理する保管庫を利用する手法です。サービスレジストリに情報を集約することで、サービスディスカバリを効率的に実現できます。ただし、レジストリ自体が
単一障害点となる可能性があるため、高い可用性が求められます。
要素技術
サービスディスカバリを支える主な要素技術は以下の通りです。
Domain Name System (DNS):
ドメイン名とIPアドレスを対応付ける基本的な技術です。
ロードバランサ: 複数のサーバーにリクエストを分散させる技術です。サービスディスカバリと組み合わせて、可用性とスケーラビリティを高めることができます。
プロキシ: クライアントからのリクエストを中継し、サービスへのアクセスを制御する技術です。サービスディスカバリと連携して、ルーティングや負荷分散を実現できます。
実装例
コンテナ環境におけるサービスディスカバリの実装例をいくつか紹介します。
Docker:
Dockerエンジンは、コンテナに対してDNSベースのサービスディスカバリを提供しています。BridgeネットワークドライバにDNS機能が組み込まれており、コンテナ名やエイリアス名を
ドメイン名として利用できます。
Kubernetes:
Kubernetesでは、Serviceと呼ばれる仮想的なIPアドレスを用いてサービスディスカバリを実現しています。Serviceはコンテナ群に対応するロードバランサの役割も果たし、安定したサービスアクセスを可能にします。
Amazon ECS: Amazon Elastic Container Service (ECS) では、コンテナに対してDNSベースのサービスディスカバリを提供しています。ECSサービスは、コンテナのプライベートIPアドレスと死活状況を管理し、Route53 DNSにサービス名を自動登録します。
まとめ
サービスディスカバリは、動的な環境下でサービスを安定的に利用するための重要な技術です。DNSラウンドロビン、サービスレジストリ、ロードバランサ、
プロキシなど、様々な手法や要素技術が用いられています。特にコンテナ環境では、
Docker,
Kubernetes, Amazon ECSといったプラットフォームがそれぞれ独自のサービスディスカバリ機能を提供しており、開発者はそれらを活用することで、柔軟かつ可用性の高いシステムを構築できます。
参考文献
Service Discovery S-Cube Knowledge Model
Dong, H., Hussain, F.K., Chang, E.: Semantic Web Service matchmakers: State of the art and challenges[Online]. Concurrency and Computation: Practice and Experience 25(7) (May 2013) pp. 961-988.
Sun, L., Dong, H., Hussain, F.K., Hussain, O.K., Chang, E.: Cloud service selection: State-of-the-art and future research directions. Journal of Network and Computer Applications[Online] 45 (October 2014) pp. 134-150.