摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而现在已拥有1.5亿的活跃用户,系统日传输tweet更多达4亿条,并已完成了以服务为核心的系统架构蜕变。后端
Twitter现在在世界范围内已拥有1.5亿的活跃用户,为了给用户生成timeline(时间轴)需支撑30万QPS,其firehose每秒一样生成22MB数据。整个系统天天传输tweet 4亿条,而且只须要5分钟就可让一条tweet从Lady Gaga手中呈现到她3100万粉丝的屏幕上。当下Twitter系统的规模及强大的吞吐量确实惹人艳羡,然而在出道之初Twitter也只是个奋斗在 RoR上的小站点而已,下面就一览Twitter如何完成从RoR到以服务为核心的系统架构蜕变。浏览器
Twitter系统的一些特性:缓存
1. 当下的Twitter已不知足于Web Ap的现状。Twitter指望成为一组API,驱动世界范围内的移动客户端,成为世界级最大的实时事件链之一。服务器
2. Twitter主导的是消费机制,而不是生产机制。每秒读取timeline的操做就会产生30万次的查询,而每秒的写入请求只有6000左右。网络
3. 离群值,拥有巨量粉丝的个体开始变得广泛,大量粉丝拥有者发送tweet时会由于大量的扩散而变得缓慢。Twitter试图将这个延时控制在5秒内,可是也并不是一直生效,特别是名人们发送tweet以及相互转发变得愈来愈频繁后。这样就致使转发的内容可能比原始内容先一步到达共同粉丝的界面上,这样一来,就高价值用户来讲,Twitter的主要精力必须从写操做转移到读操做上。架构
4. 使用Redis集群处理Home Timeline(首页时间轴,包含了众多关注者的tweet),最大条数为800。app
5. 从你关注的人和你点击的连接,Twitter能够获知一系列关于你的信息。负载均衡
6. 用户最关心的是tweet内容,然而大部分的基础设施却和这些内容不相关。异步
7. 对如此复杂堆栈进行性能追踪所需求的监视和调试系统每每很是复杂,一样旧决策的影响会不时的出现。
1. 1.5亿的用户以及支撑timeline(home及Search)的30万QPS会让最初的具体实现(Naive materialization)变得缓慢。
2. 最初的具体实现由大量选择语句组成,遍布整个Twitter系统,曾今使用后被取缔。
3. 使用一个基于写的扩散方案。在接收到tweet时,系统将作大量的计算以发现tweet须要呈现的用户。这将造就更快、方便的读取,不要对读作任何的计算。因为全部的计算都被安排到写去执行,每秒大约可处理4000个写操做,比读操做要慢一些。
1. Platform Service团队承担起了Twitter核心基础设施的一切事务:
2. Twitter还拥有一个架构团队。负责Twitter的总体架构,维护技术负债列表。
1. 任什么时候刻都有用户在Twitter上发布内容,Twitter的任务就是考虑如何将消息同步发出并呈现到粉丝。
2. 真正的挑战就是实时性约束,目标则是在5秒内将消息发送到粉丝:
3. 两种类型的timeline:user timeline(用户时间轴,即指定用户tweet页)及home timeline
1. 指向timeline,好比Twitter.com及hone_line API。之因此将tweet发送给你,是由于你对其进行了请求。基于Pull的交付:你经过REST API的调用向Twitter请求这些数据。
2. 查询timeline,搜索API。对资料库进行查询,尽量快的返回全部匹配指定查询的tweet。
Push模式
1. Twitter运行了一个巨型的实时事件系统,经过Firehose以每秒22M的速度推送tweet。
2. 用户流链接。TweetDeck及Mac版的Twitter一样经过这种方式驱动。在登陆的时候,Twitter会查看你的社交图,一样也只会推送关注人的消息,重建home timeline,而不是在持久的链接过程当中得到同一个timeline。
3. 查询API,发布一个对tweet的持续查询时,每当有新的tweet发布,而且被认定匹配这个查询,系统会将这条tweet发送给相应的socket。
高等级基于Pull的timeline
高等级的搜索
1. 全部的计算都经过读来解决,这让写更加简洁
2. 当有tweet生成时,Ingester会作相应的语法分析和索引,随后会将其传入Early Bird机器中。Early Bird属于Lucene的修改版本,同时索引都储存在内存中。
3. 在tweet扩散过程当中,它可能会被储存在多个home timeline中,其个数由粉丝的数量决定。然而在Early Bird中,一个tweet只会被存入一个Early Bird机器中(不包括备份)。
4. Blender负责timeline的查询,横跨整个数据中心作集散操做。它对每一个Early Bird作查询,以发现与查询条件匹配的内容。若是你搜索“New York Times”,Blender会查询数据中心的全部分片并返回结果,同时还会作分类、合并及从新排序等。排序的规则基于互动的数据,也就是转发、收藏及评论的数量等。
5. 互动的信息使用写的模式完成,这里会创建一个互动timeline。若是你收藏或者回复一个tweet,将会触发对互动timeline的修改;相似于home timeline,它一样由一系列的互动ID组成,好比收藏ID、评论ID等等。
6. 全部这些信息都被送到Blender。以读的方式进行重算、合并以及分类,返回的结果就是search timeline为你呈现的界面。
7. Discovery是个基于你相关信息的定制搜索,这些信息主要来自你关注的人、打开的连接,而从新排序的规则一样基于这些信息。
Search和Pull是相反的
1. 搜索和pull看起来很是类似,其实他们有着本质上的区别。
2. 在home timeline状况下:
3. 搜索timeline状况:
4. Tweet的内容基本上与大多数的基础设施都是无关的。T-bird存储了全部tweet内容,大部分的tweet内容都是在内存中。若是没有的话,能够经过select查询将其拉回内存。与tweet内容相关的功能很是少,搜索就是其中一个,而Home timeline则彻底不关心。
1. 如何将这条数据的管道打造的更快更有效
2. 在5秒内作到tweet的扩散,可是并非时刻的奏效,特别是愈来愈多的高粉单位。
3. Twitter是非对称的关注,只有你关注人的tweet才会呈现给你。Twitter能够从这些单向关注中获取你更多的信息,有些单向关注一样还影射出一些社会契约。
4. 问题通常发生在大基数的图上:@ladygaga拥有3100万粉丝,@katyperry拥有2800万粉丝,@justinbieber拥有2800万粉丝,@barackobama拥有2300万粉丝。
5. 大批量粉丝的拥有者每发送一条tweet将形成数据中心大量的写入操做,而随着愈来愈多名人之间的交互,挑战变得更加的艰巨。
6. 这些须要扩散给大批量用户的tweet是Twitter最大的挑战,在关注这些名人的共同粉丝中,常常会出现回复tweet比原文更早一步送达的状况。他们在站点中引入竞态条件,好比最近关注Lady Gaga的粉丝可能会比老早以前关注的粉丝早5分钟看到tweet内容。好比说一个用户先收到了tweet,并进行回复,然而这时候Lady Gaga的原微博并无扩散完毕,这样就会存在有些用户先看到回复的状况,为用户形成很大的困扰。Tweet经过ID进行排序,由于他们大多数是单调递增的,然而在如此粉丝规模下,这种作法并不奏效。
7. 寻找读和写途径的合并,再也不作如此大规模的扩散;好比传播Taylor Swift新生成的tweet,取代在生成时进行扩散tweet ID,而是在读取时候就进行合并。经过平衡读写途径,节省百分之几十的资源。
解耦相关
1. 基于Twitter经过各类途径传播tweet,解耦可让不一样技术团队独立完成本身的工做。
2. 基于性能问题,系统也须要解耦。Twitter过去使用的一直是彻底同步模式,而在两年前由于性能问题他们停用了这个模式。设备接收一个tweet须要145毫秒,接收完毕后就断开全部客户端链接,这么作一样也由于技术负债。写的路径由Ruby驱动,经过MRI实现,一个单线程服务器,每次Unicorn worker分配都会耗尽全部处理性能。每当有tweet流入,Ruby就会接收它,将它放到一个队列中而后断开连接。他们在每台服务器上只运行45-48个进程,这样的话每一个机箱能同时处理的tweet数量也是这么多,因此他们必须尽量快的断开链接。
3. 当下的tweet已经经过异步模式来处理,而这些讨论也都是创建在异步之上。
监视相关
1. 系统性能实时仪表盘
2. 使用VIZ系统监视每一个集群,请求Timeline Service并从Scala集群获取数据的平均时间为5毫秒。
3. 基于Google Dapper系统的Zipkin,工程师能够经过Zipkin对请求的细节进行监视,好比获取请求所访问的服务及请求时间,这样就能够获知每一个请求的性能细节。这样就能够经过每一个阶段耗费的时间对系统进行调试,一样也能够从整体上看从请求到交付耗费的时间。花费了两年的时间,Twitter将活跃用户的timeline降到2毫秒。
部分统计数据:
原文连接: The Architecture Twitter Uses to Deal with 150M Active Users, 300K QPS, a 22 MB/S Firehose, and Send Tweets in Under 5 Seconds (编译/仲浩 审校/周小璐)
欢迎关注 @CSDN云计算微博,了解更多云信息。
本文为CSDN编译整理,未经容许不得转载,如需转载请联系market#csdn.net(#换成@)