`

SNS和微博的Feed系统

    博客分类:
  • Web
阅读更多
[文章作者:孙立 链接:http://www.cnblogs.com/sunli/ 更新时间:2010-08-24]

     sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed架构,也就是推拉模式(timyang上次也分享了新浪微薄的模式)。下面我们就微博的feed推拉(push,pull)模式做一下探讨,并提出新的时间分区拉模式。

      众所周知,在微博中,当你发表一篇微博,那么所有关注你的followers(粉丝)都会在一定的时间内收到你的微薄,这有点像群发一封邮件,所有的抄送者都会在一定的时间内收到。到这里,你可能觉得没有什么难度。我们看下下面的截图:


       图一:新浪微博姚晨




         图二:twitter上冯大辉

     新浪微博的姚晨粉丝有2594751,她发表任何一篇微博,都需要2594751个粉丝在一定的时间内收到,twitter的冯大辉发表一篇的话,需要19868个followers收到。

     相反,姚晨需要收到他关注的545个人的所有更新,冯大辉需要收到他关注的2525个人的所有更新。到这里,你是不是感觉到有那么一点点小挑战呢?

     下面我们看下微博一般的整体结构图:





                 图三:微博整体结构

       图中展示了微博的整体数据流程,先了解下整体的数据结构,没有涉及到followers等的推拉模式处理。下面我们再看下推模式(push):





          图四:推模式结构

   推模式需要把一篇微博推送给所有关注他的人(推给所有的粉丝),比如姚晨,我们就需要推送给2594751个用户的feeds表中。当然,feeds表可以很好的进行sharding,存储也都是一些数字型的字段,存储空间可能不是很大,用户在查询自己关注的所有人的feed时,速度快,性能非常高,但是推送量会非常大,姚晨发表一篇,就会产生200多万条数据。试想,一个大量用户的微薄系统通过使用推模式,是不是会产生非常惊人的数据呢?

    下面看下拉模式(pull)





            图五:拉模式

     拉模式只需要用户发表微博时,存储一条微博数据到feeds表中(feeds表可以是一个临时表,只保存近期可接受范围的数据).用户每次查询feed时都会去查询feeds表。比如姚晨打开自己的微薄首页,就产生:SELECT id FROM feeds where uid in(following uid list) ORDER BY id DESC LIMIT n(查询最新的n条),缓存到memcached

uidlist=>{data:id list,timeline:上次查询出来的最新的一条数据的时间}

再次刷新:SELECT id FROM feeds where uid in(following uid list) AND timeline>(memcached存储的上次的timeline) ORDER BY id DESC LIMIT n

    这种模式实现起来也是比较简单和容易的,只是在查询的时候需要多考虑下缓存的结构。但是feeds表会产生很大的压力,怎么说feeds表也要保存最近十天半个月的数据吧,对于一个大点的系统,这会产生比较大的数据,如果following的人数比较多,数据库的压力就会非常大。而且一般在线的用户,客户端都会定期扫描,又会增加很大的压力,这在查询性能上没有推模式的效率高。

     下面我们在对拉模式做一下改进优化





           图六:拉模式(pull)-改进(时间分区拉模式)

           拉模式的改进主要是在feeds的存储上,使用按照时间进行分区存储。分为最近时间段(比如最近一个小时),近期的,比较长时期等等。我们再来看下查询的流程,比如姚晨登陆微博首页,假设缓存中没有任何数据,那么我们可以查询比较长时期的feeds表,然后进入缓存。下一次查询,通过查询缓存中的数据的 timeline,如果timeline还在最近一个小时内,那么只需要查询最近一个小时的数据的feed表,最近一个小时的feeds表比图四的 feeds表可要小很多,查询起来速度肯定快几个数量级了。

          改进模式的重点在于feeds的时间分区存储,根据上次查询的timeline来决定查询应该落在那个表。一般情况下,经常在线的用户,频繁使用的客户端扫描操作,经常登录的用户,都会落在最近的feeds表区间,查询都是比较高效的。只有那些十天,半个月才登录一次的用户需要去查询比较长时间的 feeds大表,一旦查询过了,就又会落在最近时间区域,所以效率也是非常高的。

         关于时间的分区,需要根据数据量,用户访问特点进行一个合理的切分。如果数据发表量非常大,可以进行更多的分区。

        上面介绍的推模式和拉模式都有各自的特点,个人觉得时间分区拉模式弥补了图四的拉模式的很大的不足,是一个成本比较低廉的解决方案。当然,时间分区拉模式也可以结合推模式,根据某些特点来增加系统的性能。

        后记:本文的目的是介绍时间分区拉模式,本人对新浪微博和twitter等的推拉模式的细节并不清楚。

  • 大小: 169.5 KB
  • 大小: 87.4 KB
  • 大小: 106 KB
  • 大小: 116 KB
  • 大小: 121.3 KB
  • 大小: 55.7 KB
分享到:
评论

相关推荐

    微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨

    sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed架构,也就是推拉模式(timyang...

    记事狗微博系统 v4.7.4 Build 20140922 UTF-8.zip

    记事狗微博系统是一套创新的互动社区系统,其以微博为核心,兼有轻博、SNS和BBS特点,既可用来独立建站也可通过Ucenter和oauth接口与已有网站无缝整合,通过微博评论模块、关注转发机制打通全站的信息流、关系流,可...

    开源微博社交系统ThinkSNS_V4.60

    朋友圈、微吧、话题、频道、找伙伴、商城、活动、资讯、找人、地图定位、风云榜附近的人等50多个功能板块,全方位覆盖SNS系统所需,让网站、应用建设更快捷,让系统开发更简单。 ThinkSNS全方位提供网站开发|移动端...

    记事狗微博系统 v3.0.0 beta GBK Build 20110916.rar

    记事狗微博源码 V3.0.0beta Build20110916 记事狗微博系统V3.0版本兼有轻博的多图和长文功能、SNS的导航架构优势、BBS的推荐和置顶特点,让发布更简单、查看更方便、互动更便捷,新版还内置API体系和插件机制,让...

    java 简单微博系统

    有详细设计,功能包括好友、粉丝、关注、发帖、转发、评论、收藏、搜索等。包含有相关说明文档,新手学习用

    开源微博SNS路过插件

    路过插件.开源sns必备插件。

    Feed系统结构浅析

    Feed系统结构浅析,SNS Feed系统的介绍

    微博通支持在windows、苹果电脑(Mac)和Linux上运行

    目前支持:新浪微博、腾讯微博、搜狐微博、网易微博、百度说吧、移动微博、嘀咕、饭否、做啥、人间网、天涯微博、人民微博、新华微博、Google Buzz、豆瓣、凤凰微博、QQ空间、开心网、人人...,共20多家微博及SNS网站...

    记事狗微博

    记事狗是一套创新的互动社区系统,其以微博为核心,兼有轻博、SNS和BBS特点,既可用来独立建站也可通过Ucenter与已有网站无缝整合,通过微博评论模块、关注转发机制打通全站的信息流、关系流,可大幅度提高网站用户...

    记事狗微博系统 4.7.4 Build 20140922 UTF8.zip

    记事狗微博系统是一套创新的互动社区系统,其以微博为核心,兼有轻博、SNS和BBS特点,既可用来独立建站也可通过Ucenter和oauth接口与已有网站无缝整合,通过微博评论模块、关注转发机制打通全站的信息流、关系流,可...

    微博通Air版

    微博通是一款基于API的多个微博平台及SNS同步更新工具。通过微博通,用户可以向已注册的各个微博平台发送消息和查看各个平台接收的信息。目前支持:新浪微博、腾讯微博、搜狐微博、网易微博、百度说吧、139说客、...

    JAVA开源SNS社交管理问答知识付费系统JEESNS v1.4.2.zip

    JEESNS是一款基于JAVA企业级平台研发的社交管理系统,依托企业级JAVA的高效、安全、稳定等优势,开创国内JAVA版开源SNS先河,JEESNS可以用来搭建门户、群组、论坛、微博和问答等知识付费社区平台系统。 JEESNS是将...

    记事狗微博系统 4.7.4 Build 20140922 GBK.zip

    记事狗微博系统是一套创新的互动社区系统,其以微博为核心,兼有轻博、SNS和BBS特点,既可用来独立建站也可通过Ucenter和oauth接口与已有网站无缝整合,通过微博评论模块、关注转发机制打通全站的信息流、关系流,可...

    仿新浪微博程序thinksns

    非常好!仿新浪微博程序thinksns,嘿嘿!非常好用!

    游戏行业推荐案

    SNS和微博是其中最重要的两种形式,分别满足了用户的不同需求。SNS是以真实好友为核心的强关系型推广平台 ,比如人人网和Facebook;微博是以话题为纽带的弱关系型信息发布平台,比如新浪微博和Twitter。

    sns 数据结构设计

    sns 数据结构 新闻系统数据结构 微博数据结构等多种数据结构

    微博你到底是转型电商还是SNS.docx

    微博你到底是转型电商还是SNS.docx

    脸谱SNS社交系统源码

    脸谱SNS社交系统,仿facebook社交系统,如果想研究社交的同学可以看过来

Global site tag (gtag.js) - Google Analytics