《王宝强离婚事件的洪荒之力,新浪微博怎样靠技术支撑?》要点:
本文介绍了王宝强离婚事件的洪荒之力,新浪微博怎样靠技术支撑?,希望对您有用。如果有疑问,可以联系我们。
在刚过去的8月,奥运会、王宝强事件交织发酵下,新浪微博流量大增,甚至部分服务被短暂打死.这股网民合聚的洪荒之力下,新浪微博是怎样用技术支撑起业务的?
老司机简介
之前微博曾披露过他们已经迁移到基于Docker容器的混合云平台DCP,那对于这样的突发热点,DCP是如何应对的?Docker容器可以进行秒级扩容,那为什么还会有短暂的服务被打死情况发生?DCP整个的弹性伸缩流程是怎么样的?带着这些问题,InfoQ记者采访了微博Container平台弹性伸缩负责人王关胜.
奥运期间热点事件对微博服务的冲击
奥运期间因为王宝强的离婚事件,让微博的流量大增,甚至部分服务被短暂打死.详细情况是怎样的?
王关胜:自16年里约奥运会开幕式开始,微博整体流量增幅明显,相较于往常增长数倍,造成了白天跟日常晚高峰一样的持续峰值场景.更甚的是,奥运期间还有赛事的热点及明星事件的冲击,给微博平台的服务带来数倍于日常峰值的流量请求.
其中在孙杨PK霍顿、奥运网红傅园慧的“洪荒之力”、王宝强事件、女排夺冠等热点中,尤以宝强事件的影响最为巨大.大家可以去看一下宝强发布离婚声明的微博互动数据,非常惊人;再来看看流量数据:
图1:微博,评论及Feed业务量
图2:话题业务量
可以看到,这次事件对微博的核心服务如Feed、评论、话题等带来的压力都是成倍的,已经超过16年春晚,为历史新高点.仔细分析一下,可以发现这种事件基本可以分为:发生期、发酵期、暴涨期、缓解期.
而暴涨期一般都是内部运营部门的push引来爆点,此时对于服务的容量冗余要求极高,虽然DCP已经弹性扩容了大批Container,但Java的服务初启动,会有线程池及连接资源预热的过程,此时会有一点慢的现象,也可以理解为瞬时流量短暂打死.
微博目前用户基数庞大,DAU和MAU均为数亿.从整个技术体系来看,微博核心总体分为端和后端平台,端上主要是PC端,移动端,开放平台以及企业开放平台.后端平台主要是Java编写的各种接口层、服务层、中间件层及存储层.除此之外,微博搜索、推荐、广告、大数据平台也是非常核心的产品.从业务角度看,整体架构图如下:
我们团队主要负责的微博平台的业务与保障,平台在2015年的部署架构如下:
就平台前端来说,每日超过千亿次的API调用、超过万亿的RPC调用,产生的日志就达百T+.对于这么大体量的业务系统,对于运维的要求也很严格;就接口层来说,SLA必须达到4个9,且接口平均响应时间不能高于50ms.因此我们会面临各种各样的挑战.
当时面对这样的突发情况,新浪微博是如何应对的?有哪些是没有考虑的的情况?
王关胜:微博对于服务的稳定性要求很高,在奥运开始前,微博平台已经启动了线上服务保障相关的准备工作,也建立了奥运期间的早晚班值班机制,以防止突发情况出现.在日常的峰值场景中,微博的混合云DCP平台可以做到无人值守的进行服务的弹性伸缩.
从热点事件的业务流量图可以看出:到达爆点之前一般会有发酵期,而我们的容量决策系统会实时的监测业务量变化,根据服务冗余情况决定是否自动伸缩,再根据一定的配比去弹性扩容,
缩容.当宝强事件爆点出来时,DCP已经提前扩容了一批业务container,但是让我们没想到的是业务量来的是如此之快,如此之高,加上瞬间的流量请求对于后端资源的预热,需要一点时间,部分服务出现短暂的超时,我们迅速对于非核心功能启动了无损降级,服务很快恢复.
当然,在应对这种热点事件时,我们已经很娴熟了,都会准备很多的预案,比如降级、限流、切流量等干预手段.
王关胜:微博平台大概14年开始研究Docker,14年底就Docker化了一些服务,并基于内部的基础设施上线了第一版的Docker工具平台,在15年春晚也发挥了作用.
但是这版的工具平台有很大的限制:我们内网的物理机设备冗余比较少,自动扩容的能力有限.基于此,我们开始探索公有云,并于2015年基于公有云的弹性能力加上私有云一起构建混合云DCP.通过与阿里云的合作,微博实现了从提前部署扩容到实时扩容的升级,并能达到10分钟弹性扩容上千节点的能力.
如果要说DCP的优势的话,我觉得最核心的就两点:
首先,微博平台的业务已经完全Docker化,基于Docker的特性,解决了环境差异性问题,使得标准化变得容易.其次,基于公有云,使得我们的服务的弹性能力大大加强,再也不用提前购买服务器,进行漫长的部署过程了.
王关胜:微博混合云平台DCP的核心设计思想,主要是借鉴银行的运作机制,在内部设立一个计算资源共享池外,既然内部私有云的需求,又引入了外部公有云,使其在设备资源的弹性能力大大提升.
而要微博实现高弹性调度资源的混合云架构,其中实现的关键则是Docker.刚开始我们思考该使用裸机还是VM架构,发现如果要采用VM,内部机房架构要进行许多改造,这样成本会更高.
所以,目前微博的内部私有云使用裸机部署,而外部公有云则采用阿里云弹性计算服务(ECS)的VM架构.等平台建设成熟后,还可以应用其他家的公有云,如AWS,在主机之上均采用Docker来持续部署.
目前我们开发的DCP平台,主要包含4层架构:主机层、调度层及业务编排层,最上层则是各业务方系统.底层的混合云基础架构则架Dispatch设了专线,打通微博内部私有云以及阿里云.
主要思想:三驾马车(Machine + Swarm + Compose)
DCP混合云系统的设计理念,总共包含4个核心概念:弹性伸缩、自动化、业务导向以及专门为微博订制.混合云系统必须有弹性调度的运算能力.而DCP混合云系统并不是对外公开的产品化服务,必须以业务需求出发,因此会有包含许多微博定制的功能.
DCP系统最核心的3层架构:主机层、调度适配层及编排层:
主机层的核心是要调度运算资源.目前设计了资源共享池、Buffer资源池,配额管理,及多租户管理机制,借此实现弹性调度资源.
而调度层则通过API,把调度工具用API进行包装,而微博4种常用的调度工具组合包含:原生Docker、Swarm、Mesos及微博自主开发的Dispatch.
最上层的则是负责业务编排及服务发现.目前,微博的后端服务95%是Java环境,而PC端则是使用PHP编写,移动端则是通过调用API服务.这些业务方都将会接入DCP.编排层也包括了大数据工具Hadoop,进行大数据分析的业务场景.
我们知道,对于调度来说,最重要的就是资源管理,Mesos处理这个是最合适不过了,很多公司就专用其做资源管理,比如Netflix写了一个Titan的调度服务,其底层资源管理则是通过Mesos.当然我们的调度组件中,使用最多的还是Swarm、Dispatch.
我们可以看下面这个场景:这也是私有云内部资源流转的最佳实践:
当业务A多余的运算资源导入混合云共享池时,此时流量暴涨的业务C,可从共享池调度业务A的运算资源;峰值事件后,便可以把多余的运算资源归还至共享池.
这层主要根据业务场景模型,通过主机层、调度层的API,创建可编排的任务模型,如集群管理、服务管理、服务池管理、镜像管理、构建管理、负载均衡管理、扩缩容管理等.
从使用角度出发,我们主要划分了集群、服务池、设备Buffer等层次,以IP+Port唯一标识服务.如下图:
其中:在DCP下可以创建多个集群,每个集群为独立平台或产品线,如微博平台、红包飞、手机微博等.集群间相互独立,集群内各自的服务可自由调度,集群外的调度则设置了配额机制.在集群下,可以创建服务池,一般为同一业务的同构服务.主机只有进了集群的Buffer中,才可能被用来部署服务.
DCP对于物理主机的流转,基于资源共享池、Buffer资源池、配额管理,及多租户管理机制,还是非常复杂的,这里我们可以看一下一台物理主机的生命周期(状态流转图)
王关胜:DCP系统最核心的是弹性伸缩,能根据容量情况进行自动的弹性伸缩,以此来解决明显的早晚高峰及热点事件的峰值问题.
DCP第一版时,我们做到了扩缩容的自动化,但未能自动伸缩,需要人的参与,而且也会有几个操作步骤,人本身是懒惰的且是易犯错的,且还会存在人力成本,这还没达到我们的目标,离无人值守还差一段距离,于是,我们又开发了两个模块:
整个自动伸缩框架如下:
其核心的特性:如支持各种调度策略,根据业务流量及服务冗余情况,提供基于时间的调度方式,类似crontab触发机制,Chronos、 Quartz提供可借鉴的任务调度实现机制;支持服务的依赖,A服务依赖B,B在自动弹性扩容时,需扩容好服务B.
这样,整个服务就可以弹性伸缩了.
王关胜:目前微博混合云DCP平台包含很多核心功能,如服务管理、多云对接、镜像市场、弹性调度、弹性扩缩容、服务发现、监控、容量决策等,这些已经可以全部联动,自动的去弹性来做.而应对峰值事件时,对于准备的预案,如降级,切流量这些,还需要人工的参与.
一般而言,面对瞬间高压,系统会采用“降级非核心及周边业务”.那么微博有没有对哪些业务进行降级呢?在突发热点事件的这种情况下,“核心应用”和“周边业务”分别是哪些?微博是否准备的降级策略?
王关胜:首先介绍一下微博的架构,微博主要分为后端和前端;前端主要是各种端(PC端和移动端)以及内部第三方(搜索、推荐、广告等),而后端则是提供各种各样的API,即所谓的微博平台,大部分的业务逻辑及存储资源均在后端部署.
在面对瞬时高压时,由于调用链比较深,当某些依赖业务容量不足时,也可能会采取降级非核心的功能以保证核心服务的正常.像王宝强事件时,也做过针对非核心的无损降级.
文章出处:InfoQ
转载请注明本页网址:
http://www.vephp.com/jiaocheng/4428.html