中移苏研DCOS实践之路完整篇
一、实践背景
1.1现网生产系统存在的问题
在中国移动内部各省市公司,由于技术迭代、设备更新的原因,设备繁杂,有x86server 、VMware虚拟机、OpenStack虚拟机以及不同厂商的物理机(如IBM Powerserver),设备与系统各异,无法整合。
在资源充裕的情况下,却面临着机器不够用。资源利用率低的困境。
详细来讲,客户面临的难题有下面几点:
①、机器资源利用率低
数据中心拥有多套业务系统执行,开发、測试到终于的产品公布。每套系统使用独立的server或虚拟机用于部署。
②机器管理成本不断攀升
server和虚拟机的数量太多难以管理,新server和应用的部署时间长,硬件维护须要数天/周的变更管理准备和数小时的维护窗体。
④、应用部署、管理、运维和升级难度大:
应用厂商众多。架构差异较大。应用部署、上线、扩容对资源需求不同,应用生命周期的管理难度大,导致运维成本居高不下。
因此,随着数据中心应用和用户对资源的需求的多样化,须要一个相似“操作系统”的统一资源管理系统来整合与协调各类资源。提升资源复用率,为客户解决现网生产系统存在的问题。
数据中心操作系统(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)仓库。实现应用的跨平台部署和执行
⑤、容错与扩展,更高效的管理系统,支持应用的横向扩展;假设一台server发生问题。它的工作负载能够自己主动迁移到别的地方
⑥、应用部署便捷、管理高效,利用容器封装。实现多种框架任务之间的隔离。保证应用的高速启动(ms级别),一次打包,到处执行。实现应用的自由迁移。
2.3 应用迁移改造实践
应用从状态的角度划分,主要分为:有状态应用与无状态应用。无状态请求是每一个请求都是与之前不论什么请求都无关的独立事务;有状态应用是HTTP协议与session、cookies等状态机制以及其它辅助的机制。
从数据流向的层次划分,能够分为:web前端、中间层、业务逻辑层与数据持久化层。
web server无状态的两种实现:
①、将状态放到请求中或者採用无状态的session,cookies框架,相应用开发有要求
②、将session等集中存储,添加session共享存储层,从而使得Web Server无状态
中间层:绝大多数中间件都不涉及状态
业务层:尽管会去读取session中的状态。可是绝大多数业务层自身都不涉及状态
数据持久化存储:存储本身就是对某种状态的记录,所以能够理解成带有状态的
应用容器化或者应用向DCOS迁移的前提条件是:无状态应用或者是有状态应用的无状态模块。
电渠业务活动系统具备典型的三层架构特征。WEB层及APP层基本採用分布式技术实现,具备进行DCOS平台应用的前提条件。DB层本次暂不予考虑。

眼下应用改造的注意点:
①、缓存server、数据库等,须要以环境变量的方式传递,而不能写在代码中。
②、应用层级通信时使用服务发现功能,不使用IP
③、docker镜像功能单一、追求极简
④、应用监听port使用固定port
⑤、数据存储放在外部
⑥、容器执行进程单一化
三、后期规划
眼下DCOS不支持存储容器化方案,须要完毕存储容器化功能,并推进弹性调度功能,资源隔离、复杂应用编排等功能。
同一时候对Kubernetes、Swarm与Mesos的集成方案进行跟踪、測试和比較,构建高效稳定的DCOS平台能力。
本文作者:中移苏研-邹能人、曹高晋
假设想了解很多其它苏研DCOS相关的信息,请关注微信!

中移苏研DCOS实践之路完整篇的更多相关文章
- 软件性能测试分析与调优实践之路-Web中间件的性能分析与调优总结
本文主要阐述软件性能测试中的一些调优思想和技术,节选自作者新书<软件性能测试分析与调优实践之路>部分章节归纳. 在国内互联网公司中,Web中间件用的最多的就是Apache和Nginx这两款 ...
- 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况
近几年容器相关的技术大行其道,容器.docker.k8s.mesos.service mesh.serverless等名词相信大家多少都有听过,国内互联网公司无一不接触和使用相关技术. 健康之路早在2 ...
- 软件性能测试分析与调优实践之路-Java应用程序的性能分析与调优-手稿节选
Java编程语言自从诞生起,就成为了一门非常流行的编程语言,覆盖了互联网.安卓应用.后端应用.大数据等很多技术领域,因此Java应用程序的性能分析和调优也是一门非常重要的课题.Java应用程序的性能直 ...
- webp图片实践之路
最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...
- 《程序设计语言——实践之路》【PDF】下载
程序设计语言--实践之路>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 本书在美国大学已有使用了十余年,目前被欧 ...
- 《程序设计语言——实践之路(英文第三版)》【PDF】下载
<程序设计语言--实践之路(英文第三版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382234 内容简介 <程序设计语 ...
- 《程序设计语言——实践之路【PDF】下载
<程序设计语言--实践之路[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 <程序设计语言--实践之路(第3版 ...
- WebP 图片实践之路
我们会从三部分来聊聊webp这个话题. 什么是webp,它有什么用? 使用webp的常规方法以及优劣. 我们是如何用上webp的. PS:如果是对webp有一定了解的朋友,建议直接看第三部分.因为是讲 ...
- webp图片实践之路(转载)
最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...
随机推荐
- Asp.Net MVC part1
路由简介在Global中注册了路由数据包括:默认Controller,默认Action,请求地址匹配路由规则 约定大于配置为了尽量少的配置,于是将常用的配置作为默认约定,如果不同则进行少量配置主要从存 ...
- 推荐一些不错的开源免费易上手的web前端框架
1. bui 2.Semantic UI 3.oniui
- Firefox中好用的几个快捷键
对于一些经常用FF(firefox)上网的朋友来说, 怎样加快上网的操作速度呢, 使用Firefox快捷键是很好的方法. 本人也经常遇到一些Firefox的很好的快捷键,现在我来告诉大家Firefox ...
- 【java】递归统计本地磁盘所有文件,提取重复文件,JDK8 map迭代
package com.sxd.createDao; import java.io.File; import java.time.LocalDateTime; import java.util.Has ...
- [web] Get和Post区别,EncType提交数据的格式详解
转载自:http://www.cnblogs.com/sunxucool/archive/2012/12/11/2813113.html 1. get是从服务器上获取数据,post是向服务器传送数据. ...
- 配置SSH单向无密码访问
服务器架构:系统:CentOS 6.5 x64主控端A:192.168.0.150远端主机B:192.168.0.151 原理: 利用ssh key生成公钥.私钥,密钥相当于一把钥匙,而公钥就相当于一 ...
- Solr报错Index locked for write for core '***'. Solr now longer supports forceful unlocking via 'unlockOnStartup'
unlockOnStartup 告知 Solr 忽略在多线程环境中用来保护索引的锁定机制.在某些情况下,索引可能会由于不正确的关机或其他错误而一直处于锁定,这就妨碍了添加和更新.将其设置为 true ...
- ASP.NET MVC之单元测试分分钟的事
一.为什么要进行单元测试? 大部分开发者都有个习惯(包括本人在内),常常不喜欢去做单元测试.因为我们对自己写的程序总是盲目自信,或者存在侥幸心理每次运行通过后就直接扔给测试组的妹子们了.结果妹子一测, ...
- 微信小程序bindtap和catchtap区别
bindtap可以产生冒泡事件 catchtap只自身触发事件,不会传递到父视图 文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing 欢迎关注 ...
- 利用Json_encode解决中文问题
利用Json_encode解决中文问题 public function return_json($data=array()){ echo json_encode($data ...