读《微博春晚背后的技术故事》笔记
今天读了“微博春晚背后的技术故事”,深受教育。一直觉得像淘宝、腾讯、百度、新浪这些公司的技术很高深,也很神秘。一直觉得自己用的技术是跟他们肯定不一样的,肯定是低端的技术,他们用的是高端的。其实相反,他们用的都是一些我们常用的技术,只不过他们用的更精,用的更深,用的更好。其实想想也对,这些开源的,或是流行的技术是受到了多少考验。只要用的好,高难的问题往往都是可以解决的。
文章讲述了在应对春节可能带来的挑战,微博做了哪一些准备。
背景:春节期间,微博的在线人数是平时的好几倍,发表量也是数倍增长,并发发表量倍增。
方法:
1、为应对访问量的剧增,在现有的服务下进行压力测试,确认现在有的服务可以承受多大的压力,从而决定需要扩充多少的服务器。在访问量比较少的时候,按10%,20%...的比例把部分服务池里的服务器503处理,然后观察服务器压力。假设有300台服务器,关掉200台之后,服务器接近负载极限的。这样就可以计算出300台服务器可以承受现有流量3倍的流量。
2、为应对同时几万条/s的写操作,需要测试队列机的抗压能力。微博是采用异步消息队列的方法来写入数据的,于是在设计上先把消息队列进行拆分,分为短和长两种消息队列,512字节以内的微博进入短消息队列,反之进入长消息队列。由于消息越少,处理读写越快,而因为大部分消息都是低于512个字节的(99%),这样就使得长的信息不会阻塞短信息的处理,提高并发和读写效率。
除了分队列,还对队列机进行测试,先把队列机关闭,让消息阻塞在队列里,等累积到一定的量,再把队列机开启,观察队列机的性能瓶颈。
3、通过TouchStone的压测系统(新浪微博开发),对系统进行全面的压测,保证系统的稳定性。主要是对所有的依赖接口和服务进行压力测试。
4、核心系统与非核心系统分离,当出现问题时,非核心系统不会影响核心系统。比如发微博和刷feed是核心系统,而点赞和评论为非核心系统,进行分离。
5、异地容错处理,机器由于天气或是人为原因可能宕机,如果你把所有的服务部署在同一个机房里,当这个机房出问题时,那么完蛋,所有业务都无法工作。所以像银行一样,需要两地三中心的处理方式。把服务器部署到多个地方,当一个机房出问题时,通过 dns切换把这部分用户引到其他机房去。
6、实时监控,新浪基于实时流处理系统 Storm 开发了一套监控系统——dashboard,实时监控feed的访问量、微博的发表量、队列机的处理性能,消息队列的堆积量等指标。