在部署到多台服务器时使缓存失效并刷新
Invalidating and refreshing cache on deployment to multiple servers
我正在使用 Couchbase 缓存。有一台 couchbase 服务器。我有多个服务器来托管应用程序,并遵循对蓝绿色部署策略的轻微修改以在所有服务器上部署应用程序。
部署策略 - 将前 50% 个服务器视为 A,其余为 B。
1. 将A与ELB分离,B仍在服务请求。
2. 在 A 上部署应用程序。
3. 将 A 重新连接到 ELB。
4. 将 B 与 ELB 分离,但 B 有一些请求需要处理。
5. 使缓存无效。
6. 新请求转到 A,而 B 完成其待处理的请求。
7. Post 完成待处理的请求,开始在 B 上部署。
8. Post部署在B上,重新连接B到ELB。
Couchbase 服务器中的缓存出现问题。当 B 在旧代码上有待处理的请求 运行 时,A 已全部设置为在新代码上处理 运行ning 的新请求。缓存服务器在第 5 步后不包含任何缓存数据。
但是在第6步,B会按照旧代码加载数据到缓存中。如果 A 使用该缓存,应用程序将在 A 上中断。
如果在第 6 步中,A 将数据加载到缓存中,而 B 使用该缓存数据,应用将再次在 B 上中断。
如何解决 A 和 B 同时为请求提供服务的关键部分问题?也欢迎对部署策略进行任何更改。
向缓存键添加发布标签(也称为版本控制)可能是最常见的解决方案。 release 标签区分不同版本缓存的数据API。但是应该记住内存需求,因为内存使用量将增加一倍。此外,如果旧版本 API 不再接收请求,请记住删除它们的缓存。
我正在使用 Couchbase 缓存。有一台 couchbase 服务器。我有多个服务器来托管应用程序,并遵循对蓝绿色部署策略的轻微修改以在所有服务器上部署应用程序。
部署策略 - 将前 50% 个服务器视为 A,其余为 B。
1. 将A与ELB分离,B仍在服务请求。
2. 在 A 上部署应用程序。
3. 将 A 重新连接到 ELB。
4. 将 B 与 ELB 分离,但 B 有一些请求需要处理。
5. 使缓存无效。
6. 新请求转到 A,而 B 完成其待处理的请求。
7. Post 完成待处理的请求,开始在 B 上部署。
8. Post部署在B上,重新连接B到ELB。
Couchbase 服务器中的缓存出现问题。当 B 在旧代码上有待处理的请求 运行 时,A 已全部设置为在新代码上处理 运行ning 的新请求。缓存服务器在第 5 步后不包含任何缓存数据。
但是在第6步,B会按照旧代码加载数据到缓存中。如果 A 使用该缓存,应用程序将在 A 上中断。
如果在第 6 步中,A 将数据加载到缓存中,而 B 使用该缓存数据,应用将再次在 B 上中断。
如何解决 A 和 B 同时为请求提供服务的关键部分问题?也欢迎对部署策略进行任何更改。
向缓存键添加发布标签(也称为版本控制)可能是最常见的解决方案。 release 标签区分不同版本缓存的数据API。但是应该记住内存需求,因为内存使用量将增加一倍。此外,如果旧版本 API 不再接收请求,请记住删除它们的缓存。