多个副本访问kubernetes中的缓存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个副本访问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集群中崩溃时可以使用,对吗?下一个呼叫可能会在另一个端点上传入?您如何在微服务中缓存值,以便每个副本都可以访问它们?

答案

最后找到这个:

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

您可以将服务配置为始终具有相同的IP地址,通过将service.spec.sessionAffinity设置为“ ClientIP”默认为“无”

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

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

以上是关于多个副本访问kubernetes中的缓存的主要内容,如果未能解决你的问题,请参考以下文章

Google Container Engine (Kubernetes):Websocket (Socket.io) 不适用于多个副本

避免在内存中创建多个代码副本

多个用户访问同一段代码

如何使控制台中的视图缓存片段过期?

始终运行一个 Kubernetes pod 实例

Kubernetes——自动扩展容器!假设你突然需要增加你的应用;你只需要告诉deployment一个新的 pod 副本总数即可