大家不是说要多准备设计么,来一道google设计面试题目 - 未名空间(mitbbs.com)
如果实现像 facebook 一样的 activity broadcast.
一个朋友 f1 更新一条信息后,他的所有朋友都要看到这条信息。
条件:
1. 朋友数量极大。
2. 有的朋友在线,有的不在线,不在线的登陆后要能看到。
3. 如果储存空间有限,如何处理。
先讨论fan-out和pull两种模式的优劣,比如前者没有availability问题,但是需要大
量随机disk seek操作,朋友数极大可能会产生backlog,就需要考虑各种write优化的
DB,比如Cassandra或者HBase等。后者没有大量随机disk seek问题,但是有
availability问题。
FB在其news feeds中采用的pull模式,找找相关视频、slides过一遍就懂了,看看
services怎么划分,采用了几个模块,节约空间,其中一些交互是用id。
储存空间有限?先问问面试官怎么约束?是内存有限还是硬盘有限?是单机有限还是整
个DC有限。
http://www.tuicool.com/articles/BJRJja
Facebook起源的NewsFeed,以及Twitter起源的Timeline,核心问题都是如何处理巨大的消息(活动,activity)分发。“推Push”和“拉Pull”或者“推拉结合”,是主要的处理方式。
2014.12.8—关于微博的内容分发机制的小调研
Read full article from 大家不是说要多准备设计么,来一道google设计面试题目 - 未名空间(mitbbs.com)
如果实现像 facebook 一样的 activity broadcast.
一个朋友 f1 更新一条信息后,他的所有朋友都要看到这条信息。
条件:
1. 朋友数量极大。
2. 有的朋友在线,有的不在线,不在线的登陆后要能看到。
3. 如果储存空间有限,如何处理。
先讨论fan-out和pull两种模式的优劣,比如前者没有availability问题,但是需要大
量随机disk seek操作,朋友数极大可能会产生backlog,就需要考虑各种write优化的
DB,比如Cassandra或者HBase等。后者没有大量随机disk seek问题,但是有
availability问题。
FB在其news feeds中采用的pull模式,找找相关视频、slides过一遍就懂了,看看
services怎么划分,采用了几个模块,节约空间,其中一些交互是用id。
储存空间有限?先问问面试官怎么约束?是内存有限还是硬盘有限?是单机有限还是整
个DC有限。
http://www.tuicool.com/articles/BJRJja
Facebook起源的NewsFeed,以及Twitter起源的Timeline,核心问题都是如何处理巨大的消息(活动,activity)分发。“推Push”和“拉Pull”或者“推拉结合”,是主要的处理方式。
各大网站都大量使用的Nginx, memcached, MySQL等开源产品,都标配了,文中不再提。实现技术上,异步消息队列的引入,来模块解耦和尖峰削平;Cache的精良设计等,也都是各家大量使用的技能,可看参看文档,不再详述。
推 | Push, fan-out, Write-fanout | 写时消息推送给粉丝。空间换时间 |
拉 | Pull, fan-in, Read-fanout | 读时拉取所有好友的消息,再聚合。时间换空间 |
混合 | Hybrid | 基于推,混入拉;基于拉,加速推。时空平衡 |
Read full article from 大家不是说要多准备设计么,来一道google设计面试题目 - 未名空间(mitbbs.com)