论坛首页 Java企业应用论坛

做SNS的,一起来猜猜新浪微博的核心Feed系统是怎么设计的吧

浏览 29309 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-03-09  
抛出异常的爱 写道
ray_linn 写道
说句不客气的,微博就是垃圾堆,而数据库不是存垃圾的地方,所以是垃圾的东西就不需要用数据库,只需要回到本来面目---文本格式就可以。

用户----我关注的用户,是个一对多的关系。这种connection不是垃圾,可以放数据库里。

每个用户有自己独立的folder(以ID code为名),自己发表的垃圾,就堆在这个folder里,当场就生成静态html。

然后一个用户登录了,就到自己关注的用户的folder里东读一点西读一点,其实都是静态HTML,你要觉得硬盘IO太多,也不妨放个memcache,不放,也不见得会怎么样。


至于这些文本怎么删除,其实只要跟踪一下用户登录就可以,还登录的用户是hot user,他们的内容可以keep住,不是hot user的,folder就可以由后台清空了

如果有新的微博是否需要f5来刷新?
如果非f5刷新那怎么通知到?
靠对所有跟随者广播么?
如果广播那怎么知道我的跟随者是否在线?(非在线不通知)
如果收到了广播通知如何通知浏览器F5刷新页面?
如果刷新页面时是把所有新消息都刷出来还是只刷出来刚刚广播的消息?

以上求解惑


同样求解
0 请登录后投票
   发表时间:2011-03-09  
lz的图画的真不错-_-!
0 请登录后投票
   发表时间:2011-03-09   最后修改:2011-03-09
推肯定不是整体全推送, 选择部分当时需要立即看到的去推, 比如最近N分钟还在线的.
对于微博还需要考虑按粉丝数量的划分的不同处理(推模式下甚至可以用专门的服务器处理特定的一批超热用户).

插个广告:
各位有兴趣于SNS各种系统开发的, 可以投简历到benyin#taobao.com (#替换为@), 我所在的团队负责淘宝SNS(淘江湖)的设计开发(其中有Feed分发系统, 信息实时推送系统, 推荐系统), 今年是淘宝SNS化的一年, 希望更多资深的开发工程师和架构师能加入我们.
0 请登录后投票
   发表时间:2011-03-09  
这个主题我以前在论坛也发起贴讨论过,区别那是讨论具体实现,就本身用到的技术与架构谈不上复杂,主要是因为量而发生质变,具体实现就是数据分表+Cache层+推
0 请登录后投票
   发表时间:2011-03-09   最后修改:2011-03-09
抛出异常的爱 写道
ray_linn 写道
说句不客气的,微博就是垃圾堆,而数据库不是存垃圾的地方,所以是垃圾的东西就不需要用数据库,只需要回到本来面目---文本格式就可以。

用户----我关注的用户,是个一对多的关系。这种connection不是垃圾,可以放数据库里。

每个用户有自己独立的folder(以ID code为名),自己发表的垃圾,就堆在这个folder里,当场就生成静态html。

然后一个用户登录了,就到自己关注的用户的folder里东读一点西读一点,其实都是静态HTML,你要觉得硬盘IO太多,也不妨放个memcache,不放,也不见得会怎么样。


至于这些文本怎么删除,其实只要跟踪一下用户登录就可以,还登录的用户是hot user,他们的内容可以keep住,不是hot user的,folder就可以由后台清空了

如果有新的微博是否需要f5来刷新?
如果非f5刷新那怎么通知到?
靠对所有跟随者广播么?
如果广播那怎么知道我的跟随者是否在线?(非在线不通知)
如果收到了广播通知如何通知浏览器F5刷新页面?
如果刷新页面时是把所有新消息都刷出来还是只刷出来刚刚广播的消息?

以上求解惑


javascript难道是吃干饭的吗? 要我设计,每个垃圾信息都设计成xml格式,客户端用XSLT聚合起来就可以,还可以享受免费的browser cache
0 请登录后投票
   发表时间:2011-03-10  
应该是非关系型数据库
0 请登录后投票
   发表时间:2011-03-10  
ray_linn 写道
说句不客气的,微博就是垃圾堆,而数据库不是存垃圾的地方,所以是垃圾的东西就不需要用数据库,只需要回到本来面目---文本格式就可以。

用户----我关注的用户,是个一对多的关系。这种connection不是垃圾,可以放数据库里。

每个用户有自己独立的folder(以ID code为名),自己发表的垃圾,就堆在这个folder里,当场就生成静态html。

然后一个用户登录了,就到自己关注的用户的folder里东读一点西读一点,其实都是静态HTML,你要觉得硬盘IO太多,也不妨放个memcache,不放,也不见得会怎么样。


至于这些文本怎么删除,其实只要跟踪一下用户登录就可以,还登录的用户是hot user,他们的内容可以keep住,不是hot user的,folder就可以由后台清空了


同意.
0 请登录后投票
   发表时间:2011-03-10  
抛出异常的爱 写道
ray_linn 写道
说句不客气的,微博就是垃圾堆,而数据库不是存垃圾的地方,所以是垃圾的东西就不需要用数据库,只需要回到本来面目---文本格式就可以。

用户----我关注的用户,是个一对多的关系。这种connection不是垃圾,可以放数据库里。

每个用户有自己独立的folder(以ID code为名),自己发表的垃圾,就堆在这个folder里,当场就生成静态html。

然后一个用户登录了,就到自己关注的用户的folder里东读一点西读一点,其实都是静态HTML,你要觉得硬盘IO太多,也不妨放个memcache,不放,也不见得会怎么样。


至于这些文本怎么删除,其实只要跟踪一下用户登录就可以,还登录的用户是hot user,他们的内容可以keep住,不是hot user的,folder就可以由后台清空了

如果有新的微博是否需要f5来刷新?
如果非f5刷新那怎么通知到?
靠对所有跟随者广播么?
如果广播那怎么知道我的跟随者是否在线?(非在线不通知)
如果收到了广播通知如何通知浏览器F5刷新页面?
如果刷新页面时是把所有新消息都刷出来还是只刷出来刚刚广播的消息?

以上求解惑

@ray_linn说的很有道理,垃圾信息回归垃圾模式处理就行了,呵呵。

对于刷新,我觉得应该是ajax模式。对于主贴上第三版设计,页面打开时会同时在js中记录下偏移量,然后定期的或者像gmail那样保持长连接的去查询。当服务器发现偏移量变化时,根据偏移量得到新的索引数据,把新的消息发送给客户端,然后更新客户端中偏移量的值到最新值。

对于分布式文件系统模式,吞吐量肯定是非常庞大的,不会有网络400M之类的流量限制,很多设计可以简单很多。

上面提到的客户端可以是浏览器,也可以是手机客户端之类的。应该都可以。

我猜是这样~~

0 请登录后投票
   发表时间:2011-03-10   最后修改:2011-03-10
采用推的形式,分布式队列,异步化。
行级缓存:memcached,redis。存消息主体。
列级缓存:redis,TT,存收件箱和订阅关系。
注意处理关系列表时,大数据量的问题。
Mysql:用户分表,存订阅关系。动态,按时间分表。
0 请登录后投票
   发表时间:2011-03-10   最后修改:2011-03-10
myreligion 写道
抛出异常的爱 写道
ray_linn 写道
说句不客气的,微博就是垃圾堆,而数据库不是存垃圾的地方,所以是垃圾的东西就不需要用数据库,只需要回到本来面目---文本格式就可以。

用户----我关注的用户,是个一对多的关系。这种connection不是垃圾,可以放数据库里。

每个用户有自己独立的folder(以ID code为名),自己发表的垃圾,就堆在这个folder里,当场就生成静态html。

然后一个用户登录了,就到自己关注的用户的folder里东读一点西读一点,其实都是静态HTML,你要觉得硬盘IO太多,也不妨放个memcache,不放,也不见得会怎么样。


至于这些文本怎么删除,其实只要跟踪一下用户登录就可以,还登录的用户是hot user,他们的内容可以keep住,不是hot user的,folder就可以由后台清空了

如果有新的微博是否需要f5来刷新?
如果非f5刷新那怎么通知到?
靠对所有跟随者广播么?
如果广播那怎么知道我的跟随者是否在线?(非在线不通知)
如果收到了广播通知如何通知浏览器F5刷新页面?
如果刷新页面时是把所有新消息都刷出来还是只刷出来刚刚广播的消息?

以上求解惑

@ray_linn说的很有道理,垃圾信息回归垃圾模式处理就行了,呵呵。

对于刷新,我觉得应该是ajax模式。对于主贴上第三版设计,页面打开时会同时在js中记录下偏移量,然后定期的或者像gmail那样保持长连接的去查询。当服务器发现偏移量变化时,根据偏移量得到新的索引数据,把新的消息发送给客户端,然后更新客户端中偏移量的值到最新值。

对于分布式文件系统模式,吞吐量肯定是非常庞大的,不会有网络400M之类的流量限制,很多设计可以简单很多。

上面提到的客户端可以是浏览器,也可以是手机客户端之类的。应该都可以。

我猜是这样~~


ajax memcache等高深词汇对于
几百人同时在线可以完成的不错.....
400M流量....有时还要再想想.....
你说过的长连接很有意思
能细说说怎么用么
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics