云计算按提供服务层次,通常划分为三层:
- IaaS :基础构架即服务。这一层主要是对基础设施进行管理以给用户提供资源使用,如提供计算服务、安全备份、负载管理等。
- PaaS :平台即服务。这一层主要是基于IaaS之上,简化应用的部署、维护等,提供一些通用平台软件能力,如数据挖掘、系统管理、编程模型等。
- SaaS :软件即服务。这一层主要是面向终端客户,提供一站式的解决方案。如提供CRM、HRM、SCM等,是可以直接使用其服务。
个人一直从事PaaS的研发,而我们做的又是面向电信领域的PaaS。与外面的朋又交流发现,大家对PaaS的理解是不一样的,主要还是由于PaaS的本质是要解决的问题是:
简化开发,打通DevOps,实现业务应用的敏捷与弹性。
不同的业务领域,要面对是不同的传统应用架构如何通过PaaS平台迁移到云上
,这就会导致各自对PaaS的需求或多或少有着不同的差异,理解不一样也是正常的。
PaaS定义
NIST(National Institute Of Standards and Technoloy)曾对PaaS有过经典的定义:
面向应用的核心平台,封装应用分布式复杂性,实现应用层自动化、高可用。
从功能定义来看,主要包含三个方面:
- 应用托管:可将开发者创建或拥有的应用部署到云基础设施上。其价值是应用对基础设施资源的获取自动化。
- 应用开发:开发者使用供应商提供的运行环境,编程语言框架,服务以及工具等来构建应用。其价值是应用对中间件服务的获取自动化,软件开发自动化。
- 应用运维:应用的运维无需管理或控制底下的基础设施(计算、网络、存储、OS等),可以控制已部署的应用,并有可能对应用托管的环境、其配置进行控制。其价值是应用的运维管理(伸缩,配置,升级等)自动化。
所以PaaS是以应用开发为中心,解决如下三个问题:
- 应用全生命周期管理:从应用的开发、部署,到运维的全流程生命周期管理。开发者可使用供应商提供的运行环境,编程语言框架,服务与工具等快速构建应用;通过平台将应用部署到云基础设施上,并对应用进行自动伸缩,弹性扩展,灰度发布等;对上线的应用可以实现监控管理,故障分析,自动迁移,自动恢复,为应用提供高用性,高可扩展性。
- 中间件云服务:提供丰富的预集成服务,如分布式数据库服务,分布式消息队列服务,分布式缓存服务等。把通用的软件能力服务化,使得应用能快速拥有分布式的高用性,高可扩展性。同时中间件服务让多租能力变得可行,在中间件云服务层,不同的租户可参共享或隔离不同的服务资源。
- 基础资源的高效利用:对底层资源的抽象,可以按用户要求分配的相应用资源部署实例。大规模的应用部署在云基础设施上,PaaS可能通过调度算法,把应用实例调度到不同的资源上运行。通过资源层的隔离,尽可能地共享或平摊资源,以提高资源整体使用率,从而降低基础设施的投入。
PaaS的发展历史
早期公有云,主要是提供高效多语言多框架的开发与运维环境:
- 2005年,Rackspace,提供托管PHP与.Net语言的Web应用,不支持多租户,API和自动伸缩。
- 2007年,Heroku/Force.com,支持Ruby语言,引进数据库,企业工作流服务,主要是支持托管CRM相关的应用。
- 2008年,GAE, Google发布面向WEB的开发和托管的平台,早期支持python、java语言。
开源PaaS成长期,主要是提供应用快速部署到基础设施上的能力:
- 2008年,CloudFoundry,提供支持多语言,多框架的可移植的PaaS平台。2011年被VMWare收获,其后开源。
- 2010年,OpenShift,Redhat发布OpenShift,支持多种异构I层。受2011的CloudFoundry,也开源。
- 2010年,Cloudify,Gigaspace开始基于Java构建支持多种异构I层的PaaS,重点在应用部署,并开源。
在2014年之后,PaaS也不在仅仅是互联网的公有云玩法,而是百花齐放。软件开发管理模式正在PaaS技术的驱动下,经历一场新的变革:
- 传统软件巨头份份杀人:Oracle,SAP,IBM,HP等发布云战略,构建PaaS平台,极力在其各自的传统领域打造云生态系统。
- 公有云PaaS呈现三国鼎立:AWS, Azure与GAE的PaaS平台走向成熟,构建方式呈现多层次,应用可以按需组合;并且在提供的服务数量,服务性能不断提升。
- PaaS开源项目爆发:早期的CloudFoundry,OpenShift,Cloudify历经多个版本也走向成熟;轻量级的PaaS不断涌现,如Apache Stratos, Deio, Flynn等;面向应用与资源调度的PaaS开源抢占风头,Docker,CoreOS, Mesos, Kubernetes。
可以说,当前的PaaS也不在局限于NIST的经典定义,而是在大规模的云基础设施上,提供更多的高性能的云服务,更高效的资源使用方式。PaaS已经呈现多样形态,在灵活性和易用性上不断地提升。同时多形态并存,但也没有一个形态可以满足所有用户需求。
PaaS的发展趋势
随着新技术的出现,目前PaaS的发展趋势主是容器化,微服务化,分布式化。
- 容器化
Docker简化了软件打包,形成了新的软件分发标准;同时解决了应用环境的一致性,加快了应用的部署,DevOps; Docker能更粒度地的资源分割。这些特性使得Docker技术快速应用,其技术以及生态的发展正对PaaS产生革命性的冲击与影响。基于Docker的PaaS平台也是层出不穷,如OpenShift,CloudFoundry,Deis与Flynn等,而公有云AWS, Azure,GCE与IBM等都份份支持Docker容器。
- 微服务化
传统的集中式的三层架构,转变到微服务架构。应用由一组无状态,功能分离,可独立部署的小服务集组合而成。而每个服务又具体语言多样性,不同的开发团队可以选择其熟悉与场景适合的语言。服务间是解耦合的,每个服务内部可能快速上线,而不影响其它的服务。某个服务的故障只会影响到自己。微服务化架构下,PaaS平台要支持对微服务架构的应用平滑地演进。
- 分布式化
传统PaaS面临着缺少大规模跨DC跨集群的管理能力;资源分配算法比较简单,不支持应用感知的多集群等资源分配需求;资源分配并行技术缺少在大量资源需求时验证,分配速度不理想。但无论是公有云还是私有云大规模地发展,都驱动了大规模集群管理与资源跨Region跨DC跨AZ调度。当前基于容器集群管理编排、资源调度技术还在不断地演进发展。
PaaS构建新目标
应用敏捷性,集中式朝分布式架构演进,构建PaaS时需考虑如下:
- PaaS支持应用渐进式地演进:构建基础通用技术共享平台(如微服务框架,DevOps流水线,通用中间件服务等),逐步迁移改造应用,让应用更好地Cloud Native。
- PaaS支持应用的高用性:基于Design for failure理念,构建基础的可靠性工具集,通过软件来实现应用层的高可用性,支持跨DC,AZ等高用性部署;支持跨2地3中心的高可用性路由;支持应用分布式下事务管理,数据的一致性等。
大规模的基础设施建设,需要打通IaaS/PaaS,构建基于应用层的统一资源编排调度:
- 全自动化:支持应用自动化部署,伸缩,灰度发布等;开发环境的自助式获取与应用自动化验证。
- 混合调度:支持基于物理机,虚拟机,以及容器在应用层的不同需求下的混合调度。
开放性才能让PaaS更具有生命力,PaaS需易集成,无锁定,让应用可以快速平滑迁移:
- 多IaaS: 公有层场景下,可能由PaaS供应用商自建IaaS。但在私有云场景下,支持多IaaS对接是非常有价值的。
- 多运行环境: 微服务化,不同的服务可能采用不语言开发,这要求PaaS支持多语言的运行环境。
- 多服务:无论是平台本身提供的中间件云服务,PaaS还要能支持第三方传统服务的接入以供应用使用。
- 多工具:目前开源的自动化工具非常多,PaaS平台需要考虑支持可以集成多种工具,拉通现有应用的DevOps。