猿问

多个副本访问 kubernetes 中的缓存

Prometheus 日志记录的一项统计数据是服务调用的持续时间,但我想测量同一服务的多次调用的时间。


所以我想创建一个字符串到 time.Time 的映射


type SomeService struct {

    durations map[string]time.Time

}

第一次输入时,将存储该帐户 ID 的当前时间


durations[GetId()] = time.Now()

然后最后......在另一个调用中......总时间被存储。


startTime := c.durations[id]

duration, _ := c.durationStat.GetMetricWith(prometheus.Labels{"type": duration})

duration.Set(time.Now().Sub(startTime).Seconds())

delete(c.durations, id)

当只有一个副本时这可行,但它在 Kubernetes 集群中崩溃了,对吧?下一个呼叫可能来自另一个端点?如何在微服务中缓存值以便每个副本都可以访问它们?


慕尼黑5688855
浏览 86回答 1
1回答

qq_遁去的一_1

终于找到了这个:您可以通过将 service.spec.sessionAffinity 设置为“ClientIP”来配置服务,使相同的 IP 地址始终访问同一个 pod,默认值为“None”apiVersion: v1kind: Servicemetadata:  name: my-servicespec:  sessionAffinity: ClientIP  selector:    app: MyApp这样您就可以安全地将简单值缓存在内存中!
随时随地看视频慕课网APP

相关分类

Go
我要回答