kubernetes 中的 Redis - 边车或客户端 - 服务器模型?

Redis in kubernetes - sidecar or client-server model?

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

我很难想出 运行将 Redis 作为 sidecar 有什么优势。我总是 运行 它作为一个单独的部署(如果启用了持久性,则为有状态集)和一个单独的服务。

如果 Redis 在其自己的 pod 中,则:

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

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

我同意 David Maze 的回答。在此操作中,REDIS 是一个常见的长期缓存。所有 pods 都进入同一个缓存,因此他们重用它并且它具有一致的输出。

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

这个sidecar redis意味着每个微服务pod都会有自己的redis。所以每个微服务去数据库的时候,然后把对象存到自己的redis中。每当读取同一个对象时,微服务都会转到 redis,而不是数据库。这节省了大量的数据库读数,但它损害了一致性。它为我节省了 $$ 云数据库读数。

在我的例子中,缓存将在 1 分钟左右过期,所以在我的例子中,两者之间缺乏一致性是可以的。

在可扩展性和可用性方面,我什至会说它可以增加它,因为您可以轻松地拥有许多 pods 运行。甚至通过在 redis pod 上设置最大内存,然后您可以在达到限制(150mb?)时轻松重启它。