SDN
← 概念一覧へ
アプリケーション層

サービスディスカバリ

Service Discovery

たくさんのサービスが動的に増減する環境で、『どのサービスがどこ(IP・ポート)にいるか』を自動で管理・案内する仕組み。Consul / Etcd / Zookeeper などが担う。

キーポイント
  • 役割: 各サービスの名前・アドレス・ポートを登録・管理し、問い合わせに答える『電話交換手』。
  • 代表ツール: Consul / Etcd / Zookeeper。
  • Health check(HTTPエンドポイント)でサービスの生死を確認し、死んだものは案内先から外す。
  • Consul / Etcd は組み込みのkey-valueストアを持つ。
トレードオフ

サービスディスカバリ自体が新たな依存先・運用対象になる。ここが落ちると全サービスが互いを見つけられなくなるため、それ自体を冗長化・高可用に保つ必要がある。動的環境(オートスケール、コンテナ)では必須に近いが、サービスが少なく固定的なら静的設定の方が単純。

なぜ必要か(問題設定)

マイクロサービスでは、サービスのインスタンスがオートスケールで増えたり、障害で減ったり、別IPで再起動したりと常に動きます。すると『フィードサービスは今どこにいる?』が固定では分からなくなります。IPをコードに直書きしたら、サーバーが入れ替わるたびに壊れてしまう。

そこで**サービスディスカバリ(電話交換手)**の出番です。各サービスは起動時に『私はフィードサービス、IPは10.0.0.5です』と登録し、呼びたい側は『フィードサービスどこ?』と交換手に聞くだけでよくなります。

図を描画中...

Health Check で死活監視

サービスディスカバリは登録を受けるだけでなく、**各サービスの健康診断(health check)**を定期的に行います。多くはサービスが用意する /health のようなHTTPエンドポイントを叩き、応答がなければ『死んでいる』と判断して案内先リストから外します。これにより、壊れたサービスへリクエストが飛ぶのを防げます。

つまずきポイント

  • サービスディスカバリ自体が単一障害点になりうる。『全員がここに問い合わせる』中枢なので、それ自体を冗長化(クラスタ化)して高可用にする必要がある。Zookeeper等がクラスタで動くのはこのため。
  • サービスが数個しかなく構成が固定なら、わざわざ導入せず設定ファイルにIPを書く方がシンプル。動的にスケールする規模になって初めて真価を発揮する。

📊 図解

登録→ヘルスチェック→検索→呼び出し

図を描画中...

関連する概念

この概念で腕試し

関連する 3 問のクイズに挑戦できます。

クイズを解く