我的应用程序对缓存服务器重启具有弹性(嗯,希望如此,但没关系)。这意味着如果缓存(Redis,在主/从集群配置中)变得不可用(例如,整个集群变得不可用),应用程序可以通过关闭缓存重的特性来优雅地降级,并且仍然可以缓慢地工作。
由于我在主/从模式下使用 Redis,因此我必须将状态保存到文件系统中,以使主从同步更加高效。这意味着当服务器重新启动时,它会加载它从前一个化身看到的数据。
在整个集群关闭时我需要发送缓存失效消息之前,上述方法非常有效。流程是这样的:
- 缓存没问题
- 应用服务器将数据 X=Y 放入缓存。X=Y 保存到缓存文件系统。
- 缓存失败,重新启动。
- 应用程序服务器获取将 X 操作为 Y' 的命令 - 想要发送 X 的缓存失效。失败 - 缓存没有响应(仍然关闭)。由于缓存是可选的,因此应用服务器会记录并继续。
- 缓存备份 - 从文件系统加载数据,包括 X=Y
- 应用服务器收到服务 X 的请求 - 进入缓存并查看之前的数据 X=Y。即使数据库有 Y',Y 仍在服务中。问题。愤怒的顾客。
如何解决这个问题 - 特别是在具有主/从方案的 Redis 中(从站当前仅用于更快的故障转移)。