背景

微服务调用里,服务发现经常被当成理所当然的基础设施。但注册中心一旦抖动,调用链就会被放大影响。

实用策略

  1. 本地缓存上次可用实例列表
  2. 失败时指数退避刷新
  3. 查询失败时优先用“最近成功快照”
type Resolver interface {
    Resolve(ctx context.Context, service string) ([]string, error)
}

type SnapshotCache struct {
    mu   sync.RWMutex
    data map[string][]string
}

总结

服务发现的核心目标是“可用优先”,而不是“每次都拿最新”。


基础组件会失败,容错设计要把失败当常态。