c***g 发帖数: 472 | 1 1 如何设计facebook的news feed?
2 如何设计facebook的real time chatting system?
读了一圈还是没有头绪,不知道是否哪位大侠讲讲这两设计题的要点? |
M**a 发帖数: 848 | |
c***g 发帖数: 472 | 3 求其他大侠指点
【在 M**a 的大作中提到】 : 马克。同不懂。
|
z****e 发帖数: 54598 | 4 real time chatting你本机上建一个接收message的server就好了
js都可以用,在server side保留客户端的ip addresses
然后接收到一个message之后广播出去酱紫
news feed从来没用过,这个怎么用? |
w**z 发帖数: 8232 | 5 real time chatting 不是很懂,我们用open sourced, 很是蛋疼。connection 有时就
断了, 还会丢包。不知道有啥好的开源软件。
feed 我们用Cassandra, news 发生的时候, 就fanout ,写入Cassandra. 至于 news
item要不要denormalize, 看具体情况。 如果一个user 有很多 friends, 你可能要选
择性的fanout,, 要不系统压力太大。
【在 c***g 的大作中提到】 : 1 如何设计facebook的news feed? : 2 如何设计facebook的real time chatting system? : 读了一圈还是没有头绪,不知道是否哪位大侠讲讲这两设计题的要点?
|
z****e 发帖数: 54598 | 6 real time chatting如果自己写估计也不会太麻烦吧?
无非几个api,选一下协议,会丢包的话,多verify几次
在server side建一个sequence,然后对每一个msg分配一个#
client side不仅发,同时还需要验证收到msg的#是否正确
比如之前收到的是1,下一个收到的是3,那么中间就丢了2,向服务器发请求
要求重传,服务器收到这个请求之后,piggybag之前的msg,这里就是2和3一起
发给客户端,所以服务器需要对msg做一定的缓存,等chat结束之后
再从内存中删除,可以用点redis之类的,以缓解jvm内存的压力
我们刚用这种方式做了一个射击游戏的prototype
各种要求肯定比chatting要严格得多,效果很不错
所以如果我们ok的话,chatting应该也ok
news
【在 w**z 的大作中提到】 : real time chatting 不是很懂,我们用open sourced, 很是蛋疼。connection 有时就 : 断了, 还会丢包。不知道有啥好的开源软件。 : feed 我们用Cassandra, news 发生的时候, 就fanout ,写入Cassandra. 至于 news : item要不要denormalize, 看具体情况。 如果一个user 有很多 friends, 你可能要选 : 择性的fanout,, 要不系统压力太大。
|
w**z 发帖数: 8232 | 7 我们用的是实现xmpp的。还要解决roster, friend request 等等, 每次一看那就晕。
【在 z****e 的大作中提到】 : real time chatting如果自己写估计也不会太麻烦吧? : 无非几个api,选一下协议,会丢包的话,多verify几次 : 在server side建一个sequence,然后对每一个msg分配一个# : client side不仅发,同时还需要验证收到msg的#是否正确 : 比如之前收到的是1,下一个收到的是3,那么中间就丢了2,向服务器发请求 : 要求重传,服务器收到这个请求之后,piggybag之前的msg,这里就是2和3一起 : 发给客户端,所以服务器需要对msg做一定的缓存,等chat结束之后 : 再从内存中删除,可以用点redis之类的,以缓解jvm内存的压力 : 我们刚用这种方式做了一个射击游戏的prototype : 各种要求肯定比chatting要严格得多,效果很不错
|
o***g 发帖数: 2784 | 8 我之前说过设计之前先要确定需求
chat,你是网页里app里都要做?能互通?只1对1chat?还是可以群聊?同时可以聊几
个人?
【在 c***g 的大作中提到】 : 1 如何设计facebook的news feed? : 2 如何设计facebook的real time chatting system? : 读了一圈还是没有头绪,不知道是否哪位大侠讲讲这两设计题的要点?
|
z****e 发帖数: 54598 | 9 这个在server side做就好了,client side还是不用这么麻烦了
parse xml非常耗资源的说,android还好,web就很痛苦了
【在 w**z 的大作中提到】 : 我们用的是实现xmpp的。还要解决roster, friend request 等等, 每次一看那就晕。
|
j**********3 发帖数: 3211 | |
|
|
h**********n 发帖数: 897 | 11 news feed,实时性要求不太高,broadcast,复杂逻辑(ranking、推荐、过滤等等)。
chatting,要求实时,1:1(好像现在还没有group chat?很久没用fb了),简单逻辑。
所以看下面fb的员工说cassandra是对的,没准在cassandra上面还有redis或者
memcached做缓存(weibo貌似就是用redis)。
chatting感觉就比较复杂了,要握手,要有timer保证实时性……
这题目主要看你考虑东西是否全面,方案是否合理吧,顺便考察下眼界。
【在 c***g 的大作中提到】 : 1 如何设计facebook的news feed? : 2 如何设计facebook的real time chatting system? : 读了一圈还是没有头绪,不知道是否哪位大侠讲讲这两设计题的要点?
|
c*******r 发帖数: 610 | |
z****e 发帖数: 54598 | 13 news feed我没用过,但是看其他人说的,我猜测考点是gossip |
z******g 发帖数: 271 | 14 赞最后两个字
)。
辑。
【在 h**********n 的大作中提到】 : news feed,实时性要求不太高,broadcast,复杂逻辑(ranking、推荐、过滤等等)。 : chatting,要求实时,1:1(好像现在还没有group chat?很久没用fb了),简单逻辑。 : 所以看下面fb的员工说cassandra是对的,没准在cassandra上面还有redis或者 : memcached做缓存(weibo貌似就是用redis)。 : chatting感觉就比较复杂了,要握手,要有timer保证实时性…… : 这题目主要看你考虑东西是否全面,方案是否合理吧,顺便考察下眼界。
|
p*****2 发帖数: 21240 | |
z****e 发帖数: 54598 | 16 websocket是tcp吧,很多时候为了追求效率,都是用udp来实现
我记得我最早在大学时候做的一个聊天室,就用udp来实现
【在 p*****2 的大作中提到】 : 难道不是websocket?
|
p*****2 发帖数: 21240 | 17
udp就要解决丢包了。
【在 z****e 的大作中提到】 : websocket是tcp吧,很多时候为了追求效率,都是用udp来实现 : 我记得我最早在大学时候做的一个聊天室,就用udp来实现
|
z****e 发帖数: 54598 | 18 嗯,要自行解决
【在 p*****2 的大作中提到】 : : udp就要解决丢包了。
|
o***g 发帖数: 2784 | 19 +1,这个是chat的关键
【在 p*****2 的大作中提到】 : 难道不是websocket?
|
s*******n 发帖数: 196 | 20 这sequence number听起来很不scale.
【在 z****e 的大作中提到】 : real time chatting如果自己写估计也不会太麻烦吧? : 无非几个api,选一下协议,会丢包的话,多verify几次 : 在server side建一个sequence,然后对每一个msg分配一个# : client side不仅发,同时还需要验证收到msg的#是否正确 : 比如之前收到的是1,下一个收到的是3,那么中间就丢了2,向服务器发请求 : 要求重传,服务器收到这个请求之后,piggybag之前的msg,这里就是2和3一起 : 发给客户端,所以服务器需要对msg做一定的缓存,等chat结束之后 : 再从内存中删除,可以用点redis之类的,以缓解jvm内存的压力 : 我们刚用这种方式做了一个射击游戏的prototype : 各种要求肯定比chatting要严格得多,效果很不错
|
|
|
z****e 发帖数: 54598 | 21 对每一个chat group单独分配一个sequencer
不需要所有的groups全部凑一起来用一个sequencer
一个group最多会有多少个人聊天?
100个顶天了,随便一台pc都可以轻松搞定
【在 s*******n 的大作中提到】 : 这sequence number听起来很不scale.
|
s*******n 发帖数: 196 | 22 每个group就盯一台server? group 所有的人都去那server?
【在 z****e 的大作中提到】 : 对每一个chat group单独分配一个sequencer : 不需要所有的groups全部凑一起来用一个sequencer : 一个group最多会有多少个人聊天? : 100个顶天了,随便一台pc都可以轻松搞定
|
z****e 发帖数: 54598 | 23 一次chatting一般多少人?
2个吧
同时活跃有5个以上的讨论都算少了
超过5个基本上就是七嘴八舌,最后干脆就单聊了
既然如此,你单独对每个group分配一个node有啥问题?
当然node资源会过剩
那就把n个groups分配到m个nodes里面去,n可能>>m
根据chatting groups做balance
如果真有必要的话,再做replica,确定主node
如果主node挂掉,选一个replica做主node,同时启动一个replica node补上
不过我觉得毫无必要
【在 s*******n 的大作中提到】 : 每个group就盯一台server? group 所有的人都去那server?
|
s*******n 发帖数: 196 | 24 distributed sequence generation不是容易的事
不过对于chat这种app怎么都无所为, 错了重复了问题也不大。
【在 z****e 的大作中提到】 : 一次chatting一般多少人? : 2个吧 : 同时活跃有5个以上的讨论都算少了 : 超过5个基本上就是七嘴八舌,最后干脆就单聊了 : 既然如此,你单独对每个group分配一个node有啥问题? : 当然node资源会过剩 : 那就把n个groups分配到m个nodes里面去,n可能>>m : 根据chatting groups做balance : 如果真有必要的话,再做replica,确定主node : 如果主node挂掉,选一个replica做主node,同时启动一个replica node补上
|