要是不清楚什么是feed,google之。
Feed是sns类应用的核心和最复杂的部分,就是sina微博中看到的“我关注的人”的消息。像人人网中的“新鲜事”等等,都是一个东西。你想啊,你关注了几千人,又被几千人关注,你发了一个消息,另外几千人怎么看到哪?拿数据库做join和in操作肯定立刻挂。而且像sina weibo,数据和访问量庞大,怎么实现哪?这其实就是传说中的推和拉的选择,人人网写过一篇文章:
http://news.csdn.net/a/20100726/277273.html,简单来说以推为主体。我猜测可能在某些情况下会使用拉,例如这个账号很久不登录,太不活跃,给他推东西纯属浪费。嗯。。。,这方面也欢迎一起来猜猜。
基于这些,我猜测的第1版架构图(我们现在就是这样做的,规模比较小,还看不出问题):
整个架构基于memcached + mysql,图中分了ABC三个区域。所有的消息存储在mysql中,无论推送给多少人,只存储一份。另外有一个索引表,用来记录推送关系,推送给1000个人,就增加1000条记录,也就是图中的A。当发生查询时,从索引表中根据用户编号进行一次简单查询(基于用户编号为索引和条件的select),拿到索引结果后,进入B,从memcached中读取实际信息。如果不存在或者不全,进入C,根据索引信息读取网友实际发表或者转载的内容,用模板生成消息并存储到memcached中,然后返回来。
在整个过程中,B是memcached集群,性能应该问题不大。C是cache后面的东西,其中的数据库查询也是基于索引表中给的对象主键,分表条件等进行的分库分表基于主键的查询,性能问题应该也不大。关键是A区。我们现在的方案是用guzz框架把索引表分到单独的一组数据库中,然后根据用户id进行切表,每个人保留最多200条最新消息的索引。总的来说,每张表的大小还在控制内。对于像#话题#等也是一样的,建立索引表分发。无论怎样,实际的消息只有一份。
我猜测,sina微博第一版系统应该就是这样。架构简单实用。
但随着规模的扩大,A区索引表肯定会逐步出现大量性能问题。要升级到第二,第三版。这两个之间或许是一步到位的。
第二第三版架构猜测:
A区的性能问题不是mysql能够解决的,但幸好A区的数据结构非常简单。就是以 用户id+某个动态功能 为key下的一个固定大小的索引集合。最简单的办法就是把mysql换成nosql,这个数据结构用nosql应该非常容易实施。我没有用过nosql,但通过资料来看,相比mysql肯定是一大性能提升。我们暂且推测其为第二版方案吧。欢迎实际用过nosql的来谈谈行不行。
我们假设,第二版方案也解决不了问题。A区的性能问题太大了,怎么办?如果这样,我想索引系统只能是自己做了,谁也靠不住。我有个猜测,欢迎讨论。看下图。
这个架构是完全为feed定制的,我们为每个 用户id+某个动态功能 分配一个磁盘block。在索引表中,我们知道每条索引记录的大小是固定的(假设每条1k大小),而为用户提供的最多最新动态数也是固定的(假设200条)。那么我们这个block就分配固定的201K,前面的1k是头信息,后面的200k存储最多200条的索引记录。
在头信息中,记录这个块操作的系统版本号(升级使用),用户信息,操作的偏移量,总动态数等等。当插入一条新索引时,根据操作偏移量直接定位位置,写入;如果已经写到第200条,回到第一条覆盖写。读取的时候,根据偏移量数据直接读。因为记录大小固定,block维护简单,顺序读写,效率肯定不差。而这些block文件块,将存储在一套分布式文件系统中,依靠还算成熟的hadoop技术,无限扩展这个大集群。
相比数据库的优势,还省去了清理过期数据的问题。
这里面没有讨论block块缓存的问题,这是分布式文件系统的工作。对于不同的动态,可能block的大小会不一样,这都是可以的。
不知道猜的对不对。
- 大小: 17.4 KB
- 大小: 15.4 KB
分享到:
相关推荐
sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed架构,也就是推拉模式(timyang...
非常好!仿新浪微博程序thinksns,嘿嘿!非常好用!
阿里投资新浪微博:马云的SNS之梦.docx
IPhone平台新浪微博航班信息SNS的实现毕业论文.docx
中国的SNS路径?(之二)新浪微博不是Twitter.docx
源码实现了支持模仿新浪微博多图选择功能源码,并且该源码比较简单,而且源码很齐全,功能也很强大,喜欢的朋友可以下载研究学习一吧。
记事狗微博系统是一套创新的互动社区系统,其以微博为核心,兼有轻博、SNS和BBS特点,既可用来独立建站也可通过Ucenter和oauth接口与已有网站无缝整合,通过微博评论模块、关注转发机制打通全站的信息流、关系流,可...
路过插件.开源sns必备插件。
目前支持:新浪微博、腾讯微博、搜狐微博、网易微博、百度说吧、139说客、嘀咕、饭否、做啥、人间网、天涯微博、人民微博、新华微博、Google Buzz、豆瓣、凤凰微博、开心网、人人网、和讯微博、中金微博、Follow5、...
V3.0.0beta Build20110916 记事狗微博系统V3.0版本兼有轻博的多图和长文功能、SNS的导航架构优势、BBS的推荐和置顶特点,让发布更简单、查看更方便、互动更便捷,新版还内置API体系和插件机制,让功能扩展更容易,让...
朋友圈、微吧、话题、频道、找伙伴、商城、活动、资讯、找人、地图定位、风云榜附近的人等50多个功能板块,全方位覆盖SNS系统所需,让网站、应用建设更快捷,让系统开发更简单。 ThinkSNS全方位提供网站开发|移动端...
sns 数据结构 新闻系统数据结构 微博数据结构等多种数据结构
新浪微博、腾讯微博、搜狐微博、网易微博、百度说吧、移动微博、嘀咕、饭否、做啥、人间网、天涯微博、人民微博、新华微博、Google Buzz、豆瓣、凤凰微博、QQ空间、开心网、人人网、和讯微博、中金微博、同学网、...
有详细设计,功能包括好友、粉丝、关注、发帖、转发、评论、收藏、搜索等。包含有相关说明文档,新手学习用
今天我在360zsw网上增加了社会化按钮,根据我个人的习惯,我选择了豆瓣、百度空间、新浪微博、人人网、开心网等几个大型sns网站。 当然现在有很多诸如分享家、jiathis等插件,但是用过后我总觉得速度慢,还不如自己...
Feed系统结构浅析,SNS Feed系统的介绍
微博你到底是转型电商还是SNS.docx