从Google的PaaS平台说起,解析中美Docker生态圈

5月18日,第八届中国云计算大会在北京国家会议中心召开。作为领先的云计算创新技术实践者,数人云CEO王璞博士应邀出席并在全体大会上进行主题为“中美容器之融合与变革”的分享,以下是演讲实录:

容器VS虚拟化

首先我科普一点什么是容器技术。容器技术其实本身并不是什么崭新的技术,大家经常拿容器技术跟虚拟化技术比较。有一个通俗的说法,容器是极度轻量的虚拟机。怎么理解大家看这个图,左边图展示的是虚拟机,物理服务器里装操作系统,再装上虚拟机管理软件,生成很多虚拟机,然后虚拟机再装操作系统再装各种各样的应用。右边图展示的是容器,物理服务器里装操作系统,绝大多数情况下,容器基于的操作系统是Linux操作系统,然后Linux里装一个容器软件,最常见的是Docker,用Docker运行各种各样的容器,容器里面不需要再装一次操作系统里,容器里面只装各种各样的应用就好了。这两张图对比大家看出来容器跟虚拟机比最大的优势就是轻量很多,容器里面不需要再装一遍操作系统。容器里面的应用重用容器外面的操作系统,特别是Linux内核这些操作系统核心组件。再一点,容器是用于对应用进行封装,容器里面是各种各样的应用程序。用容器封装应用时,会把程序本身和依赖库都打包在一起,这样容器应用具有可移植性,在不同的Linux环境下都可以运行,而不需要再安装依赖库。容器本身的理念是非常非常简单的。

容器的技术发展历程

容器技术本身并不是崭新的,倒推到2000年Free BSD的Jail,2005年出现的Solaris Containers这些都是容器技术的早期实现。Docker属于容器技术的一种。Docker有镜像的概念,Docker镜像和虚拟机镜像不一样的特点就是Docker的镜像是分层的,最下面是基础的镜像,是基础Linux环境,上面每一层镜像装不同应用。Docker镜像分层最大的好处就是应用分发很方便,每次分发Docker应用的时候,只需要下载更新部分的镜像,而不用重新下载整个镜像,实现应用增量分发更新。容器本身用于封装各种应用,容器之外还有各种管理需求。

这是容器的技术栈,中间部分是两个容器的示例,还是服务器上面装操作系统,再装上Docker运行各种Docker应用,应用在运行时还有其他各种需求,比如网络、服务发现、负载均衡、任务调度等需求,这些需求本身是Docker技术无法满足的,还需要各种相应的周边技术。这样,容器技术栈慢慢演化成一个PaaS的环境了。

这是美国的容器技术相关的生态圈,大家看到各种各样的厂商,估计近百家,都在美国的容器生态圈。我特别想画出一张Docker技术中国生态圈,很遗憾现在还画不出像美国一样丰富的Docker生态圈,但是我相信未来两三年时间内我们也能画出非常丰富的Docker关于中国的生态圈。

云计算分为三层,SaaS、PaaS、IaaS,这三层随着云计算发展得到不同程度的发展,比如说SaaS的发展,由于各行各业的互联网相关业务发展,SaaS以服务为中心,SaaS提供各种各样的服务,各种互联网业务型的,HR、财务、CRM等等,这些不同的服务,企业应用的服务都可以以SaaS方式交付这些都有弹性特征。另外一方面云计算发展以后对于大规模数据中心的需求越来越旺盛,数据中心规模越来越大,数据中心相对管理负责度也增加很多,跟数据中心相关就是IaaS和PaaS,数据中心是云计算云端真正计算的载体。比如说IaaS以资源为中心,IaaS要提供资源弹性,数据中心里面IaaS管理整个数据中心资源,让整个资源以弹性方式提供出来。PaaS在数据中心以应用为中心,PaaS提供应用的弹性,这是云计算的三层,都得到不同程度的发展。但是跟IaaS和SaaS相比PaaS发展其实是相对滞后的。比如说上一代PaaS没有解决好本身复杂度的问题,后面我简单介绍一下。

Docker催生的新一代PaaS

2014年前后上一代PaaS基本上是市场的最低点,我2014年回国跟国内同行讨论我们如何做一个PaaS,PaaS有没有前景,2014年国内同行都对PaaS持怀疑的态度,Docker2013年在美国诞生的,Docker出来以后催生新一代的PaaS,很重要一点Docker出来以后形成事实上应用交付的标准,未来大家普遍这样认为,未来企业级应用都会以容器Docker的形式进行交付。这样很好的一点Docker定义了企业级客户和PaaS之间的一个边界,这个边界怎么理解?就是企业只需要关心自己的业务应用、业务程序,企业业务程序分装在容器里面,PaaS只需要提供标准的容器运行环境,有了清晰边界以后PaaS复杂度大大降低,PaaS作为一个标准,之前没有容器的时候PaaS和企业客户之间边界在哪里?边界在于程序编程语言这个层面,比如说Heroku等需要支持各样的开发语言,上一代的PaaS复杂度非常高,新一代的PaaS由于Docker定义一个标准,新一代PaaS可以不用管业务应用拿java还是其他语言写的,解决Docker运行所需要的CPU、网络、负载均衡、报警等常见的企业内部的需求,这样新一代PaaS复杂度大大降低,这个也就是我说为什么Docker出现催生了新一代的PaaS。

很重要一点中国和美国在新一代PaaS发展方向是齐头并进的。

新一代PaaS平台在中美落地情况

这张图我列一下新一代PaaS在中美两国落地的情况,左上角是新一代PaaS在美国落地的情况,右下角是新一代PaaS在国内落地的情况。基本上大家可以看出来新一代PaaS落地从互联网公司到IT巨头到传统行业都有各种各样的落地。落地的这些企业并不是所有我只是挑一些有代表性的,从有代表性落地企业来看国内和美国其实几乎处在同一个起跑线上。

Google 的 PaaS

讲到PaaS不得不讲一下谷歌的PaaS,其中一个原因有很大影响力,尤其是谷歌内部的PaaS非常复杂、功能无比的强大,我之前在谷歌工作过,我见过谷歌的PaaS是怎么运作的。首先几个特点,谷歌内部的PaaS分层的,PaaS管理东西很多,PaaS只管理应用,跟应用相关还有很多东西,资源分配,任务调动等等,谷歌PaaS以一种容器方式分装分发,谷歌有著名的分布式文件系统,还有各种各样数据管理的数据,还有Big Table、 MapReduce,这是谷歌分布式应用编程的范式,这是PaaS提供的能力。

谷歌PaaS的特点是什么?就是轻量,轻量怎么理解?PaaS支撑应用快速迭代快速上线,大家提的持续交付持续集成的概念。谷歌PaaS是以应用为中心的,PaaS平台一定提供应用弹性能力,让各种各样应用按需使用资源,PaaS平台提供容错能力把开发运维复杂度降低,这三点我称之为应用PaaS平台的轻量特性。

再一点谷歌内部的PaaS非常强大,谷歌资源管理和任务调动数据,可以管理谷歌两百多台服务器统一进行管理。为了让大家更深刻的理解,我找了一张谷歌数据的照片,这是谷歌数据中心照片的一角,很多机柜,每个机柜里面有差不多20台服务器左右。这张照片我想强调一点是什么?这么大规模的数据中心其实硬件故障频率很高的,这张图是我从谷歌一个数据中心的PPT报告上摘下来的,就是说一个谷歌新建的数据中心平均下来一年要发生这么多各种各样的故障。举个例子第一个故障一年大概有半次左右过热,一年有一次的供电单元有故障。一年至少有一个机架做挪动,至少有一次机架进行排线,一年可能有12次路由器重启,3次路由器故障,每年大概有上千次服务器宕机,由硬件故障造成的宕机,一年有数千次的硬盘损坏。目前大规模数据中心基本都是用X86服务器,都不是像大型机或小型机这样的高可靠硬件。基于X86服务器的数据中心怎么应对这些硬件故障,保障应用服务高可靠,这是PaaS和IaaS一起要做的工作。

基于Docker的新一代PaaS

这里面我主要把新一代PaaS的特性给它勾勒了出来,跟谷歌的PaaS有相似的地方,新一代PaaS基于微服务理念打造的,特别是像谷歌的PaaS分层管理。新一代PaaS也有轻量的特性,介绍谷歌PaaS的轻量特性,应用要具有弹性要分布发布,再一个容错性强、易于维护,PaaS也要对计算资源故障进行容错。这里面特别强调一点大规模数据中心或者现在这种数据中心对于硬件管理方式有两种,一种上一代的宠物型管理方式,另外是放养型的。对于宠物型的数据中心管理方式其实是很常见的,比如说对于数据库服务器,一般企业里面数据库服务器绝对不允许宕机,数据库宕机所有应用全部宕了,所以要有人为维护,DBA,人围机器去转,这是宠物型对数据中心的管理,一旦数据库宕机人马上去修。另外是放养型跟宠物型相反,放养型什么意思?比如说谷歌这样的量级中心,两百万台服务器不可能保证每一台服务器都是处于工作状态,一定有一些服务器处于故障状态,要通过软件PaaS平台保证上面应用服务不宕机,PaaS对于软硬件都要有很强的容错能力,放养型的工作管理必然极大降低对数据中心维护,包括PaaS本身,维护成本运维成本都会大大降低,这是新一代PaaS很重要的特性主要就是轻量。

数人云的新一代PaaS实现

接下来简单讲一点点我们数人云对于新一代PaaS是怎么实现的?其实最主要就是分层的实现,分层实现这是谷歌提出来的理念。大规模数据中心是云端计算的载体,大规模数据中心的软硬件系统是IT行业最高科技的结晶。这么多复杂系统拼在一起组成大规模的数据中心,对外提供云计算服务能力,不是一套系统能够全部做下来的,一定是分层实现的。

我们实现新一代云计算平台首先有一个是核心模块,核心模块本身也是分好几个层面的,核心模块基本上围绕运行时的基本管理提供比如说容器运行的标准环境,这个核心模块包括几个层面,首先应用的封装用到的是Docker的技术,这是很火的容器技术。光有应用封装不够的,应用封装完应用运行还有别的需求,需要CPU、内存需求等等,资源分配核心模块里面功能我们基于Apache来做的,应用不是运行在一台服务器,大规模数据中心有成百上千台服务器,对于大规模的集群里面应用该怎么调度这是很关键的模块,我们用的是任务调度模块做的。比如说应用分发,涉及到应用的更新上线等等,比如说老版本的应用已经运行了,新版本应用程序我要分发下去,新版本应用我要有一个分发的仓库存在什么地方,这时Docker的镜像仓库用于应用分发。

核心模块还要管理网络,我们很多客户提出来不同应用之间的网络要进行应用隔离,有些应用可达有些应用不可达,这都需要对容器之间网络进行有效管理。我们通过Calico来实现网络管理。

还有服务发现,容器运行环境在大规模数据中心里面,对于容器调度不是静态调度,不是一个容器应用就跑到一台服务器上,它是动态调度的,不同应用之间我有通信需求,我应用A怎么找到应用B就需要有应用发现的需求,这是核心模块的基本功能。

周边模块支撑应用运行方便应用运维,周边模块体现出新一代PaaS平台的应用度。

周边模块很重要一块就是持续集成,这是企业客户对于PaaS平台很强需求的一点,因为这些业务应用大家需要快速迭代,这是互联网给大家带来的企业级IT最大的冲击,应用怎么做到快速上线需要持续的集成,开发人员做的新的代码怎么持续集成各种各样的应用而且发布出去。

再一个弹性伸缩这也是互联网带来新业务的特点,互联网业务最大特点就是集中爆发,很经典例子就是淘宝双十一,12306大家订票,弹性伸缩是PaaS平台必须提供的性能,没有弹性面对集中爆发的业务需求这个后台支撑不了,弹性伸缩我们用API实现的。再一个监控报警,任何企业生产环境系统不是孤立存在的,一定有各种各样的监控报警,生产系统谁也不能保证100%的正常。

再一个日志的处理,这是企业很强的需求,生产环境里面各种各样的业务都有,生产环境都是比较大规模的集群环境,不同应用产生的日志留在不同的服务器上,怎么把这些日志在分布式环境下进行统一收集查询统一处理,需要有日志统一管理,我们主要用的是ELK这个模式。

再一点就是文件存储,企业生产环境数据中心里面业务应用必然有一些数据存下来,就要存在文件系统上,文件存储我们用的是Hadoop的文件系统。再有对于数据的管理,多个应用要对数据同时进行读写操作,对于数据访问管理等等这些我们用的是HDFS。还有我们用Kafka消息队列来处理不同应用之间的异步通讯需求,未来Kafka可以替代企业服务总线。还有数据处理,现在企业对于大数据处理有很强的需求,大家用Hadoop还有Spark这些,我们主要用Spark做大数据处理更快。

前面介绍一下我们做的新一代PaaS平台的核心模块和周边模块,我简单给大家演示一下我们的程序,这是我们对于应用管理做的,我们做到应用统一管理,各种各样的应用通过这个平台统一的分发部署。再一个集群管理,它的PaaS也要向下管理各个集群的资源。中间有一个红点代表某一台集群主机是异常的,异常没有关系,上面应用把这个平台容错自动迁走迁移到其他地方,一两台主机宕机不影响整个的应用使用。再一个应用管理,散落在不同集群上。跟日志相关的数据统一收集起来方便后台运维人员管理。软件定义世界,这是我们所有做软件的人非常喜欢的一句话,现在大家日常工作生活都跟各种各样的软件在打交道,之前有大家提的随着云计算发展提出的软件定义存储、软件定义计算、软件定义网络等等。再进一步的提法软件定义数据中心。我刚才讲PaaS讲到很多数据中心的概念,说到底我喜欢软件定义世界这句话。

这个背景图其实就是黑客帝国电影的主题图。黑客帝国里边讲的是未来人类生活在虚拟软件定义世界里面。这个软件定义世界正在发生,每个人现在每天都要大量跟各种各样的软件打交道。随着云计算新一代PaaS平台普及,随着容器技术如火如荼的发展和推广,下一步就是不仅仅是软件定义世界了,我们最后会达到容器定义的世界,所有的软件都是以容器形式交付运行的,欢迎大家来到容器定义的世界。