2021年8月

根据前面文章的paas平台架构设计参考,对企业内部私有云和paas平台总体架构进行整理,初步考虑paas平台总体架构如下,除底层iaas层外其余都是paas应用平台需要考虑的内容,如下:

paas技术中台.png
数据库即服务提供对底层数据库的统一封装,提供公共的数据访问接口,提供数据库资源池和数据库水平扩展能力,支持分布式数据库,支持非关系型数据库,支持数据库本身的多租户。存储即服务主要是基于hdfs分布式文件系统实现的存储服务接口,计算即服务即可理解为对map/reduce分布式计算框架和能力的暴露。

中间件包括了应用中间件和集成中间件,应用中间件即传统的weblogic,websphere,jboss,tomcat,iis等,中间件重点是形成中间件资源池和应用托管容器,这即是可以管理和调度的计算资源和计算单元。而对于集成中间件包括了数据集成和应用集成多方面的内容,数据集成包括了ETL,ODI等,而应用集成重点是ESB企业服务总线,实现企业业务服务的集成,统一的服务目录的提供。

流程即服务是更高层次的类似,包括了BPEL,HWF和BPM业务流程管理。流程即服务提供了流程建模,流程设计,流程执行,流程监控,流程分析的端到端流程管理能力。

运营管理平台我们仍然将其理解为两个方面的内容,对于aPaaS对应的是资源的运营。包括了资源的申请,资源的使用,资源的回收,资源的调度,资源的监控等;而对于iPaaS对应的是服务的运营,在这里特征SOA架构中的服务,具体包括了服务接入,服务使用,服务开通,服务控制和业务监控等。

PAAS平台重点是执行态,但是会通过开发框架和环境衔接开发态。基于PaaS平台接入规范开发的应用才能给接入到paas平台,并在运行时托管。对于开发态我们希望是对技术平台,产品平台,应用架构设计方法进一步进行统一和整合。对于运行态只有两个方面的内容,一个是服务的运行和监控,一个是资源的监控和调度。服务由应用或业务组件提供,但是应用或业务组件最终托管在资源上(中间件容器)。

一、PaaS的发展简史

PaaS作为新一代的云计算平台,目前在业界得到了广泛的关注与讨论。诸多大公司也纷纷推出自己的PaaS平台,比如Pivotal的CloudFoundry, IBM的Bluemix和Redhat的OpenShift等。其实在此之前, PaaS已经有很长一段时间的发展历程。在2007年,Salesforce最早发布force.com,其目的是支持第三方客户在Salesforce.com上开发和部署定制软件,它基本使用的元数据驱动的方式来开发和管理应用。在2008年4月的时候,技术巨头Google发布GAE(Google AppEngine),其目的是争夺独立开发者和创业公司的市场。GAE在发布之时就得到了业界的广泛关注,在很多方面都突破了原有的技术思路,比如使用容器来部署应用,简化的用户体验等。但是,我们也看到,GAE在业务上并没有获得巨大的成功,后面的发展也证明AWS的策略更加成功。一年之后,新浪SAE也发布,其命名、发展思路与架构模式和GAE非常类似,当然,业务上也同样不太成功。
AWS也看到了PaaS平台的潜力,与2011年发布其官方PaaS平台Beanstalk。在Beanstalk之前,几乎所有的PaaS平台都是基于Linux容器技术LXC。AWS提供了另外一种打造PaaS平台的思路,即基于虚拟机完成应用的自动部署和运维,同时Beanstalk也提供了自动弹性伸缩的功能。容器和虚拟机主要是在资源利用率、安全性和隔离性上有所差别。

CloudFoundry是另外一个里程碑式的PaaS产品,在推出之日就吸引了诸多的焦点,甚至带动了PaaS搜索关键字在Google趋势里面搜索量的飚升。CloudFoundry的成功有这样几个原因:首先它是开源的和免费的。开放源代码意味着全球所有的开发者都能非常简单的部署自己的PaaS平台,同时也意味着让所有的开发者看到打造一个PaaS平台需要哪些关键的技术;其次,CloudFoundry是开放的,它能够支持多种编程语言和开发框架,也能够提供多种服务类型,虽然CloudFoundry的架构经过了几次重构,但是开放性这个关键的特性一直都保留;第三,CloudFoundry提供了一个极简的用户体验,开发人员只需要简单的几个命令就能部署自己的应用系统,彻底颠覆了之前的用户体验。当然,这种用户体验最早是来自于Heroku。

最后值得一提的是大热的Docker。Linux容器技术已经出现了很多很多年,在各大互联网巨头公司也使用了很多很多年,但是Docker利用AUFS技术第一次将容器实例镜像化,这一突破性的创新能够让容器实例可复制、可迁移、可重用。该思路彻底打破了以前只有使用虚拟机才能迁移实例的局限,所以迅速在业界得到追捧。Docker的东家DotCloud甚至把自己的PaaS平台卖掉以专心发展该项技术。

目前来看,PaaS平台技术还处于群雄逐鹿的状态,诸多技术巨头都在不遗余力的发展自己的PaaS平台以跟上技术发展的脚步。以此同时,独立的PaaS提供商(如Heroku、AppFog)等也纷纷被技术巨头收购,这带来了一种质疑的声音是PaaS是否真的能够成为一项独立可持续发展的业务模式。下文将会对此做一些简单的探讨。

二、PaaS架构比较

大致来看,PaaS的实现分为两种:以虚拟机为基础或是以容器为基础。前者的代表是AWS,后者的代表则是GAE, CloudFoundry和Heroku。前文已经提到,AWS是基于虚拟机技术来打造自己的PaaS平台,其架构模式大致如下图所示:

image

具体而言,AWS基于如下构件打造了Beanstalk:首先是负载均衡层(ELB),该层需要将用户的请求投射到对应的服务器实例,同时,负载均衡层还需要。当应用实例出现扩容时,需要动态将调整的服务器实例注册到对应的域名上,以完成分流;中间是Web服务器层,目前ElasticBean支持Java、Python和PHP等多种编程语言,尽量为编程人员提供多样性的选择,开放性基本是所有PaaS平台的标配。在服务后端,Beanstalk基本依托于AWS本身的服务生态系统为应用提供服务,比如RDS、S3、DynamoDB等。

CloudFoundry等平台则是基于容器技术打造。相比于虚拟机,容器带来的系统开销非常低,如果一台虚拟机的操作系统需要占用2G的内存,则7个虚拟机所组成的集群只是操作系统就需要14G的内存占用。基于容器的技术如果一台16G的裸机除去2G的操作系统开销,还能够部署7个容器进程。所以,从经济性来说,容器的技术远远好于虚拟机。另外一个比较的标准是性能,容器的性能相对而言更好一些,具体的比较参数可以参见IBM研究院刚刚出的报告【1】。但是,从安全性和隔离型来说,虚拟机是远远好于容器的。

image

CloudFoundry的架构设计如下图所示。首先,CF也提供了一个路由模块(Router),该模块基本是基于ngnix打造,只是在ngnix技术上提供了动态注册的功能。在部署时,由于CF会同时部署非常多的应用实例,所以需要一个router集群来满足应用的需要;其次,CF的应用容器基于自己开发的warden技术,warden也是基于LXC技术,但是使用c和ruby作了一层简单的封装。Docker的大热让CloudFoundry很纠结;第三,CF使用service broker来集成各种资源服务,如mongo、mysql、rabbitmq和redis等。最后,CF使用消息总线NATS/GNATS来完成应用之间的通讯。

其他基于容器的PaaS平台(如Heroku、OpenShift、DotCloud)的平台架构和上面所描述的模式基本一致,我在附件中提供了若干链接,大家如果有兴趣可以仔细研究。

三、PaaS的参考架构模式

根据上面讨论的两种架构模式,我们可以看到PaaS平台的实现基本需要如下的构件:
PaaS平台参考架构

  1. 路由模块:该模块的基本功能是将终端用户请求路由到对应的服务器实例,并提供应用动态注册等功能。目前绝大多数的实现是基于ngnix,同时也需要使用简单的lua脚本完成应用注册和路由查询等基本功能;

  2. 服务管理模块:该模块会为开发人员和运维人员提供管理接口,其基本功能包括创建应用实例、配置应用运行参数、启停应用、发布应用程序、扩容或缩容等。服务管理模块也需要提供相应的客户端被用户使用,如命令行或是用户界面等;

  3. 应用容器模块:应用容器是PaaS平台的核心,其主要功能是管理应用实例的生命周期,汇报应用的运行状态等。目前来看,应用容器可以基于虚拟机来实现(如AWS),也可以使用Linux容器技术来实现,最早使用的是LXC,CloudFoundry使用的是自己的warden,同样也是基于cgroup,现在最新的是docker;

  4. 应用部署模块:应用部署模块需要将应用程序打包成为可直接部署的发布包。该模块是实现PaaS平台开发性的关键。由于现有通用的PaaS平台需要支持多种编程语言和框架,如Java, Python, Ruby和PHP等,当应用发布时,PaaS平台需要根据不同的编程语言将应用打包成为通用的发布包,然后传递给容器模块部署。应用部署模块是实现这一过程的关键,目前来看起源于Heroku的buildpack已经被大家广发接受;

  5. 块存储模块:该模块主要用于存储应用的发布包,需要保证程序包的长久存储和。目前AWS的Beanstalk直接使用S3,CF可以使用网络文件系统NFS或是其他任何分布式文件存储系统(如HBase);

  6. 数据存储模块:该模块需要保存应用和服务的基本信息,可以基于任何现有的数据库技术实现,如MYSQL或是MONGODB等;

  7. 监控模块:该模块的作用是持续监控应用的运行状态,比如健康状态(是否存活)、资源使用率(CPU、内存、硬盘、网络等)和可用性等。这些指标会成为整个PaaS平台运维的关键,也为自动弹性伸缩奠定基础;

  8. 用户认证模块:该模块需要保证应用程序的安全性和隔离性,通常而言,公有云的提供商会使用OAuth等技术集成现有的用户认证服务;

  9. 消息总线模块:该模块也是最重要的模块,由于PaaS平台所搭建的是一个大规模分布式环境,通常而言,规模在数百台到上千台的机器数量,所有模块之间的通讯会变成一个核心的问题。所以消息总线会变成系统之间通讯的基础,通常需要支持pub/sub模式。

基于该架构,应用实例的弹性伸缩也能够非常容易的实现。首先需要监控服务来不断获取实时的应用状态,当某些指标超出预先定义的阈值时,平台会启动伸缩服务,首先从应用容器模块预留资源,然后调用应用部署模块打包应用并部署,最后将应用节点注册到路由模块完成整个伸缩的过程。

四、PaaS未来发展的趋势

PaaS通过开放性的设计,能够支持多种不同的编程语言、技术框架和服务,从而为应用开发人员提供了广泛的选择,能够大大提供开发人员的效率。同时,PaaS也从运维层面为企业提供了强大的支持,将以前很难实现的技术场景(如应用弹性伸缩等)转化为可能。最后,基于容器技术实现的PaaS平台也带来了经济性的优势。所以,相比于现有纯资源型的IaaS平台,PaaS确实将云计算平台提升到一个新的高度,距离应用开发更近了一步。


 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发、部署、运维管理、持续开发持续集成的流程。平台提供基础设施、中间件、数据服务、云服务器等资源,开发人员只需要开发业务代码并提交到平台代码库,做一些必要的配置,系统会自动构建、部署,实现应用的敏捷开发、快速迭代。在系统架构上,PaaS云平台主要分为微服务架构、Docker容器技术、DveOps三部分,这篇文章重点介绍微服务架构的实施。

       实施微服务需要投入大量的技术力量来开发基础设施,这对很多公司来说显然是不现实的,别担心,业界已经有非常优秀的开源框架供我们参考使用。目前业界比较成熟的微服务框架有Netflix、Spring Cloud和阿里的Dubbo等。Spring Cloud是基于Spring Boot的一整套实现微服务的框架,它提供了开发微服务所需的组件,跟Spring Boot一起使用的话开发微服务架构的云服务会变的很方便。Spring Cloud包含很多子框架,其中Spring Cloud Netflix是其中的一套框架,在我们的微服务架构设计中,就使用了很多Spring Cloud Netflix框架的组件。Spring Cloud Netflix项目的时间还不长,相关的文档资料很少,博主当时研究这套框架啃了很多英文文档,简直痛苦不堪。对于刚开始接触这套框架的同学,要搭建一套微服务应用架构,可能会不知道如何下手,接下来介绍我们的微服务架构搭建过程以及需要那些框架或组件来支持微服务架构。

       为了直接明了的展示微服务架构的组成及原理,博主画了一张系统架构图,如下:

       

       

       从上图可以看出,微服务访问大致路径为:外部请求 → 负载均衡 → 服务网关(GateWay)→ 微服务 → 数据服务/消息服务。服务网关和微服务都会用到服务注册和发现来调用依赖的其他服务,各服务集群都能通过配置中心服务来获得配置信息。

       服务网关(GateWay)

       网关是外界系统(如:客户端浏览器、移动设备等)和企业内部系统之间的一道门,所有的客户端请求通过网关访问后台服务。为了应对高并发访问,服务网关以集群形式部署,这就意味着需要做负载均衡,我们采用了亚马逊EC2作为虚拟云服务器,采用ELB(Elastic Load Balancing)做负载均衡。EC2具有自动配置容量功能,当用户流量达到尖峰,EC2可以自动增加更多的容量以维持虚拟主机的性能。ELB弹性负载均衡,在多个实例间自动分配应用的传入流量。为了保证安全性,客户端请求需要使用https加密保护,这就需要我们进行SSL卸载,使用Nginx对加密请求进行卸载处理。外部请求经过ELB负载均衡后路由到GateWay集群中的某个GateWay服务,由GateWay服务转发到微服务。服务网关作为内部系统的边界,它有以下基本能力:

       1、动态路由:动态的将请求路由到所需要的后端服务集群。虽然内部是复杂的分布式微服务网状结构,但是外部系统从网关看就像是一个整体服务,网关屏蔽了后端服务的复杂性。

       2、限流和容错:为每种类型的请求分配容量,当请求数量超过阀值时抛掉外部请求,限制流量,保护后台服务不被大流量冲垮;党内部服务出现故障时直接在边界创建一些响应,集中做容错处理,而不是将请求转发到内部集群,保证用户良好的体验。

       3、身份认证和安全性控制:对每个外部请求进行用户认证,拒绝没有通过认证的请求,还能通过访问模式分析,实现反爬虫功能。

       4、监控:网关可以收集有意义的数据和统计,为后台服务优化提供数据支持。

       5、访问日志:网关可以收集访问日志信息,比如访问的是哪个服务?处理过程(出现什么异常)和结果?花费多少时间?通过分析日志内容,对后台系统做进一步优化。

       我们采用Spring Cloud Netflix框架的开源组件Zuul来实现网关服务。Zuul使用一系列不同类型的过滤器(Filter),通过重写过滤器,使我们能够灵活的实现网关(GateWay)的各种功能。

       服务注册与发现

       由于微服务架构是由一系列职责单一的细粒度服务构成的网状结构,服务之间通过轻量机制进行通信,这就引入了服务注册与发现的问题,服务的提供方要注册报告服务地址,服务调用放要能发现目标服务。我们的微服务架构中使用了Eureka组件来实现服务的注册与发现。所有的微服务(通过配置Eureka服务信息)到Eureka服务器中进行注册,并定时发送心跳进行健康检查,Eureka默认配置是30秒发送一次心跳,表明服务仍然处于存活状态,发送心跳的时间间隔可以通过Eureka的配置参数自行配置,Eureka服务器在接收到服务实例的最后一次心跳后,需要等待90秒(默认配置90秒,可以通过配置参数进行修改)后,才认定服务已经死亡(即连续3次没有接收到心跳),在Eureka自我保护模式关闭的情况下会清除该服务的注册信息。所谓的自我保护模式是指,出现网络分区、Eureka在短时间内丢失过多的服务时,会进入自我保护模式,即一个服务长时间没有发送心跳,Eureka也不会将其删除。自我保护模式默认为开启,可以通过配置参数将其设置为关闭状态。

       Eureka服务以集群的方式部署(在博主的另一篇文章中详细介绍了Eureka集群的部署方式),集群内的所有Eureka节点会定时自动同步微服务的注册信息,这样就能保证所有的Eureka服务注册信息保持一致。那么在Eureka集群里,Eureka节点是如何发现其他节点的呢?我们通过DNS服务器来建立所有Eureka节点的关联,在部署Eureka集群之外还需要搭建DNS服务器。

       当网关服务转发外部请求或者是后台微服务之间相互调用时,会去Eureka服务器上查找目标服务的注册信息,发现目标服务并进行调用,这样就形成了服务注册与发现的整个流程。Eureka的配置参数数量很多,多达上百个,博主会在另外的文章里详细说明。

       微服务部署

       微服务是一系列职责单一、细粒度的服务,是将我们的业务进行拆分为独立的服务单元,伸缩性好,耦合度低,不同的微服务可以用不同的语言开发,每一个服务处理的单一的业务。微服务可以划分为前端服务(也叫边缘服务)和后端服务(也叫中间服务),前端服务是对后端服务做必要的聚合和剪裁后暴露给外部不同的设备(PC、Phone等),所有的服务启动时都会到Eureka服务器进行注册,服务之间会有错综复杂的依赖关系。当网关服务转发外部请求调用前端服务时,通过查询服务注册表就可以发现目标服务进行调用,前端服务调用后端服务时也是同样的道理,一次请求可能涉及到多个服务之间的相互调用。由于每个微服务都是以集群的形式部署,服务之间相互调用的时候需要做负载均衡,因此每个服务中都有一个LB组件用来实现负载均衡。

       微服务以镜像的形式,运行在Docker容器中。Docker容器技术让我们的服务部署变得简单、高效。传统的部署方式,需要在每台服务器上安装运行环境,如果我们的服务器数量庞大,在每台服务器上安装运行环境将是一项无比繁重的工作,一旦运行环境发生改变,就不得不重新安装,这简直是灾难性的。而使用Docker容器技术,我们只需要将所需的基础镜像(jdk等)和微服务生成一个新的镜像,将这个最终的镜像部署在Docker容器中运行,这种方式简单、高效,能够快速部署服务。每个Docker容器中可以运行多个微服务,Docker容器以集群的方式部署,使用Docker Swarm对这些容器进行管理。我们创建一个镜像仓库用来存放所有的基础镜像以及生成的最终交付镜像,在镜像仓库中对所有镜像进行管理。

       服务容错

       微服务之间存在错综复杂的依赖关系,一次请求可能会依赖多个后端服务,在实际生产中这些服务可能会产生故障或者延迟,在一个高流量的系统中,一旦某个服务产生延迟,可能会在短时间内耗尽系统资源,将整个系统拖垮,因此一个服务如果不能对其故障进行隔离和容错,这本身就是灾难性的。我们的微服务架构中使用了Hystrix组件来进行容错处理。Hystrix是Netflix的一款开源组件,它通过熔断模式、隔离模式、回退(fallback)和限流等机制对服务进行弹性容错保护,保证系统的稳定性。

       1、熔断模式:熔断模式原理类似于电路熔断器,当电路发生短路时,熔断器熔断,保护电路避免遭受灾难性损失。当服务异常或者大量延时,满足熔断条件时服务调用方会主动启动熔断,执行fallback逻辑直接返回,不会继续调用服务进一步拖垮系统。熔断器默认配置服务调用错误率阀值为50%,超过阀值将自动启动熔断模式。服务隔离一段时间以后,熔断器会进入半熔断状态,即允许少量请求进行尝试,如果仍然调用失败,则回到熔断状态,如果调用成功,则关闭熔断模式。

       2、隔离模式:Hystrix默认采用线程隔离,不同的服务使用不同的线程池,彼此之间不受影响,当一个服务出现故障耗尽它的线程池资源,其他的服务正常运行不受影响,达到隔离的效果。例如我们通过andThreadPoolKey配置某个服务使用命名为TestThreadPool的线程池,实现与其他命名的线程池隔离。

       3、回退(fallback):fallback机制其实是一种服务故障时的容错方式,原理类似Java中的异常处理。只需要继承HystixCommand并重写getFallBack()方法,在此方法中编写处理逻辑,比如可以直接抛异常(快速失败),可以返回空值或缺省值,也可以返回备份数据等。当服务调用出现异常时,会转向执行getFallBack()。有以下几种情况会触发fallback:

       1)程序抛出非HystrixBadRequestExcepption异常,当抛出HystrixBadRequestExcepption异常时,调用程序可以捕获异常,没有触发fallback,当抛出其他异常时,会触发fallback;

       2)程序运行超时;

       3)熔断启动;

       4)线程池已满。

       4、限流: 限流是指对服务的并发访问量进行限制,设置单位时间内的并发数,超出限制的请求拒绝并fallback,防止后台服务被冲垮。

       Hystix使用命令模式HystrixCommand包装依赖调用逻辑,这样相关的调用就自动处于Hystrix的弹性容错保护之下。调用程序需要继承HystrixCommand并将调用逻辑写在run()中,使用execute()(同步阻塞)或queue()(异步非阻塞)来触发执行run()。

       动态配置中心

       微服务有很多依赖配置,某些配置参数在服务运行期间可能还要动态修改,比如:根据访问流量动态调整熔断阀值。传统的实现信息配置的方法,比如放在xml、yml等配置文件中,和应用一起打包,每次修改都要重新提交代码、打包构建、生成新的镜像、重新启动服务,效率太低,这样显然是不合理的,因此我们需要搭建一个动态配置中心服务支持微服务动态配置。我们使用Spring Cloud的configserver服务帮我们实现动态配置中心的搭建。我们开发的微服务代码都存放在git服务器私有仓库里面,所有需要动态配置的配置文件存放在git服务器下的configserver(配置中心,也是一个微服务)服务中,部署到Docker容器中的微服务从git服务器动态读取配置文件的信息。当本地git仓库修改代码后push到git服务器仓库,git服务端hooks(post-receive,在服务端完成代码更新后会自动调用)自动检测是否有配置文件更新,如果有,git服务端通过消息队列给配置中心(configserver,一个部署在容器中的微服务)发消息,通知配置中心刷新对应的配置文件。这样微服务就能获取到最新的配置文件信息,实现动态配置。

       以上这些框架或组件是支撑实施微服务架构的核心,在实际生产中,我们还会用到很多其他的组件,比如日志服务组件、消息服务组件等等,根据业务需要自行选择使用。在我们的微服务架构实施案例中,参考使用了很多Spring Cloud Netflix框架的开源组件,主要包括Zuul(服务网关)、Eureka(服务注册与发现)、Hystrix(服务容错)、Ribbon(客户端负载均衡)等。这些优秀的开源组件,为我们实施微服务架构提供了捷径。

       以上篇幅主要介绍了微服务架构的基本原理,其中有些比较细节的东西,比如Eureka的各项参数配置说明、动态配置中心搭建过程等,博主会在其他的文章中做出详细的说明,供大家参考。


说起云计算平台,大家可能都知道有IaaS、PaaS和SaaS。IaaS和SaaS的概念大部分人都能很清晰的认知。说到IaaS大多会讲:存储、计算和网络这三大基础资源,说到SaaS大家会想到各种类型的应用,但是说到PaaS就没有一个非常明确的共识。做大数据平台的厂商会数自己的大数据平台是PaaS,做容器云的厂商会数自己的容器平台是PaaS,甚至传统的IaaS厂商会数自己的平台也是PaaS。那么PaaS究竟是什么呢?

PaaS的定义

云计算相关概念

我们来说PaaS的定义时就要先理解什么是云计算。云计算是指基于互联网等网络,通过虚拟化方式共享IT资源的新型计算模式。其核心思想是通过网络统一管理和调度计算、存储、网络、软件等资源,实现资源整合与配置优化,以服务方式满足不同用户随时获取并扩展、按需使用并付费,最大限度地降低成本等各类需求。

enter image description here

目前云计算提供的服务模式主要包含三大类:基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)。

基础设施即服务(IaaS)

云计算服务商提供虚拟的硬件资源,如虚拟的主机、存储、网络、安全等资源,用户无需购买服务器、网络设备和存储设备,只需通过网络租赁即可搭建自己的应用系统。IaaS定位于底层,向用户提供可快速部署、按需分配、按需付费的高安全与高可靠的计算能力以及存储能力租用服务,并可为应用提供开放的云基础设施服务接口,用户可以根据业务需求灵活定制租用相应的基础设施资源。在这种服务模式下,用户无需考虑对琐碎的基础设施进行管理与维护,用户可直接在基础设施上面方便地加载应用。IaaS服务对应的用户是系统管理员。

平台即服务(PaaS)

PaaS提供商提供应用服务引擎,将软件研发测试和运维的平台作为一种服务提供,如应用程序接口(API)服务或应用运行时服务,用户基于这些服务构建业务应用。从用户角度来说,这意味着他们无需自行搭建开发,测试和运维平台,也不会在不同平台兼容性方面遇到困扰。PaaS服务对应的用户是应用的开发者和运维人员。

软件即服务(SaaS)

用户通过标准的 Web 浏览器来使用网络上的软件。从用户角度来说,这意味着前期无需在服务器或软件许可证授权上进行投资;从供应商角度来看,与常规的软件服务模式相比,维护一个应用软件的成本要相对低廉。SaaS供应商通常是按照客户所租用的软件模块来进行收费的,因此用户可以根据需求按需订购软件应用服务,而且SaaS的供应商会负责系统的部署、升级和维护。SaaS提供商对应的用户是应用软件使用的终端用户。

PaaS

平台即服务(PaaS)与基础设施即服务(IaaS)是不同的,PaaS并不是IaaS的一个扩展特性,对于基础设施即服务(IaaS)来说,基础单元就是资源,这里的资源是指服务器,磁盘,网络等,IaaS所做的一切就是按照需要提供这些资源。例如,亚马逊(amazon)的EC2服务,所有的工具都以资源为中心,所有的文档都是关于资源的,所有的开发都是专注于资源,同时人们也因为需要这些资源而使用它。

对于平台即服务(PaaS)来说,基础单元就是应用。那么什么是应用?就是一个系统,就是代码以及所有那些在任何时候都与这些代码通信的服务。这不仅仅是资源,事实上,一个应用是由很多单独的资源绑定在一起组成的。将所有这些资源连接在一起所需要付出的工作量通常被低估了。从一个单一的运行Apache和Mysql的服务器转移到一个拥有单独的负载均衡服务器,缓存服务器,应用服务器,数据库服务器以及冗余的失效恢复的系统架构需要大量的工作,包括前期投入以及后期维护。一个成熟的PaaS平台可以为用户提供上述的所有功能,在减少用户大量工作的前提下,大幅度提升用户应用的开发速度,运行稳定性,可靠性,极大的降低了用户的开发,测试及运维的成本。

利用PaaS可以做的另外一件事,就是从应用的角度来管理IaaS。通常情况下,使用者对于IaaS的资源需求实质上是来源于运行在IaaS之上的应用,如何根据应用的需求动态的使用IaaS资源又成为摆在云使用者面前的一个难题,PaaS作为SaaS与IaaS的沟通者,可以根据SaaS的需求动态的协调IaaS资源,使IaaS按需分配资源的理念变得更智能,更有实际意义。

IaaS为云使用者提供了按需分配的能力,用户可以按照自己的需求定制计算资源,存储资源,网络资源,并且利用云端的海量资源随时快速的开启资源,并在工作完成时,随时释放资源,在享受云带来的高可靠性的同时,也最大化的降低了使用成本,提升了资源利用率。

但是IaaS为云使用者带来的便利只局限在资源这个层面上,云使用者可以快速,稳定,海量的使用资源,但是一旦获取到资源后,云使用者依然要为运行在资源之上的应用搭建各种适配环境(部署),解决应用的各种依赖,安装应用要使用的各种服务,维护应用的运行生命周期。这些问题IaaS都没有解决,或者说,这些问题本质上也不是IaaS需要解决的问题,而是PaaS需要解决的问题。

综上,IaaS关注与硬件的自动化管理,目标是人与机器的解耦合,提升了效率和性能,而PaaS关注与应用的自动化管理,目标是应用与操作系统的解耦合,提升了弹性和控制。

PaaS的分类

通过上面的介绍,大致可以清晰IaaS、PaaS和SaaS的关系以及面向的用户。在继续介绍PaaS的技术细节前,我们需要了解一下PaaS平台自身的分类。Gartner把它们分为两类,一类是应用部署和运行平台APaaS(Application Platform As a Service),另一类是集成平台IPaaS(Integration Platform As a Service)。

  • APaaS是一种面向IT企业和机构的云计算应用开发与部署平台。APaaS主要为应用提供运行环境和数据存储,能够将本地部署的传统应用直接部署到APaaS上。

  • IPaaS是用于集成和协同的PaaS平台,不仅可以支持与现有云服务间的连接性,而且可以以安全的方式提供企业应用的访问能力。IPaaS主要用于集成和构建复合应用。

大数据厂商的PaaS实际上是属于IPaaS,而容器厂商和IaaS厂商的PaaS大致为APaaS。

APaaS的一般特性

大规模分布式系统

  • 完全模块化的分布式系统,保证云平台可靠性;

  • 每个模块单独存在和运行,通过消息总线进行通讯;

  • 系统耦合度低,便于弹性动态扩展;

弹性伸缩框架

  • 平台自身组件支持实时横向扩展;

  • 根据应用的负载情况,动态加载应用实例;

  • 应用实例支持实时水平扩展;

运维自动化

  • 日常运维操作简化;

  • 故障自动恢复;

应用部署简单化

  • 一键式应用快速部署;

  • 支持多种应用开发框架,包括Spring、.NET、Ruby on Rails,Node.js等;

  • 通过buildpack扩展运行不同语言应用的能力;

支持多种服务

  • 支持多种数据服务,包括MySQL、mongodb、PostgreSQL等;

  • 通过service broker组件扩展多种应用服务能力,包括数据库、中间件、缓存、云存储等。

主流PaaS平台架构及对比

了解了PaaS的分类,我们再来看看PaaS的具体技术对比。由于IPaaS具有很强的业务属性,因此这里我们主要来看一下更通用的APaaS,也是目前被大家最多提起的。说到PaaS,相信很多人都会把他和容器、Docker关联起来。下面来看几张图:

PaaS

上面这张图可以看出来从容器、编排、部署都自称为PaaS。

enter image description here

正如国内的容器厂商都自称为PaaS平台一样,目前大多数人提到PaaS都会想到容器。每过几年总会有新的概念出来。下面再来看一张图。

enter image description here

这张图很清晰的划分出了XaaS以及各种概念对应的平台。大家所熟知的容器平台在这里实际上是CaaS的一种。那么CaaS和PaaS有什么区别呢?我们接下来对比一下CaaS和PaaS里面最具代表性的两个平台:CaaS和CloudFoundry。

Docker/CaaS

Docker/CaaS 提供直接管理操作基础设施的性能,带来基础设施层面的灵活性。用户 通过直接操作容器可以更灵活的实现应用迁移、部署。但这个更加轻量的平台带来了用户学 习成本和使用复杂度的增加。

容器云平台的搭建只依托 Swarm/Mesos/K8s 等容器编排调度系统就可以实现,还需 要引入大量的第三方解决方案,例如日志、监控、网络等。这就意味着一定的试错成本,另 外第三方系统的成熟度发展不一,组成一套统一的云平台后进入生产环境的应用需要经过一 定周期的论证和验证。

Cloud Foundry 平台

Cloud Foundry 隐藏了基础设施层面的复杂度,提供应用层的管理操作,简化基础设 施和应用的构建管理,平台也使用容器技术,但仅仅是平台架构中的实现细节。通过 CF 可 以更加敏捷的实现应用开发、部署、业务实现等。

Cloud Foundry 的架构是一个相当完整的 PaaS 架构,模块丰富,平台自身可以提供 对于平台节点、应用的监控、管理,日志,自动化运维等完整的解决方案。每个模块都部署 在一个或多个虚拟机上。这些虚拟机是自动创建的,由 PaaS 管理他的生命周期。它的应用 部署跟 Docker 镜像部署不太一样,它是把程序包直接部署。一个命令行或是一个点击就可 以部署

在经过长时间的应用,Cloud Foundry 已有很多在生产环境的案例。Cloud Foundry 率先采用 RunC 作为容器运行时,而且刚刚做了一个 25 万个容器集群的测试,验 证了 PaaS+RunC 的大规模集群的支持。

可以这样来说:容器技术是PaaS平台的底层技术,是PaaS平台不可缺少的部分。但是把容器平台说成PaaS,未免会有点以偏概全了。

特性CloudfoundryDocker/CaaS
应用部署方式直接部署程序Release包需要制作Docker镜像
监控完整解决方案需要集成第三方工具
日志完整解决方案需要集成第三方工具
网络完整解决方案需要集成第三方工具
自动化运维可以和IaaS联动不支持IaaS联动

PaaS平台和SaaS应用市场的关系

大家有没有发现一个现象?10年以前,SaaS应用市场是非常少的。现在各大平台都会有自己的SaaS应用市场。出现这种现象的原因无外乎技术的进步,搭建SaaS应用市场的成本降低了。更确切的说:SaaS应用市场是PaaS平台的一种外延。在底层PaaS技术的支撑下,SaaS应用的开发、交付、运营的门槛大幅度的降低了。

基于PaaS平台构建的SaaS应用市场会逐步加快SaaS应用生态的发展。

PaaS平台下进行云原生应用开发

有了PaaS平台帮我们解决底层平台的问题,那么我们的应用开发者要怎么做才能开发出云原生应用呢?12-Factor 为构建如下的云原生应用提供了方法论:

  • 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。

  • 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。

  • 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。

  • 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。

  • 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展。

这套理论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。

下面我们一起来看看具体包含哪些要素:

  • 基准代码:一份基准代码,多份部署

  • 依赖:显式声明依赖关系

  • 配置:在环境中存储配置

  • 后端服务:把后端服务当作附加资源

  • 构建,发布,运行:严格分离构建和运行

  • 进程:以一个或多个无状态进程运行应用

  • 端口绑定:通过端口绑定提供服务

  • 并发:通过进程模型进行扩展

  • 易处理:快速启动和优雅终止可最大化健壮性

  • 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同

  • 日志:把日志当作事件流

  • 管理进程:后台管理任务当作一次性进程运行

PaaS的未来发展

先抛一个结论:PaaS是云的未来

IaaS是一个资源转售的生意,PaaS代表了云计算的未来,PaaS解决的是平台架构的问题,同时也是真正做到按需付费。对于业务客户而言,底层技术不会给他们带来直接的业务价值,这也就决定了软件开发商更应该聚焦在业务层。高并发、高可靠、存储服务、应用自身维护等和业务不直接关联的平台服务都可以借助PaaS技术来完成。现在的创业团队可以借助各类PaaS技术快速的创建高并发、高可靠的应用,未来这种模式也会进一步普及。

  • 更融合的调度 物理机、虚拟机和容器各有优势,一个复杂的应用场景会用到各计算平台的优势,融合调度未来必然会成为主流框架。

  • 更融合的编排 说到调度,就离不开编排。当前阶段上云是大趋势,私有云加公有云的模式会长期持续。那么融合的编排框架也必然会成为解决成本问题的一个重要选择。

  • 更细粒度的弹性 IaaS解决了基础设施的弹性,但是还不够。技术的发展会进一步细化弹性的粒度,往更节约的方向发展。

  • 更高的资源利用率 当前的技术及架构下,计算资源很大一部分时间都是闲置的。以有限的资源来应对更高的数据处理要求,资源利用率会随着云技术的发展进一步提高。


数字化浪潮下,企业如何紧跟时代的步伐,拥抱互联网,实现数字化转型?新模式新管理需要新技术新平台支持,对先进核心技术的掌握和应用将给企业带来全新的机会。企业级PaaS平台将促进和推动企业数字业务的使用,并帮助企业实现从创意到落地的最快转化。

下一代金蝶云作为中国首款自主可控的新一代企业级云原生PaaS平台,基于全新的云原生架构,结合企业业务特点,提供了开发服务云、社交服务云、大数据服务云、人工智能服务云、物联网服务云和云基础技术服务等一系列的平台级应用服务,帮助企业快速搭建数字化平台,助力大企业数字化转型与创新。

云计算被视为继 80 年代大型计算机到客户端/服务器的大转变之后的又一次革命,为我们带来了工作方式和商业模式的根本性改变,进而成为推动企业创新的引擎。云计算从最初的概念出现到如今的应用普及,已有十余年的时间。目前云计算进入大规模应用阶段,大量企业可以像使用水电等基础设施资源一样来使用IT资源。数字化浪潮下,云计算已经成为这个时代的必然选择。

根据2018年Gartner的最新研究报告,云计算仍是数字业务创新的战略平台。CIO面向应用架构和平台基础设施开展决策时,必须了解PaaS平台发展的关键趋势,并拥抱PaaS平台,以使其业务敏捷性最大化。基于Gartner对PaaS平台发展趋势的研究,新一代的PaaS平台必须基于云原生架构,进一步具备控制IaaS、CaaS等底层技术服务能力,屏蔽底层IaaS层技术的复杂性,提供云基础技术服务能力;进一步抽象企业业务模型,提供低代码的高生产力应用开发平台;同时PaaS平台会基于越来越成熟的AI技术、物联网技术、大数据技术,为平台赋予更多的平台级应用服务能力。

新一代企业级云原生PaaS平台

下一代金蝶云通过颠覆式创新全新打造了新一代企业级云原生PaaS平台,采用了全新的分布式架构,支持微服务、容器服务、DevOps等为代表的云原生基础架构,并独创了云端动态领域模型,支持云端个性化定制,是业界领先的企业级云原生PaaS平台,帮助客户轻松用云、快速创新、持续交付。

新一代企业级云原生PaaS平台 助力大企业数字化转型与创新

 

下一代金蝶云PaaS平台技术架构图

开发服务云

1.自主技术的云端动态领域模型(DDM)

基于金蝶25年企业服务经验积累锤炼的,拥有自主知识产权的云端动态领域模型是下一代金蝶云开发服务云的核心技术。该模型包括了元模型库、领域模型、模版库、动态解释引擎、建模工具等基础服务组件。并结合企业业务特点,封装了动态的表单模型、流程模型、服务模型和报表模型等业务模型。

2.企业级低代码可视化开发平台

下一代金蝶云提供了企业级低代码的可视化开发平台,可以轻松构建基于微服务架构的自定义应用。平台包括了微服务组件、开发服务、运行服务、服务管理、API服务框架、应用建模、云支撑服务与运维服务等,为云应用(SaaS服务)的开发、部署、运行及运营提供了一系列的服务及管理工具。

3.动态高效的流程服务平台

下一代金蝶云提供动态高效的流程服务平台,遵循BPMN2.0规范,基于动态模型元数据,通过业务模型库提供不同行业、不同业务类型的端到端业务流程模型,支持各种复杂业务应用场景、流程柔性动态配置、多系统流程集成,支撑企业业务高性能高可靠流转,简单易用、功能强大。

社交服务云

下一代金蝶云基于云之家提供的账号、组织、消息和业务分享等社交协作服务,连接员工、连接客户、连接业务,轻松连接一切工作。借助平台的社交能力,企业内外部打破部门壁垒与地域限制,自发形成工作小组,以网状的协作体系,高效地处理工作。

数据服务云

下一代金蝶云提供涵盖数据全生命周期的大数据基础设施服务——轻分析。轻分析是金蝶自主研发的,拥有独立知识产权和核心技术的数据云计算引擎和数据可视化平台,可以轻松连接到企业的关系型数据库、大数据处理平台、平面数据文件、领域实体模型等多种类型数据资产,仅通过简单拖拽,就可完成多维透视的图表呈现。轻分析支持嵌入式分析和主题式分析两大场景,千万级数据秒级呈现,让用户享受到极致流畅的数据分析体验。

人工智能服务云

随着AI技术的不断发展,企业应用的智能化需求变得越来越急迫。下一代金蝶云基于语音识别、图像识别、自然语言处理和深度学习算法等AI技术,搭建了统一的企业AI平台;通过与企业业务场景、企业数据等信息结合,提供了财务机器人、营业执照识别、发票识别、人脸认证、员工自助服务等标准AI应用,企业可在此基础上进行个性化扩展。通过企业AI模型抽象,基于隔离的数据进行训练,让每个用户都能训练出独有的AI服务。

物联网服务云

针对企业数字化、网络化、智能化的转型需求,下一代金蝶云全新打造了企业级物联网服务云,通过边缘计算数据盒实现工厂设备的快速连接和数据采集,为企业提供连接设备数据的边缘计算能力,支撑制造资源泛在连接、弹性伸缩、高效配置。

云基础技术服务

2013年,Pivotal 的 MattStine 提出了云原生(Cloud Native)的概念,凭借其优良的可伸缩性,云原生应用和服务也越来越受到青睐。CNCF(云原生计算基金会)给出了云原生应用的三大特征:容器化、DevOps、微服务。云原生架构包含了一系列的技术体系和应用工具,用来帮助企业快速、持续、可靠、规模化地交付业务软件。

下一代金蝶云PaaS平台,基于分布式、微服务、容器、DevOps等为代表的云原生技术,结合企业业务特点,实现了全新架构设计,为企业应用提供快速迭代、高可用的基础核心能力。

新一代企业级云原生PaaS平台 助力大企业数字化转型与创新

 

下一代金蝶云云基础技术架构

1.分布式架构

彻底摒弃传统ERP单一数据库,单一应用服务器模式,以分布式技术作为下一代金蝶云的核心技术,把所有服务和节点全部重新设计,使之分布式化,保证单点故障依然可用,包括了微服务化的应用服务、分布式配置服务、分布式数据库、分布式计算框架、分布式缓存服务、分布式APM、分布式日志管理等。

2.微服务架构

下一代金蝶云微服务架构,可以让过去复杂、庞大的管理信息系统,以更小颗粒度、更敏捷的服务方式提供。不同的应用可以独立部署与互相隔离,服务之间通过轻量级API进行通信。服务节点都会纳入分布式集群中,并支持弹性扩容。下一代金蝶云对微服务框架的服务注册及发现、网关、路由、容错与限流及监控等模块进行了改造,以更好的适配企业业务需要。

3.容器服务架构

下一代金蝶云支持微服务部署在Docker中,Docker运行在IaaS层虚拟机上。下一代金蝶云基于Kubernetes技术,提供了统一的容器服务,用户可以方便的管理和编排容器集群。下一代金蝶云支持公有云、私有云、混合云等多种云部署模式,公有云支持在AWS、华为云、京东云等主流云厂商上部署。

4.DevOps

下一代金蝶云使用Devops研发理念,将敏捷研发流程和CI/CD流程结合起来,可以做到随需发布,缩短开发周期,提高部署频率,让产品功能更快的呈现给客户。每次代码提交并完成自动构建后,都会经过静态代码扫描、单元测试、冒烟测试、自动化全回归测试等一系列质量保证机制,让发布内容稳定可靠,强大的自动化测试平台,为客户提供高质量交付保障。