@gaoxiaoyunwei2017
2018-05-08T13:55:04.000000Z
字数 4472
阅读 568
豆沙包
作者简介
张乾
Mesosphere资深软件工程师
相信不少人听说或使用过Mesos,Mesos是Apache基金会下顶级开源项目,发起与加州大学伯克里分校的AMP实验室,这是非常牛的实验室,出过非常重要的开源项目。
Mesos是能将多台机器的CPU、内存、磁盘以及各种计算资源抽象并管理起来,把计算资源提供给上层计算框架,让计算框架使用计算资源来创建任意类型的任务。
所谓的计算框架包括很多种,比如说Spark就是可以运行在Mesos上的运算框架,还有Jenkins,大家听到过跟微服务,跟持续开发相关的计算框架、应用程序都能在Mesos上运行。Mesosphere是支持并维护Mesos的商业公司,我们基于Mesos的开源项目做了一些商业化的产品。
Mesos的主要功能有如下几点:
Mesos在业界的应用有近百家公司/组织正在使用Mesos,推特有在使用它,国外挺多公司使用它。国内的话,今日头条、小米、爱奇艺、三大运营商、中石油、中石化都在使用Mesos。有超过20个计算框架运行在Mesos之上,它们能执行如下四种计算任务,第一种是长任务,第二种是大数据,第三种是Bach job,第四种是Data Storage。
Mesos可运行在各种主流计算平台之上,首先可以在公有云上运行,你本身没有自己的数据中心的话,你可以在公有云上运行。你也可以搭建自己的私有云去运行也没有问题。你的物理机无论在哪里,你的虚拟机无论在哪里,都可以安装试用Mesos。我们主要支持X86,IBM大机也可以支持。
Mesos架构主要分了三层:
总的来说,最底层把计算节点报上来,然后在第二层的Mesos把资源汇总并抽象起来,再上报给上层的计算框架,拿到计算资源后,把它们作为计算资源,执行相应的任务,这些任务包括多种任务,比如长任务、短任务、做视频转码的任务都可以,这些任务被计算框架发给Mesos的管理节点,就是所谓Mesos Master,再下发给计算节点,通过容器化的方式创建起来,这是基本的流程。
通过上图可以看到虚拟机和容器的比较,容器和虚拟机少了一些层级,这就带来一些优势。
最底下的基础架构层是一样的,这是必须要有的一层。你必须要有主机的操作系统,再往上就有区别了。虚拟机的叫Hypervisor,容器的是Docker Engine。容器引擎现在不止Docker一种了,Mesos自己也有做,开源社区里其他团队也在做其他容器引擎。从第三层开始有一些差异了,再往上就是最重要的差异,如果是虚拟机,虚拟机本身自带一个操作系统,就是所谓的Guest OS,这跟Host OS相区分。在操作系统之上有一些工具,比如Linux有基本的东西,再往上是基于库和工具构建自己的APP。
我们看右边的图,容器没有自己的操作系统,是直接共享主机带来的操作系统,它有自己的库和工具,但是这些东西在运行的时候不会有自己专有的操作系统,这会带来很多好处:
有更少的系统消耗和更快的启动速度,基于主机的操作系统启动应用程序就可以了,所以速度更快。
单台服务器可运行成百上千个容器。
打包一次,四处部署。你把容器作为镜像文件打包出来,能支持各个物理机的平台上启动,启动后运行环境跟打包时的环境完全一致。
容器实现的核心技术
容器实现的核心技术跟虚拟机有非常大的不同,虚拟机基本上是通过硬件+速度和软件模拟出来软件的系统,然后再装一个操作系统。而容器没有这些了,容器用到三个技术,第一是Cgroups,它用来做资源限定的;第二是Namespace,是用来资源隔离,容器可以有自己的网络协议站,可以有自己的挂载空间、用户空间,这些所有东西都有一套独立于物理机的东西;第三是Layer-basedFS,这是镜像文件共享了。
容器的本质
容器的本质就是一个或一组使用了Cgroups做资源限定,使用了Namespace做资源隔离,并且使用了镜像文件做根文件系统的进程。在虚拟机进行Sleep1000秒,在容器上是不可能看到1000秒,只能在虚拟机上看到。这是两者非常大的区别,也来自于虚拟机有自己的操作系统。
Mesos对容器的支持大家可以看一下这个图。
核心组件:containerizer
每个Mesos Agents有一个主件叫Containerizer ,在计算节点上有多个容器,都是由Container组建出来。containerizer位于Mesos Agents和Container之间。在计算节点上有多个容器,都是由containerizer组件创建出来的。
Docker Containerizer和Mesos Containerizer
目前来说,Mesos支持的containerizer是有两个实例,一个是Docker Containerizer,一个是Mesos Containerizer。
Docker Containerizer是用来跟Docker的容器引擎做对接,它在创建容器的时候是调Docker的API,让Docker创建一个Docker容器出来,等于是把Docker做了一个分装。Docker在存储和网络有自己的解决方案,也有自己的一套标准。
Mesos Containerizer是完全独立自主实现的容器引擎,跟Docker没有任何关系,你可以在一个计算节点上,如果没有完全装Docker的任何东西,也可以创建管理容器,只要使用Mesos Containerizer就可以了。Mesos Containerizer的稳定性非常高。
看一下企业级软件系统的演进,上世纪70年代的时候是大机横行的时代,是IBM的大型机,配置非常高,大型的企业会买这套系统运行自己的应用程序,都是单机的。到了八九十年代的时候,X86系统成熟了,这时候已经有一点点集群的概念,从单个大型的主机变成多个X86的物理机。90年代,虚拟化技术比较成熟,就到了虚拟机时代,这是虚拟机和物理机并存的时代,运行的数量更多。到了最近五年,从虚拟机、物理机并存时代,加入了微服务,有四个特点:微服务架构非常流行;容器的这种方式非常流行;大数据应用非常多;open source非常流行。
微服务的特点可以通过上图进行对比,左边是传统的架构,右边是微服务架构。
在传统的架构下,它的特点是把很多功能放在同一个进程或放在同一个业务程序里去运行。每个图标代表一个功能模块,它都被写在同一个应用程序里运行的。这样的话,带来什么样的问题?首先,它安装部署相对来说比较耗时,它在扩展的时候比较麻烦,要以一个整体进行扩展,这样有一定的资源浪费。
所以,打破这样大而全的单一框架,使用的方法就是微服务的框架。在微服务的框架体系下,每个单独可部署、可开发的功能模块可以作为单独的微服务来去开发部署。这意味着以前大而全的模型变成基于REST API来通信的微服务模型,不同的微服务之间是通过REST API去做通信,这是业界比较常见的一种方式。这在扩展的时候比较方便,哪个模块、哪个功能处于当前的性能瓶颈,可以单独扩展它,其他运行比较平稳的模块不用管它,让它运行就可以了。
微服务架构的基本准则
微服务架构带来的优势
微服务框架带来的挑战
每个微服务对资源的使用要求都不尽相同,比如Spark在执行任务时需要尽可能多资源;Kafka消息队列运行时所需的资源根据要传递的消息量而动态变化,如果消息量比较大,资源需要比较多;Cassandra需要相对稳定数量的资源来储存数据。这三个应用程序对资源的使用都不尽相同,但是很多企业同时需要这三个东西,如何在数据中心或在生产环境中同时满足这三种不同资源需求的微服务,让它们同时在一起运行,这是一个挑战。
这是Mesos两层调度模型,从计算框架上把计算资源收集起来,报给Mesos Master,把资源上报计算框架,计算框架从第一到第二已经有了一层调度,第二层在计算框架再做一个调度,把任务创建起来。计算框架可以根据自己的需求选择自己的资源,我们把计算资源的使用一部分选择权交给计算框架自己,根据喜好选择资源就可以了,这样就可以满足不同的计算框架对计算资源的需求。
传统的方式要给每个应用准备自己的物理资源,让它自己使用,不使用的时候就被闲置了。DC/OS的特点是所有计算资源全部被Mesos抽象起来了,把资源管理起来后,把资源给上层的计算框架使用,计算框架就像一台非常大的资源池来使用。
这是DC/OS的Dashboard,安利一波~