系统设计- 怎么简单设计一个twitter?

那么我们nail down 三个最为重要的社交网络的features:

  1. tweeting: 指的就是user可以发出自己的tweets并且follower可以看的到

  2. timeline:
    主要分为两种
    usertime: take all your tweets then rank it
    hometime: line tweets from users you follow take all then rank with cron expression

  3. following
    user可以选择follow什么人

一个比较简单的 solution类似于我们在解决算法的问题时的brutal force solution:

使用一个relational database:

两个table来做query

user table : 3 columes ID name followers

tweets table: 3 columes ID content user

这就是一个最简单的one to many mapping for tweets

So when displaying home timeline it would cause scan through the whole big tweets table and cause the refreshing really slow.

很明显,这并不是一个很好的解法

那么我们继续思考,找出twitter这个系统中的最需要关注的内容:

Focus: make home timeline really fast. we are caring more about reliability than consistency in extremely small time space. which leads to eventual consistency is what we care about.

那么我们最关注的就是eventual consistency 还有就是系统总体的稳定性。

这个时候为了解决query的速度太慢的问题,我们自然地想到in memory database redis。

考虑到cost的问题

Redis only store active users for last few days or weeks

根据上面的考虑我们提出一个proposal:

image

我们看一下整个tweets的流程:

  1. 阿曼达push了一条tweets
  2. 她的notification send到了load balancer
  3. load balancer将她的这条tweets通过一个database找到她的follower,并且update了相关follower的pre-calculated的in memory home timeline。
  4. 当bob refresh他的timeline的时候正好能够看到in memory的所有结果,非常的快

我们再从Bob的角度来看一下他refresh的过程:

image
  1. Bob refresh home page
  2. 浏览器send http request to load balancer
  3. 直接从redis里面拿到之前pre-calculated好的bob following的状态,整个过程只需要一秒不到

可能遇到一个大问题:

如果这个时候有大V发文了怎么办,比如说特朗普。

一个简答的解决方法就是,我们不去提前更新所有粉丝的timeline,而是把一个特定数量级别的大v的状态在发布之后插入到他的follower的home timeline里面,这样的话不需要再redis里面备份三次,并且占用很多的in memory 内存。

最后我们回顾一下思考的过程和关注的重点:

tradeoffs:

fast reads : from redis

evental consistency

内存的花费大:sacrifice memory for fast response. Mainly consist of characters so its alright,文字信息存量不是很大,并且我们只存活跃用户的tweets

如何找到三个对应的redis cluster:Hash map look up for bob find the 3 redis machine.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351