2

在 kubernetes中使用redis作为 sidecar 的优缺点是什么?在每个 app pod 中添加 redis 容器时是否可以有持久化缓存?这会影响缓存的可用性可扩展性吗?

4

2 回答 2

5

我很难想到将 Redis 作为 Sidecar 运行有什么好处。我总是将它作为一个单独的部署(如果启用持久性,则作为有状态集)运行,并带有单独的服务。

如果 Redis 在它自己的 pod 中,那么:

  • 如果您的应用程序有多个副本,它们将共享同一个 Redis
  • 当您重新部署应用程序时,它也不会终止并重新启动 Redis
  • 如果为 Redis 启用了持久性,则无需为应用程序 pod 配置持久性存储

鉴于 Redis 的整体能力(主要是内存存储,有限的数据类型支持),简单地将这些缓存数据存储在应用程序中的单例对象中将或多或少等同于将 Redis 作为 sidecar 运行(每个 pod 一个缓存数据副本, 删除 pod 时数据会丢失)。

于 2020-04-28T09:51:29.703 回答
0

我同意大卫迷宫的回答。在这个操作中,REDIS 是一个通常的长期缓存。所有 pod 都进入同一个缓存,因此它们可以重用它并且它具有一致的输出。

另一方面,我也在评估用于 redis 缓存的 sidecar 模型,简而言之,这完全取决于您对一致性的需求。

这个 sidecar redis 意味着每个微服务 pod 都有自己的 redis。所以当每个微服务进入数据库时​​,它会将对象存储在自己的redis中。每当读取相同的对象时,微服务都会转到 redis,而不是数据库。这样可以节省大量数据库读数,但会降低一致性。它在云数据库读数上为我节省了 $$。

就我而言,缓存将在 1 分钟左右过期,因此在我的情况下,两者之间缺乏一致性是可以的。

在可扩展性和可用性的情况下,我什至会说它可以增加它,因为您可以轻松地运行许多 pod。甚至通过在 redis pod 上设置最大内存,当达到限制(150mb?)时,您也可以轻松地重新启动它。

于 2021-05-20T17:31:44.920 回答