サービスディスカバリ
Service Discovery
たくさんのサービスが動的に増減する環境で、『どのサービスがどこ(IP・ポート)にいるか』を自動で管理・案内する仕組み。Consul / Etcd / Zookeeper などが担う。
なぜ必要か(問題設定)
マイクロサービスでは、サービスのインスタンスがオートスケールで増えたり、障害で減ったり、別IPで再起動したりと常に動きます。すると『フィードサービスは今どこにいる?』が固定では分からなくなります。IPをコードに直書きしたら、サーバーが入れ替わるたびに壊れてしまう。
そこで**サービスディスカバリ(電話交換手)**の出番です。各サービスは起動時に『私はフィードサービス、IPは10.0.0.5です』と登録し、呼びたい側は『フィードサービスどこ?』と交換手に聞くだけでよくなります。
図を描画中...
Health Check で死活監視
サービスディスカバリは登録を受けるだけでなく、**各サービスの健康診断(health check)**を定期的に行います。多くはサービスが用意する /health のようなHTTPエンドポイントを叩き、応答がなければ『死んでいる』と判断して案内先リストから外します。これにより、壊れたサービスへリクエストが飛ぶのを防げます。
つまずきポイント
- サービスディスカバリ自体が単一障害点になりうる。『全員がここに問い合わせる』中枢なので、それ自体を冗長化(クラスタ化)して高可用にする必要がある。Zookeeper等がクラスタで動くのはこのため。
- サービスが数個しかなく構成が固定なら、わざわざ導入せず設定ファイルにIPを書く方がシンプル。動的にスケールする規模になって初めて真価を発揮する。
📊 図解
登録→ヘルスチェック→検索→呼び出し
図を描画中...