读《新浪微博如何应对极端峰值下的弹性扩容挑战》有感
这周我们从扩容角度来谈一谈新浪微博,最近新浪微博有时候会出现卡顿现象,当一些具有爆炸性的娱乐新闻或者政治新闻出现时,微博会出现卡顿,所以对弹性扩容的挑战,对微博来说也至关重要。
如何才能快速顺利的应对各种流量峰值呢?首要解决的是如何在十分钟内完成 1000 节点扩容能力。基于混合云弹性调度可伸缩的特性,可以保证成本业务快速迭代的情况下,实现弹性快速的扩缩容。选择混合云是因为安全,具备可扩展性,成本相对较低。还有 Docker、Mesos 等容器新技术使大规模动态调度成为可能。
在说 DCP 之前,我们先来了解一下 Docker。微博业务部署涉及 Java、PHP 等不同的语言,且存在环境差异,如依赖 OS、JDK、Nginx 等操作环境,还涉及依赖脚本、基础环境配置(启动脚本、定时任务)、目录结构等。
一旦数据量来临时,就要统一调配,导致整体的运维和研发效率在环境差异和不同语言下,非常低。这是决定做 Docker 的主要原因。
微博 DCP 技术架构演进
从 2014 年开始,新浪微博做单机容器化和在线 Docker 集群。2015 年,基于 Docker 的思维做弹性调度,服务发现与私有云建设。
2016 年,开始做混合云的部署,当下在做混合云与机器学习的支持,同时混DCP 技术进行开源 OpenDCP:https://github.com/weibocom/opendcp。
混合云 DCP 技术架构:DCP 架构底层私有云采用的是基于 OpenStack,公有云是和阿里云合作。整个架构从上到下分为编排、调度和主机三层。
当流量来临时,主机层通过私有云和公有云的 SDK 进行主机的创建,之后做初始化达到快速上线的目的。初始化主要做运维环境和 Docker 环境的安装。
初始化之后,编程可运行 Docker 环境,在经过容器调度和服务编排之后,会自动被服务发现模块引入流量,进行上线。
当然,整个大的体系还需依赖基础设施,如镜像中心,监控中心和容量评估等。
微博 DCP 的弹性调度:申请主机,经过初始化之后,批量的 Docer 资源已经进入 Docker 调度池了,接下来要做的事情就是对容器进行调度。
弹性调度是混合云 DCP 整个扩容流程的第三步,是重中之重。
新浪微博的诉求是服务池动态跨池缩容、容量评估,多机型署等,所以资源调度框架架构的设计目标是可以实现快速迭代,内网计算资源统一管理调配,公有云上获得计算资源,快速自动化资源调度与应用部署。
当下,对于一些创业公司使用 Docker 相比较难,现在乃至未来,微博要把 DCP 整套技术体系进行开源。
由于微博业务的特殊性带来很大压力,流量成倍增长,短时间内要扩大到超大规模,会带来很多技术问题或难点需要应对。开源是希望可以把这些经验做输出,使得更多人得以借鉴。
本文参考文献:付稳《新浪微博如何应对极端峰值下的弹性扩容挑战?》