几个大型网站的Feeds(Timeline)设计简单对比

news/2024/5/20 23:01:17/文章来源:https://blog.csdn.net/X5fnncxzq4/article/details/82321366

点击上方“芋道源码”,选择“置顶公众号”

技术文章第一时间送达!

源码精品专栏

 
  • 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )

  • 中文详细注释的开源项目

  • Java 并发源码合集

  • RocketMQ 源码合集

  • Sharding-JDBC 源码解析合集

  • Spring MVC 和 Security 源码合集

  • MyCAT 源码解析合集


Facebook起源的NewsFeed,以及Twitter起源的Timeline,核心问题都是如何处理巨大的消息(活动,activity)分发。“推Push”和“拉Pull”或者“推拉结合”,是主要的处理方式。

以前各大网站陆续透露的文档,以及这次QCon2012 London和深圳的架构师会议,较大程度的公开了各自的实现方式。本文从 消息分发模式;内部通信工具、协议;存储方式 3方面总结。 
各大网站都大量使用的Nginx, memcached, MySQL等开源产品,都标配了,文中不再提。实现技术上,异步消息队列的引入,来模块解耦和尖峰削平;Cache的精良设计等,也都是各家大量使用的技能,可看参看文档,不再详述。


Push, fan-out, Write-fanout写时消息推送给粉丝。空间换时间
Pull, fan-in, Read-fanout读时拉取所有好友的消息,再聚合。时间换空间
混合Hybrid基于推,混入拉;基于拉,加速推。时空平衡

1Facebook

参考《Facebook news-feed QCon12.pdf》。典型的Pull方式,读时fanout,获得所有好友的活动,再进行聚合,rank,排序等操作(这几步后续动作,是feed和timeline的最大不同特点)。Facebook把这种模式叫做“Multifeed – Multi-fetch and aggregate stories at read time”。 
640FB的众多产品、模块,通讯协议自然用自家的Thrift,还用到SMC和其他的底层平台。 
存储模块,有自家的“排序”存储文件(feed要按时间倒排,还有rank影响排序…内存的B树排序结构,可以预测性的合并到文件。可能开源)。还大量使用了 Redis 和Google开发的开源持久化KV存储: LevelDB。 
Feeds相对于Timeline,最大特点是有rank影响排序,需要按类型合并,有推荐算法的插入,有更复杂的数据结构…这些都是影响架构设计的重要因素,但这些都没有文档详细描述。拉模式下,最重要的是高效稳定、分布式的Aggregator的设计,也没有详细文档说明。 
(Facebook可以说是技术文档最不透明的网站了,特别是相较于他拥有最大的UGC而言。)


2Twitter

参考《TimelinesTwitter-QCon12.pdf》等众多文档。主要是推模式。Twitter的Timeline这种应用,和FB的Feed最大的区别,就是要解决fan-out的效率和全文搜索的效率。整体模块划分图: 
640
主要特点是对fanout的处理:队列化(有自己用Scala语言实现的Kestrel队列),并发处理推送等大消耗业务,各级缓存(包括In-Proc)… 
通讯协议上, Kestrel 复用了MemCached协议;而Timeline API模块使用了FB的Thrift。通信框架是大量使用的自己开发的(已开源)RPC框架 Finagle (A fault tolerant, protocol-agnostic RPC system)。 
搜索引擎使用了Lucene。存储也大量使用了Redis。


3人人网

参考《人人网Feed系统结构浅析.pdf》和《人人网网站架构–服务化的演进》。作为中国的大型SNS网站,设计上也有很多自己的特色。 
从查询的效率考虑, 人人网采用了推模式(近似twitter模式)。但是,人人网的Feeds,又比twitter类的timeline,有更复杂的结构和功能需求,所以在设计上,会有FB和Twitter双方融合的特点。 
640
在Cache上,人人有自己实现的Server来支持。特别是在IndexCache上,基本数据结构和FB一样,使用了C++ Boost multi-index container;序列化和压缩采用Protobuf和QuickLZ。特别是有专门实现的解决feed索引持久化难题的Feed Index DB。 
最后用模板渲染引擎(也是C++实现)来显示复杂的Feed。 
Renren在网络通信上大量使用 ICE框架 ,协议上多用Protobuf,实现缓存等中间层、新鲜事儿等系统。大量自己开发的server集群,通过他们高效通信。 
在高性能计算上,Renren网倾向用C/C++编写定制性Server,保证数据中心存储,大规模数据尽量在进程内访问。像IndexCache Server(海量的Feed数据装载在单一Server内,实现“数据尽可能靠近CPU”的原则),实现高速排序等计算需求;此外还有文档里提及的渲染Server…都是用C写的专用Server。好处自然是本地内存的纳秒级访问速度,远远高于网络IO,可实现极高的性能。 
现在,人人网的架构也在向Service化方向发展,并封装成了XOA,基础总线使用了Thrift,消息队列用了ZeroMQ …


4新浪微博

参考TimYang的《 构建可扩展的微博架构 》和《新浪微博cache设计谈.pdf》 
虽然来源于Twitter,但不得不说,就数据量、复杂性而言,已经不弱于Twitter;稳定性更是高出了Twitter很多。新浪微博基础是拉模式,但是增加了“在线推”,对于在线用户有“Inbox Cache”加速对timeline的获取,减少aggregator的性能和时间消耗。结构如下图: 
640
首页timeline获取步骤是:1.检查inbox cache是否可用; 2.获取关注列表; 3.聚合内容, 从 following 关系; 4.根据id list返回最终feed聚合内容。Sina的这种结合模式,符合中国的特点:明星海量粉丝(纯推送代价巨大),个人用户关注多(纯拉取代价大),且在线用户能得到极快的响应。 
存储大量使用了Redis。并且有专门的讲演,详细介绍了Sina在Redis的大规模应该场景。《 Redis介绍》 《 新浪微博开放平台Redis实践 》 
但是基于拉模式的aggragator没有对外介绍。此外,sina微博的消息机制、RPC框架,也未介绍。


5腾讯微博

参考《 张松国-腾讯微博架构介绍 08.pdf》。腾讯作为最有技术底子的公司,其架构有很多独特之处,参考和直接利用国外的网站的模式最少。腾讯微博采用“拉”模式,聚合计算aggregator采用了多级模式: 
640
同大多的timeline系统一样,使用队列来异步化和解耦,不过qq的解耦包括了系统解耦和业务解耦(和Renren网的“中转单向RPC调用的消息队列”类似),不但解耦模块,还使得各模块开发得以并行,提升开发效率。其主要架构图: 
640
腾讯的积累,使得腾讯微博在平台化做的扎实。整个产品的“接口-服务”感觉清晰。在容灾容错方面更是比其它家(至少从文档上)高出了很多。集群建设,系统维护都沿袭了腾讯的积累,光海量日志的查询就用了Sphinx全文搜索。数据挖掘和分析(比如关系链分析、圈子挖掘、用户价值评估)也一直是腾讯的重点能力。 




如果你对 Dubbo 感兴趣,欢迎加入我的知识星球一起交流。

640?

知识星球



目前在知识星球(https://t.zsxq.com/2VbiaEu)更新了如下 Dubbo 源码解析如下:

01. 调试环境搭建
02. 项目结构一览
03. 配置 Configuration
04. 核心流程一览

05. 拓展机制 SPI

06. 线程池

07. 服务暴露 Export

08. 服务引用 Refer

09. 注册中心 Registry

10. 动态编译 Compile

11. 动态代理 Proxy

12. 服务调用 Invoke

13. 调用特性 

14. 过滤器 Filter

15. NIO 服务器

16. P2P 服务器

17. HTTP 服务器

18. 序列化 Serialization

19. 集群容错 Cluster

20. 优雅停机

21. 日志适配

22. 状态检查

23. 监控中心 Monitor

24. 管理中心 Admin

25. 运维命令 QOS

26. 链路追踪 Tracing

...
一共 60 篇++


源码不易↓↓↓

点赞支持老艿艿↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_827971.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于LAMP环境发布一个Discuz论坛网站

一、LAMP是什么 1、LAMP是常见的Web服务器环境解决方案,用于创建和管理Web应用程序的开源开发平台。Linux用作后端操作系统,Apache是​​Web服务器,MySQL是数据库,PHP是脚本语言。 2、LAMP 为 Linux、Apache、MySQL、PHP 的简称…

尾随《大型网站技术架构》作者,从零单排「大数据」

李智慧大佬,《大型网站技术架构》(艿艿的架构启蒙读物)的作者,豆瓣评分 7.9 分,出了「大数据」专栏。所以,如果你数据量挺大的,可以扫码买一买。如果你数据量不大,但是想膨胀膨胀&am…

大型网站架构演进的五大阶段盘点

点击上方“芋道源码”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏 精尽 Dubbo 原理与源码 69 篇精尽 Netty 原理与源码 61 篇中文详细注释的开源项目Java 并发源码合集RocketMQ 源码合集Sharding-JDBC 源码解析合集Spring MVC …

初步了解网站压力测试工具

http://www.51testing.com/html/index.html(51测试网) 一、ab网站压力测试 ab是apache自带的压力测试工具,ab是apachebench命令缩写。它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。…

用户在电商网站中购买成功了,那么 TA 在微服务中经历了什么?

点击上方“芋道源码”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏 原创 | Java 2019 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库…

Python采集网站随机header

不废话直接代码: import randomclass UserAgent:def __init__(self):self.headers ["Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X…

分享Html模板5合一模板---50电影模板、56个游、86个体育项目、95个音乐网站、116个时尚

模板下载链接:https://pan.baidu.com/s/1zNvc5K8tpWbxAKuIziGgjg 密码:agk4 50电影模板Html模板! 56个游戏Html模板 86个体育项目Html模板 95个音乐网站Html模板 116个时尚Html模板 我就不相信没有你需要的! 50电影模板Html模板! 儿童…

《大型网站系统与Java中间件》读书笔记(上)

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:github.com/ZhongFuChen… (想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!) 一、为什么分布式&#xff…

《大型网站系统与Java中间件》读书笔记 (中)

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:github.com/ZhongFuChen… 回顾上一篇: 《大型网站系统与Java中间件》读书笔记(一) 这周周末读了第四章,现在过来做做笔记,希望…

利用node.js写爬虫 爬取某相亲网站全部交友信息

点击查看爬取世纪佳缘相亲交友信息 利用node.js,写了一个爬虫js。1个小时左右的时间,便爬取了2000多条交友信息,包括网名,年龄,图片,学历,工资等。当然,爬取的速度和网速有很大的关…

分享21个广告排行、15个交友会员、25个网站导航和39个文件管理PHP源码,总有一款适合你

链接:https://pan.baidu.com/s/1aMHf6wDNbHm-2upU287w2A 提取码:px8q 分享21个广告排行、15个交友会员、25个网站导航和39个文件管理PHP源码,总有一款适合你 下面是文件的名字,我放了一些图片,文章里不是所有的图主要…

支付宝记---电脑网站支付(.NET)

根据商品信息和价格生成支付宝支付的二维码 2019年夏,张渔歌仄伏于家中。越明年,疫情依旧,渔歌隧研究支付宝支付。其中心酸不言表,属予作文以记之。 一、准备工作 1、支付宝开发平台https://open.alipay.com/。需要进行企业级的…

Web Monitor/Dev/Test Tool Collection 网站/网页监控/开发/测试工具集合

HttpWatch HttpWatch是强大的网页数据分析工具. 包括网页摘要.Cookies管理.缓存管理.消息头发送/接受.字符查询.POST 数据和目录管理功能.报告输出. Features: Easily monitor HTTPS, HTTP and SPDY without using proxies or changing network settingsSupports IE/Firefox on…

Java 爬虫遇到需要登录的网站,该怎么办?

这是 Java 网络爬虫系列博文的第二篇,在上一篇 Java 网络爬虫,就是这么的简单 中,我们简单的学习了一下如何利用 Java 进行网络爬虫。在这一篇中我们将简单的聊一聊在网络爬虫时,遇到需要登录的网站,我们该怎么办&…

【Python】Flask+Gunicorn搭建简单网站

1.安装Flask第三方库 pip3 install Flask 2.创建Flask应用程序 项目结构如上图所示,其中static用来放置静态文件,如js文件、css文件以及图片等,templates文件夹用来放置模板文件,即html文件。 在项目中导入Flask第三方库&#…

【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

一、反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请…

css3和html5网站模板

过去的几年,网页设计和制作人员就已开始关注和使用 HTML5 了,如今 HTML5 得到了更加广泛的应用,国外已有很多基于 HTML5 制作的网站。所以,今天这篇文章给大家带来的是35款基于 HTML5 和 CSS3 的非常精致的网站模板,大…

分享88个ASP.NET企业网站源码,总有一款适合您

分享88个ASP.NET企业网站源码,总有一款适合您 88个ASP.NET企业网站源码下载链接:https://pan.baidu.com/s/1AXv0-dmV-bV-MQTyX9OXRg?pwdzcwa 提取码:zcwa Python采集代码下载链接:采集代码.zip - 蓝奏云 新翔绩效考核系统基…

分享69个ASP.NET企业网站源码,总有一款适合您

分享69个ASP.NET企业网站源码,总有一款适合您 69个ASP.NET企业网站源码下载链接:https://pan.baidu.com/s/1lOmnWD83XkU29_Ix-ldVYQ?pwds9q9 提取码:s9q9 Python采集代码下载链接:采集代码.zip - 蓝奏云 AutoWeb建站王.NET企…

Google网站管理员工具的新功能

近日,Google网站管理员工具(原Google Sitemap)进一步扩展了其功能,可以更有效地帮助用户分析网站中可能存在的问题以及如何更有效地进行对网站的优化。详细信息请参见Google Webmaster Central官方Blog中的说明。其中较引人注意的便是如今在Google网站管…