3月30日云栖社区在线实时分享顺利结束,本次由微博研发中心技术经理及高级技术专家陈飞分享了微博利用阿里云实现分钟级服务器规模成倍扩容的技术体系,包括Docker与虚机结合的使用经验、网络架构以及负载均衡、缓存架构的跨IDC服务部署的一些经验。本次视频直播的整理文章、视频、幻灯片整理完毕,如下内容。
DCP设计“初心”
图一 DCP设计初心
DCP是微博容器化的混合云弹性调度运维平台,其诞生初衷是以最低成本实现弹性能力。DCP系统对外提供的功能包括集群管理、服务池之间的调度。目前使用DCP系统的业务方涵盖微博的核心业务,主要包括微博平台、红包飞、手机微博等。
DCP最初的设计目标主要有三点:
要具有弹性能力,当时预估在春晚峰值时,需要10分钟16000核,25600GB的计算资源弹性能力;
能够节约成本,设计之时希望2016年春晚的总体成本不超过2015年,且通过阿里云等公有云按需付费模式,未来可大幅降低单位成本;
能提供一个标准的技术平台,拉通不同语言、运行环境差异,向微博各个业务系统提供标准的弹性能力。
DCP混合云架构设计
图二 DCP混合云架构设计原则
当具体去设计这样一个系统架构时,由于涉及到不同的业务方、不同的部门,各个环节协调还是比较复杂的。因此在架构设计时必须遵循几个具体的原则。
在使用公有云时,不仅要单单使用公有云,要将公有云和专有云结合使用,最大程度利用公有云按需付费的特点,降低单位成本,例如在2016年春晚,微博与阿里云合作,在流量峰值到来的前几个小时才部署了相应的公有云资源。同时业务需要在公有云与专有云之间无差异化部署;
服务化,系统各组件之间通过Restful API而不是原来的运维干预方式进行通信。这里要求各组件应具有良好的扩展性,实现机制可插拔;
可伸缩,各系统组件可以根据管理集群的规模,实现自身的自动伸缩。各组件应无状态、无单点。运维操作自动化。
图三 DCP架构分层
DCP架构具体分为四层。第一层是不可变基础设施,Docker的出现很大程度上改变了原有的运维方式,下文将具体介绍在容器化、系统初始化、镜像分发、带宽监控方面的实践经验。第二层主要完成弹性调度,包括业务跨云调度、调度机制的建立、容量评估。在已有基础设施资源前提下,动态合理的分配给各个业务节点。第三层主要完成服务发现,在业务弹性部署后,调用方需要快速发现服务集群分布的节点,通过配置中心、负载均衡、RPC协同快速实现发现机制。第四层主要完成容器编排,包括自动扩容和监控报警。
图四 DCP整体架构
上面这张图是DCP整体架构。架构的最下层是私有云和阿里云的计算资源。各个系统之间通过API相互通信,利用阿里云的Open API动态创建所需的计算节点。再上一层是基础设施管理系统,负责虚机的创建、镜像的分发等服务抽象和实现,对外提供和专有云相同的计算环境。再上一层通过Swarm、Mesos实现了业务容器动态调度框架。最上面一层是业务系统。最左边是一套服务发现框架,该框架是基于Consul集群建立配置中心,实现服务发现机制。
接下来,对各个层的实现进行详细剖析。
不可变基础设施
微博在15年春晚就开始尝试Docker技术,当时目的是让业务与宿主机的运行环境解耦。Docker解决了业务对运行软件的版本、组件需求,将这些依赖关系封装到Docker Image中,统一了私有云、公有云之间及不同业务线之间的交互标准。