系统设计:全局缓存和一致性

时间:2017-10-01 02:15:16

标签: caching architecture system-design

让我们举一个Twitter的例子。有一个巨大的缓存,经常更新。例如:如果有人Foo推文,它在全球各地都有粉丝。理想情况下,所有PoP中的所有缓存都需要更新。即他们应保持同步

跨数据中心(PoP)的复制如何适用于实时缓存? 有哪些工具/技术? 这个系统设计中有哪些潜在的问题?

1 个答案:

答案 0 :(得分:1)

我不确定对此有正确/错误的答案,但这是我的两便士的价值。

我会从一个稍微不同的角度解决问题:当用户发布某些内容时,某些东西会进入分布式存储(不一定是缓存),而这些存储在多个地理位置已经是多余的。我还假设,为了性能,这些节点最终是一致的。

现在缓存了。我不会设计一个系统来处理每次有人做某事时所有缓存的同步。我宁愿在服务级别实现缓存。想象一下,驻留在地理位置分散的群集中的小型服务。每次用户尝试获取数据时,服务都会检查其本地缓存 - 如果是未命中,它会从存储中读取推文并将其中的一部分放入缓存中(受驱逐策略限制)。所有后续访问(如果有)都将缓存在本地级别。

在设计预防措施方面:

  • 仔细考虑DC / AZ拓扑,以确保足够的带宽和低延迟
  • 在本地级别缓存以避免无用的网络旅行
  • 从中心到外围不会发生缓存更新;缓存未命中时创建缓存
  • 我在这里陈述显而易见的,实施正确的驱逐政策,以便只在缓存中保留正确的对象
  • 应该从中心到外围的唯一消息是缓存刷新广播(告诉所有节点摆脱缓存)

我肯定在这里遗漏了很多其他的东西,但希望这是一个很好的思考。