当前位置:统一通信/协作企业动态 → 正文

Twitter的实时通知架构

责任编辑:editor005 作者: Andrew Morgan |来源:企业网D1Net  2017-06-27 11:11:52 本文摘自:INFOQ

Twitter工程经理Sarrabh Pathak在伦敦QCon 2017大会上介绍了Twitter网站的通知系统架构。他主要介绍了Twitter所面临的独特挑战,比如社交网络的双峰(bimodal)性、如何应付尖刺流量以及如何实现实时的通知机制。

Pathak解释说,与一般的社交网络不同,Twitter的用户数据具有不对称性。有些用户有数百万关注者,而有些则只有不到百人。这导致了通知具有双峰性,也给实现实时通知带来了挑战。例如,名人的推文比普通人的推文产生更大的通知负载。

Pathak说,不同类型的用户以及严格的性能需求给架构带来了如下挑战:

延迟:人们要尽可能快地收到通知,毕竟Twitter需要实时地通知用户当下正在发生的事情。展开(fanout):一个拥有数百万关注者的用户,他的一个推文会触发数百万个通知,系统必须能够处理这种大型的尖刺流量。不均衡的调用:有些内部调用,比如访问缓存,只需要几毫秒。而有些外部调用,比如访问Google,可能需要半秒多钟。在进行伸缩时必须考虑到这些情况。多数据中心:Twitter必须尽可能地具备弹性,即使发生了故障,也要保证用户仍然能够收到通知。

首先,通知分为推送和拉取两种模式。人们在访问Twitter时看到的通知信息流使用的是拉取模式,而短信和邮件则使用推送模式。

Pathak说,对于拉取模式,通知一般是从缓存里获取的,因为信息流的生成是很耗费资源的。Twitter使用了Manhatten,Twitter的实时分布式后端存储,也是Redis的一个分支。通过使用缓存,最小化了延迟,提升了用户体验。与此同时,通知信息流通过异步的方式被复制到多个数据中心,目的是在发生故障时,用户仍然能够看到相同的信息流。

为了应对延迟和尖刺流量问题,Twitter使用了推送通知模式,不仅进行横向伸缩,同时还使用了临时缓存。这解决了同一个用户有数百万个通知事件的问题。

为了解决不均衡调用问题,Twitter使用了优先级队列来防止调用阻塞;名人的推文不会对其他用户的登录造成阻塞。另外,不同类型的调用被分成组,这意味着因外部依赖发生宕机造成的影响是相互隔离的。

最后,Pathak对该架构进行了总结:

尽可能专注在异步操作上,因为它比同步操作更容易伸缩。在权衡读取时间和写入时间时,考虑只写入不太可能发生过期的数据,比如ID。确保应用能够支持多数据中心部署。

整个访谈可以在线观看,里面还有一个来自Twitter工程师Gary Lam关于个人定制化通知的访谈。

查看英文原文: Real-Time Notifications at Twitter

关键字:TwitterRedis

本文摘自:INFOQ

x Twitter的实时通知架构 扫一扫
分享本文到朋友圈
当前位置:统一通信/协作企业动态 → 正文

Twitter的实时通知架构

责任编辑:editor005 作者: Andrew Morgan |来源:企业网D1Net  2017-06-27 11:11:52 本文摘自:INFOQ

Twitter工程经理Sarrabh Pathak在伦敦QCon 2017大会上介绍了Twitter网站的通知系统架构。他主要介绍了Twitter所面临的独特挑战,比如社交网络的双峰(bimodal)性、如何应付尖刺流量以及如何实现实时的通知机制。

Pathak解释说,与一般的社交网络不同,Twitter的用户数据具有不对称性。有些用户有数百万关注者,而有些则只有不到百人。这导致了通知具有双峰性,也给实现实时通知带来了挑战。例如,名人的推文比普通人的推文产生更大的通知负载。

Pathak说,不同类型的用户以及严格的性能需求给架构带来了如下挑战:

延迟:人们要尽可能快地收到通知,毕竟Twitter需要实时地通知用户当下正在发生的事情。展开(fanout):一个拥有数百万关注者的用户,他的一个推文会触发数百万个通知,系统必须能够处理这种大型的尖刺流量。不均衡的调用:有些内部调用,比如访问缓存,只需要几毫秒。而有些外部调用,比如访问Google,可能需要半秒多钟。在进行伸缩时必须考虑到这些情况。多数据中心:Twitter必须尽可能地具备弹性,即使发生了故障,也要保证用户仍然能够收到通知。

首先,通知分为推送和拉取两种模式。人们在访问Twitter时看到的通知信息流使用的是拉取模式,而短信和邮件则使用推送模式。

Pathak说,对于拉取模式,通知一般是从缓存里获取的,因为信息流的生成是很耗费资源的。Twitter使用了Manhatten,Twitter的实时分布式后端存储,也是Redis的一个分支。通过使用缓存,最小化了延迟,提升了用户体验。与此同时,通知信息流通过异步的方式被复制到多个数据中心,目的是在发生故障时,用户仍然能够看到相同的信息流。

为了应对延迟和尖刺流量问题,Twitter使用了推送通知模式,不仅进行横向伸缩,同时还使用了临时缓存。这解决了同一个用户有数百万个通知事件的问题。

为了解决不均衡调用问题,Twitter使用了优先级队列来防止调用阻塞;名人的推文不会对其他用户的登录造成阻塞。另外,不同类型的调用被分成组,这意味着因外部依赖发生宕机造成的影响是相互隔离的。

最后,Pathak对该架构进行了总结:

尽可能专注在异步操作上,因为它比同步操作更容易伸缩。在权衡读取时间和写入时间时,考虑只写入不太可能发生过期的数据,比如ID。确保应用能够支持多数据中心部署。

整个访谈可以在线观看,里面还有一个来自Twitter工程师Gary Lam关于个人定制化通知的访谈。

查看英文原文: Real-Time Notifications at Twitter

关键字:TwitterRedis

本文摘自:INFOQ

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^