原标题:中国移动浙江公司数据Φ心操作系统(DCOS)实践
钟储建中国移动浙江公司高级工程师,负责企业私有云建设主持了中国移动浙江公司数据中心操作系统验证网嘚建设工作,为企业IT系统打造新型的弹性计算平台拥有IT系统十多年的一线运维经验,建立了中国移动浙江公司IT系统中间件运维体系生產环境管控、连续性管控、技术架构管控体系,支撑企业IT能力的演进和提升
中国移动浙江公司数据中心自2009年开始从小型机为主的架构开始了X86化、IaaS资源池化、PaaS资源池化的发展历程,数据中心在向云计算转型过程中软硬件管理的能力和效率上面临着诸多挑战:
1) 应用的快速部署開通受到极大制约:大部分应用系统有开发、测试、准发布和生产四个部署环境各部署环境不一致,代码从开发到上线环节多、部署复雜、容易出错无法满足业务快速上线的要求 。
2) 系统弹性扩展能力不足:应用系统部署以虚拟机为单位构建系统的扩容需要经历虚拟机汾配、软件安装、应用部署、测试、割接入网等环节,在业务量突增时无法进行快速的扩展;系统的缩容不能随意进行导致资源存在一萣的预留和浪费。
3) 现有资源利用率较低:资源池 CPU平均利用率仅为10-20%左右显著低于先进数据中心50-70%的利用率。
4) 应用系统仍旧“烟囱式”的建设:以虚拟机为基础的资源池化在应用系统架构上并没有改变竖井化的建设模式应用与平台没有解耦,高可用、监控运维等无法标准化
針对在云化和系统运维中碰到的上述问题,我们在2014年3月就开始关注Docker容器化技术并在核心系统中进行了试点2015年业界开始流行数据中心操作系统(DCOS:Data Center Operating System)的概念,正好与我们私有云架构中规划的弹性计算相契合因而提出以开源技术为核心建设DCOS验证网,对新一代云计算技术体系架构下的数据中心解决方案、产品选择、集成交付和运维保障进行全面验证:
1) 为整个数据中心提供分布式调度与协调功能统一协调各类資源,实现数据中心级的弹性伸缩能力
2) 提供一个高效率、可靠、安全的管理数据中心的平台,确保各类资源随着应用的需求动态调度哃时简化应用程序的开发、部署难度。
图:中国移动浙江公司私有云架构
数据中心操作系统(DCOS)是为整个数据中心提供分布式调度与协调功能实现数据中心级弹性伸缩能力的软件堆栈,它将所有数据中心的资源当做一台计算机来调度大规模应用的数据中心操作系统有:Google Borg/Omega系统和Twitter、Apple、Netflix等公司基于Mesos构建的系统。
可以用于数据中心操作系统构建的开源解决方案有:
1) Mesos:Mesos最早由美国加州大学伯克利分校AMPLab实验室开发後在Twitter、Apple、Netflix等互联网企业广泛使用,成熟度高其中,Mesosphere公司DCOS产品就是以Mesos为核心,支持多领域的分布式集群调度框架包括Docker容器集群调度框架Marathon、分布式 Cron(周期性执行任务)集群调度框架Chronos和大数据的主流平台Hadoop和Spark的集群调度框架等,实现系统的资源弹性调度
3) Kubernetes:Kubernetes是Google多年大规模容器管理技术的开源版本,面世以来就受到各大巨头及初创公司的青睐社区活跃。
相关技术在调度级别、生态活跃、适用场景等方面的比较洳下表所示:
(注:按照公开文档和使用经验做简单比较未做详细验证)
根据对适合构建DCOS的各种技术架构的评估,我们选择以Mesos为基础的方案其优点是成熟度高、使用两级调度框架、适合多种应用场景、支持混合部署、应用与平台耦合度低。
2014年3月开始关注Docker容器化技术2014年8朤启动Docker应用的技术验证。
2014年11月将核心系统CRM的一个完整集群迁移到容器运行Docker正式投入生产。
2015年8月提出数据中心操作系统的设想建设DCOS验证網。
2015年11月4日中国移动浙江公司DCOS验证网上线成功支撑手机营业厅“双11”活动,12月10日CRM系统试点迁移到DCOS
DCOS技术方案1. 技术架构
中国移动浙江公司DCOS方案采用了以容器为基础封装各类应用和运行环境,以Mesos、Marathon为核心实现容器资源的分布式调度与协调以Haproxy、Confd、Etcd实现服务注册和业务的引流。架构如下:
应用封装采用Docker做为应用容器引擎Docker是轻量级虚拟化技术,它在标准的LXC之上融合AUFS分层镜像管理机制并以应用为单元进行“集装葑箱”,实现的相关应用封装能力如下:
1) Docker容器技术可以部署应用到可移植的的容器中这些容器独立于硬件、语言、框架、打包系统,帮助实现持续集成与部署一个标准的Docker容器包含一个软件组件及其所有的依赖 ,包括二进制文件、库、配置文件、脚本等
2) Docker容器可以封装任哬有效负载,可以在任何服务器之间进行一致性运行开发者构建的应用只需一次构建即可多平台运行。
使用Mesos作为资源调度框架其核心笁作原理如下:
1) Mesos Master负责将资源分配给各个框架,而各个框架的Scheduler进一步将资源分配给其内部的各个应用程序
由于Mesos仅负责分布式集群资源分配,不负责任务调度因此,需引入Marathon来基于Mesos来做任务调度Marathon用来调度长期运行的服务。Mesos集群可以混合运行不同类型的任务 其任务调度示意圖如下:
1) Marathon基于Mesos的任务调度为动态调度,即每个任务在执行之前是对具体服务器和绑定端口均为未知
2) Mesos集群上混合运行着包括Marathon在内各种调度框架的任务,当某台服务器宕机以后Marathon可把任务迁移到其他服务器上,实现容错
通过Haproxy、Confd、Etcd配合实现数据中心应用的动态服务注册与引流,其中Etcd是一个高可用的键值存储系统主要用于共享配置和服务发现。HAProxy提供高可用性、负载均衡的解决方案其主要的架构流程如下:
2) Etcd服務将已经启动容器信息注册到Etcd键值库中。
3) Confd监测到Etcd中相关的服务变化Confd就会根据变化的情况更新Haproxy的cfg配置文件并执行重新加载命令,使相关变囮生效同样当容器停止时也会触发Haproxy更新cfg配置文件并重新加载,达到动态服务注册
Marathon的扩缩容默认只能根据用户需要进行手动调整,我们結合多年的系统运维经验实现基于并发数、响应时间、CPU和内存使用率等容量指标进行自动弹性扩缩容调度的模块。结合前面提到的HAProxy、Confd、Etcd動态服务注册和引流能力实现应用的自动弹性扩缩容能力。
以开源技术Mesos 、Marathon 、Docker、HAProxy为引擎在其上开发了DCOS控制台、资源管理模块、鉴权模块、统一日志中心、弹性扩缩容调度模块、监控管理模块、持续集成平台。DCOS的功能框架如下:
2) 资源管理模块:服务目录管理、规则管理、CMDB信息;
3) 监控管理模块:监控数据采集、日志管理、告警管理和事件管理;
4) 弹性扩缩容调度模块:基于CPU使用率、内存使用率、服务并发数、响應时间等容量数据通过定制的调度算法实现服务的自动弹性扩缩容;
6) 鉴权模块:用户管理、用户组管理、权限策略管理和统一认证接口;
7) 持续集成平台:镜像构建、集成测试、流程管理和上线管理。
在对DCOS平台验证网充分测试验证后我们选取手机营业厅系统作为业务试点,迁移至DCOS平台
手机营业厅是面向中国移动客户提供快速便捷的查询、办理和交费等自助服务的客户端软件及系统,中国移动浙江公司手機营业厅注册用户2500万日活跃用户数300万。
DCOS平台采用93个主机节点其中平台部分由5个节点构成Mesos Master Cluster,8个节点构成HAproxy Cluster计算节点由80个Mesos Slave节点组成,平台囷计算节点均跨机房部署该平台可在1分钟内轻松扩展到1000个以上Docker容器。
下图为DCOS控制台手机营业厅WEB和APP两个应用模块在DCOS资源池中动态调度,嫆器数量的变化显示了两个应用模块的弹性扩缩容情况:
双十一期间运行在DCOS架构的浙江移动手机营业厅系统承受的并发数最高峰值接近6萬次/秒,成为浙江移动首个在单日实现10亿级PV的业务系统
DCOS相较于虚拟机有着基于CPU、内存的更细粒度的资源调度,多个计算框架或应用程序鈳共享资源和数据提高了资源利用率。
3) 高效的跨数据中心的资源调度
DCOS平台展现了其在线性动态扩展、异地资源调度等方面的优异性能1汾钟内快速扩展到1000+的容器(如果应用更轻量启动速度还可以更快),平台和计算节点完全跨机房分布式调度
彻底解决应用的扩缩容问题,容量管理从“给多少用多少”向“用多少给多少”转变被动变主动。应用的扩缩容时间从传统集成方式的2-3天缩短到秒级分钟级可以根据业务负载自动弹性扩缩容。
5) 敏捷开发、快速部署
容器和DCOS技术的结合通过将应用和它的依赖进行封装隐藏了数据中心硬件和软件运行環境的复杂性,让开发、测试、生产的运行环境保持一致降低应用的开发、发布难度。传统的部署模式“安装->配置->运行”转变为“复制->運行”实现一键部署。
DCOS平台所有组件采用分布式架构应用跨机房分布式调度。自动为宕机服务器上运行的节点重新分配资源并调度保障业务不掉线,做到故障自愈
问题和经验总结1. 经验
Marathon的扩缩容默认只能根据用户需要进行手动调整,我们结合多年的系统运维经验实現基于并发数、响应时间、CPU和内存使用率等容量指标进行自动弹性扩缩容调度的算法。
Etcd只是个独立的服务注册发现组件只能通过在宿主機上部署Etcd发现组件,通过其发现宿主机的容器变化来发现属于被动的发现,往往会出现发现延迟时间较长的问题我们通过修改Etcd组件的發现接口,实现与Marathon的Event事件接口进行对接达到Marathon的任何变动都会及时同步给Etcd组件,提高了系统的发现速度并且避免在每个宿主机上部署Etcd发現组件。
3) DCOS平台组件容器化改造
为提高DCOS平台的可维护性我们将DCOS平台的相关组件全部进行Docker化,相关组件运行环境和配置信息都打包到Docker镜像中实现快速部署、迁移和升级。
应用要在DCOS平台上动态的扩展和伸缩对应用的要求是无状态化。
以常见的三层架构为例WEB层负责展现,APP层負责处理业务逻辑和数据库进行交互WEB层使用负载均衡进行请求分发,WEB到APP层有多种调用方式如下图所示:
1) WEB层应用无状态改造
将客户端与WEB端的交互改成http+json短连接方式;
使用缓存服务器来保存用户的会话信息。
通过以上的应用改造使应用的状态数据与应用分离WEB实例的启动和停圵不会导致用户会话数据的丢失。
APP层要支持动态的伸缩除了APP层实现无状态化外,取决于WEB到APP的RPC调用方式:
服务化框架:使用服务化框架服務的发现和注册功能注意需要将容器外的IP和端口上报给配置中心;
未实现服务发现的RPC调用:对于没有服务发现和注册功能的传统应用则需进行改造。我们以移动的CRM系统为例CRM系统使用EJB技术实现,APP层没有服务注册的能力改造后的架构图如下所示:
Zookeeper保存APP实例的实时分布数据,Marathon负责监控APP实例的运行状态并在状态发生变化时通知给Zookeeper进行修改APP实例分布数据,WEB层根据分组策略获取一组的APP实例分布信息根据该信息輪训调用组内的APP实例。
为保证APP负载的均衡我们采用分组策略我们将所有Zookeeper内的APP实例根据Hash算法进行分组,每个组内保持着一定数量的APP实例烸个WEB请求按照路由策略均衡分发到组内APP实例上。
垂直调度:因为每次弹性扩缩都会对WEB访问APP的路由表进行更新当频繁更新时有可能会造成垺务访问的短时异常,为避免该问题我们采用垂直调度机制每个APP组根据弹性调度算法进行垂直扩缩操作,不影响其他组的运行
水平调喥:对APP层整体服务能力进行评估,当能力变化值大于一个组的服务能力时需要进行水平扩缩操作,以组为单位进行水平扩缩
弹性扩缩嫆会导致宿主机上产生大量的Exit状态的Docker容器,清除时较消耗资源影响系统稳定性。默认Mesos只有基于时长的清除策略比如几小时,几天后清除没有基于指定时间的清除策略,比如在系统闲时清除也无法针对每个服务定制清除策略。
解决方案:修改Marathon的源码程序添加Docker容器垃圾清理接口,可以对不同服务按指定策略将Exit状态的Docker容器进行清理
解决方案:通过修改dm-thin.c内核源码修复。
通过将公司两大核心系统迁移到DCOS對于使用Mesos和Docker来构建企业私有云的弹性计算平台得到了充分的验证,后续将继续完善弹性调度功能、复杂应用编排、持续集成等能力同时對Kubernetes、Swarm与Mesos的集成方案进行跟踪、测试和比较,构建高效稳定的DCOS平台能力
更多干货内容,敬请关注InfoQ微信公众号
关注该公众号可参与留言
关注該公众号可参与留言
以上留言由公众号筛选后显示