首页 运维干货王宝强离婚事件的洪荒之力,新浪微博怎样靠技术支撑?

王宝强离婚事件的洪荒之力,新浪微博怎样靠技术支撑?

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

新浪微博

在刚过去的8月,奥运会、王宝强事件交织发酵下,新浪微博流量大增,甚至部分服务被短暂打死。这股网民合聚的洪荒之力下,新浪微博是怎样用技术支撑起业务的?

老司机简介

王关胜现任微博产品资深运维架构师,负责微博平台的技术保障工作,7年大并发高可用分布式系统运维经验,对整个运维体系,技术保障方面研究比较深入,尤其是自动化运维方面。2014年起专注于DevOps、Container领域,推进Docker在微博平台的落地,并基于公有云构建混合云系统,具备分钟级弹性扩容千节点能力。
前言8月14日凌晨时分,演员王宝强突然在微博上发出离婚声明,直指妻子马蓉出轨经纪人,并宣布解除与马蓉的婚姻关系。该消息发出后,迅速成为热点话题,在微博上炸开了锅。据小道消息称,在这次的热点事件中,微博流量相较于往常的热点,增长了数倍,甚至在话题高峰期,有部分服务被短暂打死。

之前微博曾披露过他们已经迁移到基于Docker容器的混合云平台DCP,那对于这样的突发热点,DCP是如何应对的?Docker容器可以进行秒级扩容,那为什么还会有短暂的服务被打死情况发生?DCP整个的弹性伸缩流程是怎么样的?带着这些问题,InfoQ记者采访了微博Container平台弹性伸缩负责人王关胜。

奥运期间热点事件对微博服务的冲击

奥运期间因为王宝强的离婚事件,让微博的流量大增,甚至部分服务被短暂打死。详细情况是怎样的?

王关胜:自16年里约奥运会开幕式开始,微博整体流量增幅明显,相较于往常增长数倍,造成了白天跟日常晚高峰一样的持续峰值场景。更甚的是,奥运期间还有赛事的热点及明星事件的冲击,给微博平台的服务带来数倍于日常峰值的流量请求。

其中在孙杨PK霍顿、奥运网红傅园慧的“洪荒之力”、王宝强事件、女排夺冠等热点中,尤以宝强事件的影响最为巨大。大家可以去看一下宝强发布离婚声明的微博互动数据,非常惊人;再来看看流量数据:

技术支撑

图1:微博,评论及Feed业务量

3

图2:话题业务量

可以看到,这次事件对微博的核心服务如Feed、评论、话题等带来的压力都是成倍的,已经超过16年春晚,为历史新高点。仔细分析一下,可以发现这种事件基本可以分为:发生期、发酵期、暴涨期、缓解期。

而暴涨期一般都是内部运营部门的push引来爆点,此时对于服务的容量冗余要求极高,虽然DCP已经弹性扩容了大批Container,但Java的服务初启动,会有线程池及连接资源预热的过程,此时会有一点慢的现象,也可以理解为瞬时流量短暂打死。

微博目前用户基数庞大,DAU和MAU均为数亿。从整个技术体系来看,微博核心总体分为端和后端平台,端上主要是PC端,移动端,开放平台以及企业开放平台。后端平台主要是Java编写的各种接口层、服务层、中间件层及存储层。除此之外,微博搜索、推荐、广告、大数据平台也是非常核心的产品。从业务角度看,整体架构图如下:

4

我们团队主要负责的微博平台的业务与保障,平台在2015年的部署架构如下:

5

就平台前端来说,每日超过千亿次的API调用、超过万亿的RPC调用,产生的日志就达百T+。对于这么大体量的业务系统,对于运维的要求也很严格;就接口层来说,SLA必须达到4个9,且接口平均响应时间不能高于50ms。因此我们会面临各种各样的挑战。

如何应对这种突发情况?

当时面对这样的突发情况,新浪微博是如何应对的?有哪些是没有考虑的的情况?

王关胜:微博对于服务的稳定性要求很高,在奥运开始前,微博平台已经启动了线上服务保障相关的准备工作,也建立了奥运期间的早晚班值班机制,以防止突发情况出现。在日常的峰值场景中,微博的混合云DCP平台可以做到无人值守的进行服务的弹性伸缩。

从热点事件的业务流量图可以看出:到达爆点之前一般会有发酵期,而我们的容量决策系统会实时的监测业务量变化,根据服务冗余情况决定是否自动伸缩,再根据一定的配比去弹性扩容,

缩容。当宝强事件爆点出来时,DCP已经提前扩容了一批业务container,但是让我们没想到的是业务量来的是如此之快,如此之高,加上瞬间的流量请求对于后端资源的预热,需要一点时间,部分服务出现短暂的超时,我们迅速对于非核心功能启动了无损降级,服务很快恢复。

当然,在应对这种热点事件时,我们已经很娴熟了,都会准备很多的预案,比如降级、限流、切流量等干预手段。

基于Docker的混合云平台DCP优势在哪? 

王关胜:微博平台大概14年开始研究Docker,14年底就Docker化了一些服务,并基于内部的基础设施上线了第一版的Docker工具平台,在15年春晚也发挥了作用。

但是这版的工具平台有很大的限制:我们内网的物理机设备冗余比较少,自动扩容的能力有限。基于此,我们开始探索公有云,并于2015年基于公有云的弹性能力加上私有云一起构建混合云DCP。通过与阿里云的合作,微博实现了从提前部署扩容到实时扩容的升级,并能达到10分钟弹性扩容上千节点的能力。

如果要说DCP的优势的话,我觉得最核心的就两点:

首先,微博平台的业务已经完全Docker化,基于Docker的特性,解决了环境差异性问题,使得标准化变得容易。其次,基于公有云,使得我们的服务的弹性能力大大加强,再也不用提前购买服务器,进行漫长的部署过程了。

DCP的核心设计思路 

王关胜:微博混合云平台DCP的核心设计思想,主要是借鉴银行的运作机制,在内部设立一个计算资源共享池外,既然内部私有云的需求,又引入了外部公有云,使其在设备资源的弹性能力大大提升。

而要微博实现高弹性调度资源的混合云架构,其中实现的关键则是Docker。刚开始我们思考该使用裸机还是VM架构,发现如果要采用VM,内部机房架构要进行许多改造,这样成本会更高。

所以,目前微博的内部私有云使用裸机部署,而外部公有云则采用阿里云弹性计算服务(ECS)的VM架构。等平台建设成熟后,还可以应用其他家的公有云,如AWS,在主机之上均采用Docker来持续部署。

目前我们开发的DCP平台,主要包含4层架构:主机层、调度层及业务编排层,最上层则是各业务方系统。底层的混合云基础架构则架Dispatch设了专线,打通微博内部私有云以及阿里云。

主要思想:三驾马车(Machine + Swarm + Compose)

6

DCP混合云系统的设计理念,总共包含4个核心概念:弹性伸缩、自动化、业务导向以及专门为微博订制。混合云系统必须有弹性调度的运算能力。而DCP混合云系统并不是对外公开的产品化服务,必须以业务需求出发,因此会有包含许多微博定制的功能。

DCP系统最核心的3层架构:主机层、调度适配层及编排层:

1) 主机层

主机层的核心是要调度运算资源。目前设计了资源共享池、Buffer资源池,配额管理,及多租户管理机制,借此实现弹性调度资源。

2)调度层:

而调度层则通过API,把调度工具用API进行包装,而微博4种常用的调度工具组合包含:原生Docker、Swarm、Mesos及微博自主开发的Dispatch。

最上层的则是负责业务编排及服务发现。目前,微博的后端服务95%是Java环境,而PC端则是使用PHP编写,移动端则是通过调用API服务。这些业务方都将会接入DCP。编排层也包括了大数据工具Hadoop,进行大数据分析的业务场景。

我们知道,对于调度来说,最重要的就是资源管理,Mesos处理这个是最合适不过了,很多公司就专用其做资源管理,比如Netflix写了一个Titan的调度服务,其底层资源管理则是通过Mesos。当然我们的调度组件中,使用最多的还是Swarm、Dispatch.

我们可以看下面这个场景:这也是私有云内部资源流转的最佳实践:

7

当业务A多余的运算资源导入混合云共享池时,此时流量暴涨的业务C,可从共享池调度业务A的运算资源;峰值事件后,便可以把多余的运算资源归还至共享池。

3)业务编排层

这层主要根据业务场景模型,通过主机层、调度层的API,创建可编排的任务模型,如集群管理、服务管理、服务池管理、镜像管理、构建管理、负载均衡管理、扩缩容管理等。

从使用角度出发,我们主要划分了集群、服务池、设备Buffer等层次,以IP+Port唯一标识服务。如下图:

阿里云

其中:在DCP下可以创建多个集群,每个集群为独立平台或产品线,如微博平台、红包飞、手机微博等。集群间相互独立,集群内各自的服务可自由调度,集群外的调度则设置了配额机制。在集群下,可以创建服务池,一般为同一业务的同构服务。主机只有进了集群的Buffer中,才可能被用来部署服务。

DCP对于物理主机的流转,基于资源共享池、Buffer资源池、配额管理,及多租户管理机制,还是非常复杂的,这里我们可以看一下一台物理主机的生命周期(状态流转图)

9

DCP的弹性伸缩流程 

王关胜:DCP系统最核心的是弹性伸缩,能根据容量情况进行自动的弹性伸缩,以此来解决明显的早晚高峰及热点事件的峰值问题。

DCP第一版时,我们做到了扩缩容的自动化,但未能自动伸缩,需要人的参与,而且也会有几个操作步骤,人本身是懒惰的且是易犯错的,且还会存在人力成本,这还没达到我们的目标,离无人值守还差一段距离,于是,我们又开发了两个模块:

  • 容量决策系统:可以每周在线压测服务,评估出每个服务的容量数据,以供决策;
  • 调度框架:在任务之上,采用基于时间段的调度策略,在业务访问低峰时执行缩容策略, 高峰来临前执行扩容策略。

整个自动伸缩框架如下:

10

其核心的特性:如支持各种调度策略,根据业务流量及服务冗余情况,提供基于时间的调度方式,类似crontab触发机制,Chronos、 Quartz提供可借鉴的任务调度实现机制;支持服务的依赖,A服务依赖B,B在自动弹性扩容时,需扩容好服务B。

这样,整个服务就可以弹性伸缩了。

哪些环节需要人工参与? 

王关胜:目前微博混合云DCP平台包含很多核心功能,如服务管理、多云对接、镜像市场、弹性调度、弹性扩缩容、服务发现、监控、容量决策等,这些已经可以全部联动,自动的去弹性来做。而应对峰值事件时,对于准备的预案,如降级,切流量这些,还需要人工的参与。

面对瞬间高压,怎样做降级? 

一般而言,面对瞬间高压,系统会采用“降级非核心及周边业务”。那么微博有没有对哪些业务进行降级呢?在突发热点事件的这种情况下,“核心应用”和“周边业务”分别是哪些?微博是否准备的降级策略?

王关胜:首先介绍一下微博的架构,微博主要分为后端和前端;前端主要是各种端(PC端和移动端)以及内部第三方(搜索、推荐、广告等),而后端则是提供各种各样的API,即所谓的微博平台,大部分的业务逻辑及存储资源均在后端部署。

在面对瞬时高压时,由于调用链比较深,当某些依赖业务容量不足时,也可能会采取降级非核心的功能以保证核心服务的正常。像王宝强事件时,也做过针对非核心的无损降级。

文章出处:InfoQ

本文链接:https://www.yunweipai.com/9411.html

网友评论comments

发表回复

您的电子邮箱地址不会被公开。

暂无评论

Copyright © 2012-2022 YUNWEIPAI.COM - 运维派 京ICP备16064699号-6
扫二维码
扫二维码
返回顶部