登录
首页 >  Golang >  Go问答

多个副本同时访问 kubernetes 中的缓存

来源:stackoverflow

时间:2024-03-23 14:36:33 281浏览 收藏

为了测量同一服务的多次调用的时间,本文探讨了在 Kubernetes 集群中缓存值以使多个副本同时访问的解决方案。最初的实现面临着当副本崩溃时缓存丢失的问题。本文提出的解决方案是配置服务以始终使用相同的 IP 地址,通过将 `service.spec.sessionaffinity` 设置为“`ClientIP`”来实现相同的 Pod。

问题内容

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 集群中崩溃时,这可以工作,对吧?下一个呼叫可能来自另一个端点?如何在微服务中缓存值以便每个副本都可以访问它们?


解决方案


终于找到了这个:

https://kubernetes.io/docs/concepts/services-networking/service

您可以将服务配置为始终使用相同的 ip 地址 通过将 service.spec.sessionaffinity 设置为“clientip”来实现相同的 pod 默认为“无”

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  sessionAffinity: ClientIP
  selector:
    app: MyApp

这样您就可以安全地将简单值缓存在内存中!

今天关于《多个副本同时访问 kubernetes 中的缓存》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>