Couchbase 热身策略

Couchbase warmup strategies

我们在生产中有一个 memcached 集群 运行。现在我们用 Couchbase 集群替换 memcached 作为持久缓存层。问题是如何实现这种切换以及如何预热 Couchbase 存储桶。显然我们不能简单地切换到冷的 Couchbase,因为从旧缓存开始会导致整个站点崩溃。

我考虑的一个选择是首先将 Couchbase 作为内存缓存节点进行预热。这意味着 Couchbase 正在使用(非持久性)memcached 存储桶,并像任何其他 memcached 节点一样获取缓存 set/get 流量。它的好处是代码更改最少(需要的是配置 moxi 代理以获取 memcached 流量,并将该节点注册为 memcached 节点)。稍后我们会将所有 memcached bucket 转换为 Couchbase。但不确定 Couchbase 是否支持这两种类型的桶之间的转换。

第二个选项是在开始时设置持久性 Couchbase 存储桶(相对于非持久性 memcached 存储桶)。我们更改生产缓存客户端以将所有流量复制到 memcached 和 coucbase 集群。我们监控 Couchbase 存储桶,一旦缓存项达到一定大小,我们就完成切换。一个小缺点是更改缓存客户端的额外复杂性。

想法?

2016 年 8 月 9 日编辑

我后来发现,Couchbase 不支持将 memcached 存储桶转换为 couchbase 存储桶。所以第一种方案不可行

最后我们决定在每个应用程序主机中设置Client-side (standalone) proxy。我们在主机之间逐步进行,以增加缓存流量。这样网站的变化就足够小了。

如果您想要简单、更少的工作并证明效果很好,请执行以下操作:

  1. 在每个应用服务器上设置一个 Moxi 客户端。
  2. 将 Moxi 指向 Couchbase 集群上的 Couchbase 存储桶。
  3. 将您的 Web 应用程序服务器更改为指向本地 MOXI 安装。
  4. 对于您的下一个代码修订,开始将您的代码转换为使用 Couchbase SDK 而不是 memcached。

是的,有一段时间缓存中的东西不会很热,但 Couchbase 很快就会被填充。一直使用这种方法进行切换。这很容易,几乎是万无一失的。我见过人们做的一件事是在切换之前尝试将内容从他们现有的 memcached 服务器复制到 Couchbase,但我不确定他们如何在 memcached 中更新每个值的键。

另请注意,Moxi 是轻松摆脱常规 memcached 的过渡步骤,它很棒,但从长远来看 运行,最好切换到 SDK。该 SDK 比纯 memcached 具有更多功能。

不要使用 memcached 存储桶,因为它们具有 none 高可用性、持久性或 Couchbase 的任何功能。