我们目前正在寻找访问分布式系统上关键数据的最合适解决方案,我们正在考虑使用内存缓存还是集中式缓存。
以下是一些有关我们希望存储/访问的数据的信息:
- 数据非常小
- 数据很少变化,只有在人为更改后端办公系统中的内容时才会发生变化
- 更改后必须是最新的(可以有几百毫秒的延迟)
- 我们应用程序的非常重要部分,需要非常高的SLA(可靠性和响应时间都不超过20ms)
- 经常读取数据(每秒高达数千次)
我们看到的方式如下:
内存缓存
优点:
- 比网络访问+序列化更快
- 在分布方面更可靠(如果一个实例死亡,数据仍然存在于其他实例上)
缺点:
- 编写和维护复杂度更高
- 需要在更改发生时通知实例并分别更新每个实例+需要在每个服务器启动时加载数据
- 增加了数据不一致性的高风险(一个实例具有不同或过时的数据)
集中式缓存
为了进行对话,我们考虑使用Redis。
优点:
- 维护更简单
- 非常可靠,我们在分布式系统中使用Redis有很多经验
- 只需要更新一个地方
- 确保数据一致性
缺点:
- 单点故障(这是我们的一个大问题);即使我们采用这种解决方案,我们也会部署一个群集
- 如果由于某种原因清除了缓存会发生什么情况