Caching 分布式系统中的内存缓存与集中式缓存

Caching 分布式系统中的内存缓存与集中式缓存,caching,architecture,distributed-computing,distributed-caching,Caching,Architecture,Distributed Computing,Distributed Caching,我们目前正在寻找最合适的解决方案来访问分布式系统上的关键数据,我们正在考虑是否使用内存缓存,而不是集中式缓存 有关我们希望存储/访问的数据的一些信息: 数据量非常小 数据非常冷;这意味着它几乎不会改变,只有当一个人改变了我们后台系统中的某些东西时才会改变 更改时必须是最新的(可以延迟100毫秒) 我们的应用程序非常关键,需要非常高的SLA(可靠性和响应时间(访问时间不超过20毫秒)) 频繁读取数据(每秒多达数千次) 我们的看法如下- 内存缓存中 优点: 比网络访问+序列化更快 在分布方面具

我们目前正在寻找最合适的解决方案来访问分布式系统上的关键数据,我们正在考虑是否使用内存缓存,而不是集中式缓存

有关我们希望存储/访问的数据的一些信息:

  • 数据量非常小
  • 数据非常冷;这意味着它几乎不会改变,只有当一个人改变了我们后台系统中的某些东西时才会改变
  • 更改时必须是最新的(可以延迟100毫秒)
  • 我们的应用程序非常关键,需要非常高的SLA(可靠性和响应时间(访问时间不超过20毫秒))
  • 频繁读取数据(每秒多达数千次)
我们的看法如下-

内存缓存中

优点:

  • 比网络访问+序列化更快
  • 在分布方面具有更高的可靠性(如果一个实例死亡,数据仍然存在于其他实例上)
缺点:

  • 编码和维护要复杂得多
  • 需要在发生更改时通知实例,并且需要单独更新每个实例+需要在每个服务器启动时加载数据
  • 增加了数据不一致的高风险(一个实例的数据与其他实例不同或过时)
集中式缓存

为了便于交谈,我们考虑过使用Redis

优点:

  • 维护起来要简单得多
  • 非常可靠,我们有很多在分布式系统中使用Redis的经验
  • 只有一个地方需要更新
  • 确保数据一致性
缺点:

  • 单点故障(这是我们非常关心的问题);即使我们使用这个解决方案,我们也会部署一个集群
  • 如果缓存因某种原因被刷新,会发生什么情况

我发现使用Redis进行集中式缓存没有任何问题

  • 无论如何,您将有一个集群设置,因此如果主设备出现故障,从设备将占据这个位置
  • 如果缓存因某种原因被刷新,那么您必须构建缓存,同时请求将从主源(DB)获取数据
  • 您可以启用持久性并加载保存在磁盘中的数据,并且可以在几秒钟内获得数据(即插即用)。如果您认为存在不一致性,请遵循以下方法
  • 即使缓存不可用,系统也应该工作(时间明显延迟)。这意味着应用程序逻辑应该检查redis中的缓存,如果缓存不存在或者系统本身不可用,则应该从dB获取值,然后将其填充到redis,然后提供给客户端

    这样,即使您的redis主设备和从设备停机,您的应用程序也可以正常工作,但会有延迟。而且你的缓存将是最新的


    希望这有帮助

    Redis是集中式缓存的最佳选择。它速度快,性能好。我们正在使用它来存储TB的数据。

    似乎您应该使用集中式缓存,位于DB和应用层之间,所有DB读/写操作都通过一个写通过缓存失效方案通过缓存。

    在线阅读更多文章并考虑优缺点后,我们认为集中式缓存是更适合我们的解决方案。