【问题标题】:Redis in kubernetes - sidecar or client-server model?Kubernetes 中的 Redis - Sidecar 还是客户端-服务器模型?
【发布时间】:2020-08-11 21:17:51
【问题描述】:

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

【问题讨论】:

    标签: caching kubernetes redis persistent-storage sidecar


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢..但是我们可以提一下所有redis sidecar容器共享的持久存储吗?这样数据库调用的延迟会因为没有调用外部redis pod而减少吗?
    • 如果您测量它,并且它对您的应用程序来说是一个重大问题,您可以重新访问它。复制和数据生命周期问题可能比每次调用节省一小部分时间更重要。 Kubernetes 中的大多数东西都是跨网络的,通常不是什么大问题。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 2010-09-29
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      相关资源
      最近更新 更多