跳转到主要内容

Facebook如何存储大规模社交图谱(graph)?TAO

阅读需 1 分钟Tian PanTian Pan

挑战是什么?

在TAO之前,用 cache-aside pattern

在TAO之前

社交图谱是存储在MySQL和缓存在Memcached里的

3个存在的问题:

  1. 在Memcached中更新社交图谱的边列表操作效率太低。不是在列表的后面加一条边,而是要更新整个列表。
  2. 客户端管理缓存的逻辑很复杂
  3. 很难维持==数据库读在写之后这种一致性==

为了解决这些问题,我们有3个目标:

  • 面对大规模数据仍然高效的图(graph)存储
  • 优化读操作(读写比是500:1)
    • 降低读操作的时长
    • 提高读操作的可用性(最终一致性)
  • 及时完成写操作 (先写再读)

数据模型

  • 带 unique ID 的对象 (例如用户,地址,评论)
  • 两个ID之间的关联 (例如被标记,点赞,发表)
  • 以上两个数据模型都有键值数据和时间相关数据

解决方案: TAO

  1. 加快读操作,高效处理大规模的读

    • 专门针对图做缓存
    • 在无状态的服务器层和数据库层中间加一层缓存 (参考 业务拆分)
    • 拆分数据中心 (参考 按数据分割)
  2. 及时完成写操作

    • 透写缓存(write-through cache)
    • 用follower/leader缓存去解决==惊群问题==
    • 异步复制
  3. 提高读操作的可用性

    • 如果读出错,则从其他可读的地方读

TAO 的架构

  • MySQL数据库 → 持久性(durability)
  • Leader缓存 → 协调每个对象的写操作
  • Follower缓存 → 用来读而不是用来写。转移所有的写操作到leader缓存。

Facebook TAO的架构

读操作的容错

Facebook TAO读操作的容错

参考资料

保持联系,关注我获取更多内容

阅读需 2 分钟

设计Facebook图片存储系统

Facebook做图片存储的原因有两个:PB级别的Blob数据量;传统的基于NFS的设计都存在元数据瓶颈,庞大的元数据严重限制了它的命中率。解决方案是把数以十万计的图像聚集到单个Haystack存储文件中,从而消除了元数据负荷。

system design
阅读需 3 分钟

一亿美元的遥测错误:OpenAI 的故障教会我们系统设计的知识

OpenAI 最近的故障揭示了现代系统设计的重要见解,突显了保障措施如何无意中成为风险。了解这一亿美元的遥测错误的教训,以及它们如何适用于你自己的技术基础设施。

OpenAI
system design
阅读需 4 分钟

快速介绍 Optimism 架构

什么是 Optimism?它的架构是什么样的?它的构建组件是什么,它们之间如何相互作用?

system design
阅读需 7 分钟

如何设计区块链服务端的架构?

分布式的区块链记账和智能合约系统。要求节点之间不大信任,但是却激励他们互相合作:交易不可逆,不依赖可信的第三方,保护隐私,透露最少信息,一笔钱不能花两次。假设性能不是问题,暂不考虑如何优化性能。

system design
阅读需 9 分钟

设计以人为本的国际化(i18n) 工程方案

硅谷公司的产品大多面向全球市场,而国际化正是跨国公司征战全球市场的战略要地。我们这次设计的 i18n 工程方案主要是解决网站和移动 App 开发过程中的三大问题:1. 语言、2. 时间与时区、3. 数字与货币。如同一切软件系统的开发一样,国际化这件事情没有银弹,好的作品都是靠基本功一点一滴磨出来的。

system design