【发布时间】:2017-04-24 19:20:51
【问题描述】:
我正在使用 Couchbase 缓存。有一个沙发基地服务器。我有多个服务器来托管应用程序,并对蓝绿色部署策略稍作修改以在所有服务器上部署应用程序。
部署策略 - 将前 50% 的服务器视为 A,其余为 B。
1. 将 A 与 ELB 分离,B 仍在处理请求。
2. 在 A 上部署应用程序。
3.将A重新连接到ELB。
4. 将 B 与 ELB 分离,但 B 有一些请求需要处理。
5. 使缓存失效。
6. 新请求转到 A,而 B 完成它有待处理的请求。
7. 完成待处理请求后,在 B 上开始部署。
8. 在 B 上发布部署,将 B 重新连接到 ELB。
问题在于 Couchbase 服务器中的缓存。虽然 B 有在旧代码上运行的待处理请求,但 A 已准备好处理在新代码上运行的新请求。缓存服务器在第 5 步之后没有缓存数据。
但是在第 6 步中,B 会根据旧代码将数据加载到缓存中。如果 A 使用该缓存,应用程序将在 A 上中断。
如果在第 6 步中,A 将数据加载到缓存中并且 B 使用该缓存数据,则应用程序将再次在 B 上中断。
如何解决 A 和 B 同时服务请求的关键部分问题?部署策略的任何变化也是受欢迎的。
【问题讨论】:
-
向缓存键添加发布标签(又名版本控制)可能是最常见的解决方案。这也避免了需要蓝绿色缓存层。
-
@BenManes 你可以移动它来回答,这解决了我的问题。
标签: caching deployment couchbase spring-cache web-farm