深入研究 Twitter 和 Web3 之间的技术相似性,并探索前者的解决方案如何使后者的解决方案受益。
原文标题:What Web3 could learn from Twitter’s timeline architecture
原文作者:Scott Shi
原文来源:Medium
编译:Kate, Marsbit
11 月 13 日,Elon Musk为 Twitter 进行了 1000 多次RPC来呈现用户的主页时间线而道歉。乍一看,如此大量的 RPC 似乎很荒谬。如今,Twitter 每月为 2.6 亿活跃用户提供服务,并且可以近乎实时地提供服务。为了解决亚秒级延迟的大规模采用问题,Twitter 率先推出了许多解决方案,包括 Apache Storm、Heron、DistributedLog和Aurora。他是Scala 的主要贡献者,包括finagle RPC 框架,以及lambda 架构、Snowflake ID和Segcache等创新。那么,为什么像 Twitter 这样的创新型全球化公司需要如此多的调用来获取用户的时间线数据?
Twitter所面临的问题让我们想起了当前Web3中不断增长的烦恼:开发者常常被迫一个接一个地连续调用许多 API 来获取组装业务逻辑的数据。这会导致性能不可靠且不可预测,即使对于最简单的用例也是如此,例如获取用户的交易历史记录。就增长而言,前十大公链的交易量在两年内翻了 100 倍。在图 1 中,我们展示了每秒推文数量(2006-2013,蓝色)和每秒 Web3 交易数量(2017-2022,红色,排除非用户交易)之间的比较。如果 Web3 继续沿着图中描绘的轨迹发展,那么当今大多数 Web3 数据基础设施解决方案将无法应对增长。
图 1:推文与 Web3排名前10的链早期写流量 QPS 对比。
在这篇博文中,我们将重点介绍Web3可以从Twitter的扩展解决方案中学到什么。具体来说,我们讨论以下内容:
•我们概述了 Twitter 的时间线基础设施之旅,认为他们当前的架构确实对特定用例有意义,并得出结论,一些批评可能是错误的,例如 Elon Musk最近的推文为渲染主页时间线的大量 RPC 道歉。
•我们深入研究 Twitter 和 Web3 之间的技术相似性,并探索前者的解决方案如何使后者的解决方案受益。
•我们分析了当前的 Web3 增长趋势,以及缺乏现有的高性能数据基础设施解决方案,并得出结论,如果我们想要支持实时 Web3 数据访问,则需要进行重大升级,以及ZettaBlock解决方案如何帮助开发人员减少70%的开发时间,并将性能提高 10 倍,演示可以在这里找到 [网站,视频]
一开始,Twitter使用Vanilla MySQL。这很快成为了一个问题,因为在最初的几年里,推文的数量每年增长10倍。从2007年到2012年,Twitter的月活跃用户从几千人增长到超过1.38亿。已知的水平和垂直切分的知识无法为Twitter处理高流量的性能,尤其是在渲染主页时间线方面。
时间线是 Twitter 的主要平台功能之一。一般来说,Twitter的时间线主要有两个操作,具体如下:
1.写入路径:该路径用于用户发布推文。2012年,Twitter平均每秒处理4.6万个写入请求,在高峰时段处理1.2万个RPS。
2.读取路径:此路径用于用户请求他们的时间线。2012 年,Twitter 每秒处理大约 30 万次读取请求。
为了更好地理解 Twitter 如何呈现时间线,让我们更深入地研究呈现流程,如图 2 所示。当 Twitter 用户今天发布一条推文时,Twitter 首先将其写入Manhattan,一个分布式键值数据库,用于存储用户推文、直接消息、帐户详细信息等。该推文在时间线缓存中向该用户的所有关注者展开。虽然这将写入放大从每秒 4.6k 请求增加到每秒 345k 请求,但它也大大降低了用户的读取延迟。因此,时间线渲染不是在关注者和推文之间做一个连接表,而是从缓存中的单个表中获取推文。这些操作通常在不到 5 秒的时间内完成。通过分布正在写入的数据,系统可以通过删除表连接来避免过度增长。因此,读取延迟被改进到几百毫秒。
图 2:Twitter 的时间线渲染流程。请注意,时间线中的每条推文都需要至少一个 RPC。
前面提到的渲染流程对于绝大多数用户来说可能已经足够了(在大多数情况下写入放大值<100),但是“超级中心用户”呢?超级中心用户是指拥有众多粉丝的用户(数百万至数千万)。所描述的扇出模式,在超级中心用户的情况下,可以放大 1.2亿倍!这就是为什么在 Twitter 的早期,有专门为贾斯汀·比伯(Justin Bieber)提供的专用服务器机架。为了容纳超级中心用户,使用了一种称为Earlybird的特殊服务。在Earlybird中,超级中心用户和普通用户分别获取不同的推文。这个过程如下面的图3所示。
图 3:左侧描绘了 Twitter 用户混合时间线的抽象说明,右侧描绘了相应的读取 SQL。
既然我们已经描述了提供实时推文时间线背后的复杂性,那么为什么单个时间线渲染需要许多 RPC 就很清楚了。例如,对于只有 100 条推文的时间线,RPC 调用很容易超过 1000 次,因为仅仅获取一条推文就需要多次RPC调用。该解决方案乍一看可能并不直观,但它是一种经过深思熟虑的权衡,旨在为最终用户提供优化且可预测的读取性能。
Twitter 实现的最终结果非常积极:99%的延迟只有几百毫秒左右。在过去的 10 年里,这种基础架构已经被证明是可靠的,可以在没有重大变化的情况下处理Twitter流量的高速增长。
请注意,我们忽略了Twitter时间线的其他方面,包括评分、排名等。有关这方面的更多详细信息,请参阅本文末尾列出的参考资料。
图 4:Twitter 和 Web3 数据的相似之处
Twitter 和 Web3 生态系统有很多相似之处:
1.Web3是一个社交图谱,推文类似于交易,回复类似于日志。图4描述了这一点,其中比较了顺序时间线渲染和顺序区块链的块。
2.Web3 协议和 Twitter 存在超级中心效应。最受欢迎的NFT平台的交易量是第10个平台的1000倍。
3.Web3 和 twitter 都是开放平台,对所有用户可见,并允许某些 API 访问。
如果我们放大一点,Twitter 和 Web3 之间的数据访问模式有更多相似之处:
1.读取量大,但每条记录很小。在 EVM 链上,日志和交易的平均大小只有几KB。
2.最新数据将被更频繁地查看,其中大部分查看来自发布后的前几个小时。
3.数据在短时间是不可变的。链上数据可以通过reorg恢复最新的区块。同样,现在用户可以在发布后的一段时间内编辑推文。
与 2020 年初相比,前 10 大链的交易量已经增长了近 100 倍。Web3 数据基础设施的现状类似于 2008 年前后的 Twitter 早期,当时大部分流量依赖于来自不同提供商的水平分片数据库。因此,随着 Web3 的持续增长,现有的 Web3 数据基础设施将很难提供对数据的高性能访问。
来自 Twitter 的扇出服务是将相关数据同时放在同一位置(如内存)。这样,当一个请求到来时,系统可以很容易地在一个地方找到相关数据,这导致数据已经被预处理并可以使用。这使得系统具有可扩展性,和可预测的性能。
遵循当前现状的 Web3 应用程序缺少一个重要的组件来有效地聚合相关数据。具体来说,开发者必须一个一个地调用API来获取数据。即使对于最简单的用例,例如获取用户的交易历史记录(如图 5 所示),这也会导致性能不可靠且不可预测。
图 5:当前的 Web3 应用程序需要如何连续调用许多不同的 API,即使是简单的事务聚合。
由于所有 Web3 数据都是公开可用的,ZettaBlock 构建了最先进的数据基础设施来处理所有 Web3 开发人员的扇出部分。应用程序开发人员只需通过一个 API 指定他们想要查询哪些相关数据,然后让 ZettaBlock 聚合所有相关数据。如图 6 所示。通过使用 ZettaBlock,开发时间和 API 延迟分别减少了 70% 和 90%。在https://demo.zettablock.dev/ 查看我们的演示。更多的技术细节将在未来分享。
图 6:与图 5 相比,ZettaBlock 将多个 Web3 数据集抽象为一个简单、用户友好且高效的API。
在这篇博文中,我们剖析了 Twitter 的架构,并将其数据模型与 Web3 进行了比较,发现了许多相似之处。如果我们能得到一个信息,那就是许多现有的 Web3 数据基础设施解决方案,就像早期的 Twitter 一样,将无法跟上即将到来的数据需求。
这就是我们构建 ZettaBlock 的原因。ZettaBlock 是一个全栈式 Web3 数据基础设施平台,可提供实时、可靠的 API 和分析,在几分钟内为您的应用程序提供支持。前面提到的扇出过程(将相关数据同时放在同一个地方),这只是 ZettaBlock 上开发人员和企业可用的众多功能之一。我们受到领先的web3公司的信任,如Polygon, Crypto.com, Circle等。我们的愿景是成为web3数据基础设施的首选平台。
鸣谢
我想借此机会向所有在这篇文章中帮助过我的人表示衷心的感谢。特别感谢Kevin Ros、Chi Zhang、Maria Adamjee、Raphael Serrano、Zhenzhong Xu、Paul Tluczek、Tianzhou Chen、Hemanth Soni、Nitish Sharma、Ryan Kim、Alex Xu、Vivek Gopalan、Nazih Kalo、Nirmal Krishnan、Timothy Chen、Min Hao、Bo Yang
1.Timelines at Scale:
https://www.infoq.com/presentations/Twitter-Timeline-Scalability/
2.How Twitter uses redis to scale 105TB RAM:
3.What Database does Twitter use?
https://scaleyourapp.com/what-database-does-twitter-use-a-deep-dive/
4.Twitter Data Storage and Processing:
责任编辑:Kate