背景
微服务调用里,服务发现经常被当成理所当然的基础设施。但注册中心一旦抖动,调用链就会被放大影响。
实用策略
- 本地缓存上次可用实例列表
- 失败时指数退避刷新
- 查询失败时优先用“最近成功快照”
type Resolver interface {
Resolve(ctx context.Context, service string) ([]string, error)
}
type SnapshotCache struct {
mu sync.RWMutex
data map[string][]string
}
总结
服务发现的核心目标是“可用优先”,而不是“每次都拿最新”。
基础组件会失败,容错设计要把失败当常态。