一 、 实践背景
1.1 现网生产系统存在的问题
在中国移动内部各省市公司,因为技术迭代、设备更新的原因,设备繁杂,有x86服务器 、VMware虚拟机、OpenStack虚拟机以及不同厂商的物理机(如IBM Power服务器),设备与系统各异,无法整合。在资源充裕的情况下,却面临着机器不够用,资源利用率低的困境。
具体来讲,客户面临的难题有以下几点:
①、机器资源利用率低
数据中心拥有多套业务系统运行,开发、测试到最终的产品发布,每套系统使用独立的服务器或虚拟机用于部署。
②机器管理成本不断攀升
服务器和虚拟机的数量太多难以管理,新服务器和应用的部署时间长,硬件维护需要数天/周的变更管理准备和数小时的维护窗口。
④、应用部署、管理、运维和升级难度大:
应用厂商众多,架构差异较大,应用部署、上线、扩容对资源需求不同,应用生命周期的管理难度大,导致运维成本居高不下。
因此,随着数据中心应用和用户对资源的需求的多样化,需要一个类似“操作系统”的统一资源管理系统来整合与协调各类资源,提升资源复用率,为客户解决现网生产系统存在的问题。
数据中心操作系统(DataCenter Operating System,简称DCOS)是为整个数据中心提供分布式调度与协调功能,实现数据中心级弹性伸缩能力的软件栈(software stack)。主要功能为:
1) 为整个数据中心提供分布式调度与协调功能,统一协调各类资源,实现数据中心级的弹性伸缩能力。
2) 提供一个高效率、可靠、安全的管理数据中心的平台,确保各类资源随着应用的需求动态调度,同时简化应用程序的开发、部署难度。
1.2 DCOS 理解
狭义DCOS:软件定义数据中心的具体实现(特指Mesos),将数据中心中的资源聚合,支持多种计算框架并行运行,提高资源利用率,实现数据中心级弹性伸缩能力,将数据中心抽象为一台巨型计算机供用户使用。
广义数据中心操作系统(DCOS):实现软件定义数据中心概念的软件组合,介于IaaS层与PaaS层,将资源从数据中心扩展到公有云、私有云,实现跨云的弹性伸缩能力,真正实现“小云”聚合成“大云”。
数据中心操作系统旨在提供一个通用的标准化运维系统,高效率可靠安全地管理数据中心,同时简化应用程序的开发、部署难度,协调各类资源,确保各类资源随着应用的需求动态调度。
数据中心操作系统的特征包括弹性伸缩、应用管理、敏捷、高可用等。
图1.1
1.3 DCOS 发展历程
早在十多年前,Google就开始使用第一代集群管理Borg技术管理数据中心。
2009年加州大学伯克利分校AMPLab首先开发出Apache Mesos,这是一款开源集群管理软件,其核心研发成员Benjamin Hindman随后将其引入Twitter,于是Twitter、Facebook、苹果等大型IT企业开始陆续打造结合自身业务特点的基于Mesos的数据中心管理方案。
2012年,围绕Mesos开展商业活动的初创公司Mesosphere诞生。正是该公司提出了基于Mesos的DCOS,希望企业能像使用一台计算机一样使用整个数据中心。Mesos是目前应用最广泛的资源管理系统。
二 、 苏研 DCOS 方案
2.1 技术选型
Mesos由加州大学伯克利分校AMPLab开发,后在Twitter推广使用,被广泛用作数据中心操作系统的kernel。Mesos架构如图2.1所示。Mesos中将任务调度和资源分配相分离。任务调度是Mesos的核心,而调度框架则负责实现具体的任务调度。Mesos架构中包含了Master和Slave节点。Mesos Master负责将资源分配给各个框架(如Hadoop框架),而各个框架的Scheduler进一步将资源分配给各个Mesos Slave节点并通知Mesos Slave执行相关Task任务,Mesos Slave接到通知后根据各个框架的Executor最终执行相关Task任务。
图2.1
Marathon 是一个 mesos 框架,能够支持运行长服务,比如 web 应用 等。是集群的分布式 Init.d,能够原样运行任何 Linux 二进制发布版本, 如 Tomcat Play 等等,可以集群的多进程管理,实现服务的发现,为部 署提供提供 REST API 服务,SSL 与基础认证、配置约束,通过 HAProxy、 DNS 实现服务发现和负载平衡,可定制化监控策略实现 Task(一个 App 对应多个 Task)的自动扩缩 。
2.2 技术架构
以开源技术Mesos 、Marathon 、Docker、HAProxy为基础,在其上开发了DCOS控制台、资源管理模块、鉴权模块、统一日志中心、弹性扩缩容调度模块、监控管理模块、持续集成平台、应用镜像管理模块。DCOS的软件栈与功能模块如下:
Mesos:作为DCOS的核心组件之一,作用相当于Linux内核,管理着数据中心所有的CPU、内存以及储存等物理资源,实现资源的统一管理和分配。
Marathon:作为DCOS基础组件之一,相当于Linux中Iinit/systemd进程,管理DCOS中其他的软件包,实现安装、卸载其他框架和应用的功能。
Haproxy、Etcd、confd:使用ETC的和confd实现DCOS内应用的服务自动注册与发现,配合使用Haproxy作为负载均衡器,实现应用的动态引流和负载均衡。
Kubernetes: Kubernetes是google开源的容器编排系统,现已能够作为Mesos的框架很好地与Mesos融合使用,在苏研的方案中也作为一个可选的组件供用户使用。
大数据服务框架:此外还可以在DCOS运行一些大数据框架如kafka、spark、hadoop,用于大数据的处理与分析;
DCOS Manager Platform:DCOS内核如基础软件MESOS和Marathon对管理员和用户透明,并不直接操作。所有用户通过DCOS Manager Platform进行操作,管理DCOS中所有应用的生命周期和数据中心的运维。这样的设计保证了底层软件的变更不会过多的影响用户的使用习惯。
其他:如chronos,用于批处理任务的执行。
DCOS具有的优势在于:
①、资源整合 ,提高资源利用率;通过Mesos单数据中心物理资源整合成“巨型计算机”;通过Mesos将“小云“整合成”大云”
②、容器化,通过Docker将应用容器化
③、跨数据中心和混合云,通过Mesos实现跨数据中心的PaaS和SaaS
④、跨平台,通过容器镜像(Docker hub)仓库,实现应用的跨平台部署和运行
⑤、容错与扩展,更高效的管理系统,支持应用的横向扩展;如果一台服务器发生故障,它的工作负载可以自动迁移到别的地方
⑥、应用部署便捷、管理高效,利用容器封装,实现多种框架任务之间的隔离。保证应用的快速启动(ms级别),一次打包,到处运行,实现应用的自由迁移。
2.3 应用迁移 改造 实践
应用从状态的角度划分,主要分为:有状态应用与无状态应用。无状态请求是每个请求都是与之前任何请求都无关的独立事务;有状态应用是HTTP协议与session、cookies等状态机制以及其他辅助的机制。
从数据流向的层次划分,可以分为:web前端、中间层、业务逻辑层与数据持久化层。
web server无状态的两种实现:
①、将状态放到请求中或者采用无状态的session,cookies框架,对应用开发有要求
②、将session等集中存储,增加session共享存储层,从而使得Web Server无状态
中间层:绝大多数中间件都不涉及状态
业务层:虽然会去读取session中的状态,但是绝大多数业务层自身都不涉及状态
数据持久化存储:存储本身就是对某种状态的记录,所以可以理解成带有状态的
应用容器化或者应用向DCOS迁移的前提条件是:无状态应用或者是有状态应用的无状态模块。
电渠业务活动系统具备典型的三层架构特征,WEB层及APP层基本采用分布式技术实现,具备进行DCOS平台应用的前提条件,DB层本次暂不予考虑。
目前应用改造的注意点:
①、缓存服务器、数据库等,需要以环境变量的方式传递,而不能写在代码中。
②、应用层级通信时使用服务发现功能,不使用IP
③、docker镜像功能单一、追求极简
④、应用监听端口使用固定端口
⑤、数据存储放在外部
⑥、容器运行进程单一化
三、后期规划
目前DCOS不支持存储容器化方案,需要完成存储容器化功能,并推进弹性调度功能,资源隔离、复杂应用编排等功能。同时对Kubernetes、Swarm与Mesos的集成方案进行跟踪、测试和比较,构建高效稳定的DCOS平台能力。