【さーびすでぃすかばり】

サービスディスカバリ とは?

💡 動き回るサービスの居場所を自動で見つける「住所録システム」
📌 このページのポイント
サービスディスカバリの仕組み サービスレジストリ 名前 → IP:ポート 管理 クライアント 接続先を問合せ サービスA 192.168.1.10:8080 サービスB 192.168.1.20:3000 サービスC 192.168.1.30:5000 登録 ① 問合せ ② 応答 ③ 直接接続 動的追加/削除
サービスディスカバリの仕組み
ひよこ ひよこ

サービスディスカバリって何で必要なの?IPアドレスを設定ファイルに書いておけばいいんじゃない?

ペンギン先生 ペンギン先生

コンテナ環境ではIPアドレスがコロコロ変わるんだ。コンテナ再起動するたびに新しいIPが割り当てられるし、オートスケーリングで台数も増減する。設定ファイルに固定IPを書いていたら、すぐに古い情報になって通信できなくなるよ。

ひよこ ひよこ

DNS名前解決するのと何が違うの?

ペンギン先生 ペンギン先生

従来のDNSTTLキャッシュ時間)があるから、サービスのIPが変わってもキャッシュが切れるまで古いIPを見続ける。サービスディスカバリはリアルタイムで更新されるから、コンテナが起動した瞬間から新しいアドレスで通信できるんだ。

ひよこ ひよこ

クライアントサイドとサーバーサイドって何が違うの?

ペンギン先生 ペンギン先生

クライアントサイド方式は呼び出し側が「今どのサーバーが生きているか」をレジストリに問い合わせて、自分で接続先を選ぶ。サーバーサイド方式はロードバランサーが間に入って、クライアントは固定のエンドポイントに投げるだけ。Kubernetesのサービスはサーバーサイド方式に近いよ。

ひよこ ひよこ

サービスディスカバリ自体が落ちたらどうなるの?

ペンギン先生 ペンギン先生

まさにそれがサービスディスカバリの設計で最も重要な問題でね。レジストリが落ちると全サービスが互いを見つけられなくなって、システム全体が止まる。だからConsuletcdは複数ノードのクラスタで動かして、Raftなどの合意アルゴリズムで一貫性を保つんだけど、過半数のノードが同時に落ちるとクラスタ全体が機能停止する。さらにヘルスチェック閾値設定も難しくて、厳しすぎるとちょっとした遅延で「ダウン」と誤判定してサービスを外してしまうし、緩すぎると本当にダウンしたサービスへの通信が続いてしまう。「発見する仕組み自体の可用性」をどう保証するかが、分散システムの根本的な課題なんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「サービスディスカバリ」って出てきたら「マイクロサービスの居場所を自動で見つけて管理する仕組みのことだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Service Discovery」 = サービスの発見
💬 Service(サービス)+ Discovery(発見・探索)。「このサービスはどこにいる?」を自動で解決するんだよ
← 用語集にもどる