← 中文资源

简体中文版本

服务发现:不写死主机名也能找到实例

服务发现把逻辑服务名映射到当前存活实例地址,让调用方和负载均衡器自动跟随扩缩容、发布与故障变化。

阅读英文原文

它解决的问题

地址并不稳定。Pod 重启会得到新 IP,弹性伸缩组会替换节点,故障转移会把副本提升到另一个区域。服务发现让调用方请求 payments 这个名字,而不是 10.0.4.17:8080,并拿到此刻确实健康的实例列表。

客户端发现与服务端发现

客户端发现模式下,调用方查询注册中心、自行选择实例并直连。服务端发现模式下,调用方访问负载均衡器或虚拟 IP,由后者完成查询。例如 Kubernetes 的 Service 为 Pod 提供稳定的虚拟地址,EndpointSlice 则跟踪后端实例。

客户端发现少一跳,也能实现更聪明的均衡策略,但会把发现逻辑推进每种语言的客户端库;服务端发现集中了这份逻辑,代价是多一次网络跳转。

健康检查与注销

注册只是容易的一半,注销才是注册表腐烂的地方:崩溃的进程无法宣告自己死亡,平台必须通过心跳、TTL 或编排器状态发现失败。健康感知的解析会在流量到达之前摘除不健康端点。

运维要点

把注册中心当作关键基础设施:跨可用区冗余、每个客户端本地缓存,以及查询失败时经过演练的降级路径。过期条目比缺失条目更危险,因为它会把请求送进黑洞。