- 浏览: 547312 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (618)
- java (109)
- Java web (43)
- javascript (52)
- js (15)
- 闭包 (2)
- maven (8)
- 杂 (28)
- python (47)
- linux (51)
- git (18)
- (1)
- mysql (31)
- 管理 (1)
- redis (6)
- 操作系统 (12)
- 网络 (13)
- mongo (1)
- nginx (17)
- web (8)
- ffmpeg (1)
- python安装包 (0)
- php (49)
- imagemagic (1)
- eclipse (21)
- django (4)
- 学习 (1)
- 书籍 (1)
- uml (3)
- emacs (19)
- svn (2)
- netty (9)
- joomla (1)
- css (1)
- 推送 (2)
- android (6)
- memcached (2)
- docker、 (0)
- docker (7)
- go (1)
- resin (1)
- groovy (1)
- spring (1)
最新评论
-
chokee:
...
Spring3 MVC 深入研究 -
googleyufei:
很有用, 我现在打算学学Python. 这些资料的很及时.
python的几个实用网站(转的) -
hujingwei1001:
太好了找的就是它
easy explore -
xiangtui:
例子举得不错。。。学习了
java callback -
幻影桃花源:
太好了,謝謝
Spring3 MVC 深入研究
原文地址:http://www.csdn.net/article/2010-09-01/278921
摘要:sns系统,微博都在应用feed系统,各种技术社区都在分享自己的feed架构——推拉模式。下面就微博的feed推拉模式做一下探讨,并提出新的时间分区拉模式。
sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed架构,也就是推拉模式(timyang上次也分享了新浪微薄的模式)。下面我们就微博的feed推拉(push,pull)模式做一下探讨,并提出新的时间分区拉模式。
众所周知,在微博中,当你发表一篇微博,那么所有关注你的followers(粉丝)都会在一定的时间内收到你的微薄,这有点像群发一封邮件,所有的抄送者都会在一定的时间内收到。到这里,你可能觉得没有什么难度。我们看下下面的截图:
图1 新浪微博姚晨
图2 twitter上冯大辉
新浪微博的姚晨粉丝有2594751,她发表任何一篇微博,都需要2594751个粉丝在一定的时间内收到,twitter的冯大辉发表一篇的话,需要19868个followers收到。
相反,姚晨需要收到他关注的545个人的所有更新,冯大辉需要收到他关注的2525个人的所有更新。到这里,你是不是感觉到有那么一点点小挑战呢?
下面我们看下微博一般的整体结构图:
图3 微博整体结构
图中展示了微博的整体数据流程,先了解下整体的数据结构,没有涉及到followers等的推拉模式处理。下面我们再看下推模式(push):
图4 推模式结构
推模式需要把一篇微博推送给所有关注他的人(推给所有的粉丝),比如姚晨,我们就需要推送给2594751个用户的feeds表中。当然,feeds表可以很好的进行sharding,存储也都是一些数字型的字段,存储空间可能不是很大,用户在查询自己关注的所有人的feed时,速度快,性能非常高,但是推送量会非常大,姚晨发表一篇,就会产生200多万条数据。试想,一个大量用户的微薄系统通过使用推模式,是不是会产生非常惊人的数据呢?
下面看下拉模式(pull)
图5 拉模式
拉模式只需要用户发表微博时,存储一条微博数据到feeds表中(feeds表可以是一个临时表,只保存近期可接受范围的数据).用户每次查询feed时都会去查询feeds表。比如姚晨打开自己的微薄首页,就产生:SELECTidFROMfeedswhereuidin(followinguidlist)ORDERBYidDESCLIMITn(查询最新的n条),缓存到memcached
uidlist=>{data:idlist,timeline:上次查询出来的最新的一条数据的时间}
再次刷新:SELECTidFROMfeedswhereuidin(followinguidlist)ANDtimeline>(memcached存储的上次的timeline)ORDERBYidDESCLIMITn
这种模式实现起来也是比较简单和容易的,只是在查询的时候需要多考虑下缓存的结构。但是feeds表会产生很大的压力,怎么说feeds表也要保存最近十天半个月的数据吧,对于一个大点的系统,这会产生比较大的数据,如果following的人数比较多,数据库的压力就会非常大。而且一般在线的用户,客户端都会定期扫描,又会增加很大的压力,这在查询性能上没有推模式的效率高。
下面我们在对拉模式做一下改进优化
图6 拉模式(pull)-改进(时间分区拉模式)
拉模式的改进主要是在feeds的存储上,使用按照时间进行分区存储。分为最近时间段(比如最近一个小时),近期的,比较长时期等等。我们再来看下查询的流程,比如姚晨登陆微博首页,假设缓存中没有任何数据,那么我们可以查询比较长时期的feeds表,然后进入缓存。下一次查询,通过查询缓存中的数据的timeline,如果timeline还在最近一个小时内,那么只需要查询最近一个小时的数据的feed表,最近一个小时的feeds表比图四的feeds表可要小很多,查询起来速度肯定快几个数量级了。
改进模式的重点在于feeds的时间分区存储,根据上次查询的timeline来决定查询应该落在那个表。一般情况下,经常在线的用户,频繁使用的客户端扫描操作,经常登录的用户,都会落在最近的feeds表区间,查询都是比较高效的。只有那些十天,半个月才登录一次的用户需要去查询比较长时间的feeds大表,一旦查询过了,就又会落在最近时间区域,所以效率也是非常高的。
关于时间的分区,需要根据数据量,用户访问特点进行一个合理的切分。如果数据发表量非常大,可以进行更多的分区。
上面介绍的推模式和拉模式都有各自的特点,个人觉得时间分区拉模式弥补了图四的拉模式的很大的不足,是一个成本比较低廉的解决方案。当然,时间分区拉模式也可以结合推模式,根据某些特点来增加系统的性能。
后记:本文的目的是介绍时间分区拉模式,本人对新浪微博和twitter等的推拉模式的细节并不清楚。
原文链接:http://www.cnblogs.com/sunli/archive/2010/08/24/twitter_feeds_push_pull.html
摘要:sns系统,微博都在应用feed系统,各种技术社区都在分享自己的feed架构——推拉模式。下面就微博的feed推拉模式做一下探讨,并提出新的时间分区拉模式。
sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed架构,也就是推拉模式(timyang上次也分享了新浪微薄的模式)。下面我们就微博的feed推拉(push,pull)模式做一下探讨,并提出新的时间分区拉模式。
众所周知,在微博中,当你发表一篇微博,那么所有关注你的followers(粉丝)都会在一定的时间内收到你的微薄,这有点像群发一封邮件,所有的抄送者都会在一定的时间内收到。到这里,你可能觉得没有什么难度。我们看下下面的截图:
图1 新浪微博姚晨
图2 twitter上冯大辉
新浪微博的姚晨粉丝有2594751,她发表任何一篇微博,都需要2594751个粉丝在一定的时间内收到,twitter的冯大辉发表一篇的话,需要19868个followers收到。
相反,姚晨需要收到他关注的545个人的所有更新,冯大辉需要收到他关注的2525个人的所有更新。到这里,你是不是感觉到有那么一点点小挑战呢?
下面我们看下微博一般的整体结构图:
图3 微博整体结构
图中展示了微博的整体数据流程,先了解下整体的数据结构,没有涉及到followers等的推拉模式处理。下面我们再看下推模式(push):
图4 推模式结构
推模式需要把一篇微博推送给所有关注他的人(推给所有的粉丝),比如姚晨,我们就需要推送给2594751个用户的feeds表中。当然,feeds表可以很好的进行sharding,存储也都是一些数字型的字段,存储空间可能不是很大,用户在查询自己关注的所有人的feed时,速度快,性能非常高,但是推送量会非常大,姚晨发表一篇,就会产生200多万条数据。试想,一个大量用户的微薄系统通过使用推模式,是不是会产生非常惊人的数据呢?
下面看下拉模式(pull)
图5 拉模式
拉模式只需要用户发表微博时,存储一条微博数据到feeds表中(feeds表可以是一个临时表,只保存近期可接受范围的数据).用户每次查询feed时都会去查询feeds表。比如姚晨打开自己的微薄首页,就产生:SELECTidFROMfeedswhereuidin(followinguidlist)ORDERBYidDESCLIMITn(查询最新的n条),缓存到memcached
uidlist=>{data:idlist,timeline:上次查询出来的最新的一条数据的时间}
再次刷新:SELECTidFROMfeedswhereuidin(followinguidlist)ANDtimeline>(memcached存储的上次的timeline)ORDERBYidDESCLIMITn
这种模式实现起来也是比较简单和容易的,只是在查询的时候需要多考虑下缓存的结构。但是feeds表会产生很大的压力,怎么说feeds表也要保存最近十天半个月的数据吧,对于一个大点的系统,这会产生比较大的数据,如果following的人数比较多,数据库的压力就会非常大。而且一般在线的用户,客户端都会定期扫描,又会增加很大的压力,这在查询性能上没有推模式的效率高。
下面我们在对拉模式做一下改进优化
图6 拉模式(pull)-改进(时间分区拉模式)
拉模式的改进主要是在feeds的存储上,使用按照时间进行分区存储。分为最近时间段(比如最近一个小时),近期的,比较长时期等等。我们再来看下查询的流程,比如姚晨登陆微博首页,假设缓存中没有任何数据,那么我们可以查询比较长时期的feeds表,然后进入缓存。下一次查询,通过查询缓存中的数据的timeline,如果timeline还在最近一个小时内,那么只需要查询最近一个小时的数据的feed表,最近一个小时的feeds表比图四的feeds表可要小很多,查询起来速度肯定快几个数量级了。
改进模式的重点在于feeds的时间分区存储,根据上次查询的timeline来决定查询应该落在那个表。一般情况下,经常在线的用户,频繁使用的客户端扫描操作,经常登录的用户,都会落在最近的feeds表区间,查询都是比较高效的。只有那些十天,半个月才登录一次的用户需要去查询比较长时间的feeds大表,一旦查询过了,就又会落在最近时间区域,所以效率也是非常高的。
关于时间的分区,需要根据数据量,用户访问特点进行一个合理的切分。如果数据发表量非常大,可以进行更多的分区。
上面介绍的推模式和拉模式都有各自的特点,个人觉得时间分区拉模式弥补了图四的拉模式的很大的不足,是一个成本比较低廉的解决方案。当然,时间分区拉模式也可以结合推模式,根据某些特点来增加系统的性能。
后记:本文的目的是介绍时间分区拉模式,本人对新浪微博和twitter等的推拉模式的细节并不清楚。
原文链接:http://www.cnblogs.com/sunli/archive/2010/08/24/twitter_feeds_push_pull.html
发表评论
-
HTTP协议之multipart/form-data请求分析
2015-11-09 17:41 742原文地址:http://blog.csdn ... -
Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别
2015-10-30 18:01 1023原文地址:http://blog.csdn.net/mmllk ... -
过滤器和拦截器的区别
2015-10-30 18:00 637原文地址:http://blog.163.com/hzd_lo ... -
过滤器、监听器、拦截器的区别
2015-10-30 17:59 562原文地址:http://blog.csdn.net/x_yp/ ... -
【JSP】让HTML和JSP页面不缓存的方法
2015-10-14 10:16 449原文地址:http://blog.csdn.net/juebl ... -
jsp去掉浏览器缓存
2015-10-14 09:21 595原文地址:http://bbs.csdn.net/topics ... -
pageContext对象的用法
2015-09-04 21:24 668原文地址:http://blog.csdn.net/warcr ... -
log4j日志文件乱码问题的解决方法
2015-01-06 18:11 791原文地址:http://blog.csdn.net/inkfi ... -
JEECMS 系统权限设计
2014-09-05 16:25 917原文地址:http://chinajweb.iteye.com ... -
使用servlet保存用户上传的文件到本地
2014-08-12 14:46 609原文地址:http://blog.csdn.net/shuwe ... -
Servlet 实现文件的上传与下载
2014-08-12 14:44 864原文地址:http://www.2cto.com/kf/201 ... -
android文件上传到服务器
2014-08-12 11:03 369代码非原创,fix了bug,完善的还是需要再思量: /** * ... -
常用社交网络(SNS、人人网、新浪微博)动态新闻(feed、新鲜事、好友动态)系统浅析
2014-08-05 15:09 907原文地址:http://blog.csdn.net/sunme ... -
Feed系统架构资料收集
2014-08-05 15:08 596原文地址:http://blog.csdn ... -
spring 出错,Could not find acceptable representation
2014-08-03 14:41 1463原文地址:http://www.myexception.cn/ ... -
spring @ResponseBody 返回json格式有关问题
2014-08-03 14:20 611原文地址:http://www.myexception.cn/ ... -
httpclient上传文件及传参数
2014-07-27 14:02 1176原文地址:http://hyacinth.blog.sohu. ... -
在eclipse中把java工程变为web工程
2014-06-27 11:18 690项目上点鼠标右键->properties->Pro ... -
配置Tomcat直接显示目录结构和文件列表
2014-06-10 13:52 704配置Tomcat直接显示目录结构和文件列表 TomcatSe ... -
压力测试工具apache-ab讲解
2012-10-16 09:59 712最近在做webservices,得到的数据是从德国那边的服务器 ...
相关推荐
下面我们就微博的feed推拉(push,pull)模式做一下探讨,并提出新的时间分区拉模式。 众所周知,在微博中,当你发表一篇微博,那么所有关注你的followers(粉丝)都会在一定的时间内收到你的微薄,这有点像群发一封...
参考:http://www.cnblogs.com/sunli/archive/2010/08/24/twitter_feeds_push_pull.html微
feed流业务的推拉模式小结: • 拉模式,读扩散,feed存一份,存储小,用户集中访问数据,性能差 • 推模式,写扩散,feed存多份,用冗余存储换锁冲突,性能高
新浪微博开放平台中的Redis实践_大数据时代feed架构_微博消息系统架构演进_互联网公司技术架构资料.新浪微博.微博架构与平台安全_构建高性能的微博系统——再谈新浪微博架构 演讲视频,PPT,一些收集的博客地址等
第一版就是是非常快的,我们可以非常快的实现我们的模块 第一版的技术细节,典型的LAMP架构,是使用Myisam搜索引擎,它的优点就是速度非常快 第一个问题是发表
1、实现首先,先解决发布跟接收的问题,目前有大体以下几种方式:1、推模式什么是推模式 2、拉模式与推模式相反,拉模式则是,用户每次刷新feed第一页,都去遍历关
微博架构 feed 介绍,精彩不要错过~~
1. 微博的技术架构? 2. 微博平台的技术挑战? 3. 微博平台架构演变与第三代技术架构体系? 4. Watchman-分布式服务追踪系统? 5. Feed多级双机房缓存系统?
演讲中主要包含了Feed系统的基本架构以及在实际工作中所遇到的挑战。
该文档详细的介绍亿级用户下的新浪微博平台架构、微博平台的技术挑战、微博平台架构演变与第三代技术架构体系、atchman-分布式服务追踪系统、Feed多级双机房缓存系统
大数据时代Feed系统架构-杨卫华.pdf
突发热点事件带来的峰值挑战 • 微博Feed业务弹性调度演进 • 智能弹性调度系统实践 • 全链路弹性调度挑战与应对
在社交网络系统运行过程中,面对庞大用户群的海量访问,良好架构且不断改进的缓存体系具有非常重要的支撑作用。互联网从门户/搜索时代进入移动社交时代,互联网产品从满足单向浏览的需求,发展到今天的以用户、关系...
我们在讲如何设计Feed流系统之前,先来看一下Feed流中的一些概念:Feed:Feed流中的每一条状态或者消息都是Feed,比如朋友圈中的一个状态就是一个Feed,微博中的一条微博就是一个Feed。Feed流:持续更新并呈现给用户...
讲师简介胡忠想,微博名@古月中心相心,目前任职于新浪微博平台研发及大数据部,主要负责微博Feed策略相关工作,曾先后参与微博Feed存储、微博计数器、微博阅读数
大数据时代Feed系统架构-杨卫华
Feed系统结构浅析,SNS Feed系统的介绍