3.4 SaaS
SaaS以服务的形式对外提供应用程序的能力,其本质等同于通过SOA形式对外暴露服务,供最终用户使用。SaaS与PaaS长期混淆的地方是,虽然在理论讲述或讨论时,SaaS分层总在PaaS之上,但是大部分SaaS不是基于PaaS开发的,而是直接在IaaS上开发的。所以可以说,SaaS和PaaS是两种不同的云计算对外提供服务的方式。
这里以人工智能程序为例进行介绍。由于人工智能程序的算法依赖大量的数据,而这些数据往往需要长期积累,如果没有数据,人工智能算法就无法发挥作用,所以人工智能应用很少像IaaS和PaaS一样,通过较为简单的部署流程就可以交付使用。因为若没有足量的相关数据做训练,人工智能程序的使用效果就会很差。
一些有能力的云计算厂商在某些行业已经积累了大量数据,所以他们可以将已经训练好的人工智能程序部署在自己的云平台产品中,对外暴露一个服务接口提供能力。比如用户想鉴别一个文本是否涉及暴力,直接用这个云端服务就可以了。这样一来,人工智能程序就作为SaaS平台被纳入云计算中。
云计算架构的演进过程可以用图3-13来说明。
图 3-13
伴随底层架构的不断演进,云计算的发展经历了四个时期。
云计算 1.0:IT 基础设施虚拟化。通过引入虚拟化技术,将应用与底层基础设施彻底分离、解耦,将多个应用及其运行环境部署在同一台物理服务器上。在虚拟化之前,数据中心运维人员手动管理物理服务器、存储及网络硬件。在虚拟化之后,运维人员的管理对象从物理设备变成了虚拟机、存储卷、虚拟交换机等,但工作量并没有减少。在这个阶段,数据中心的物理服务器还只是孤岛式的虚拟化资源池,无法实现自动化、统一管理。
云计算2.0:IT基础设施IaaS化。通过引入资源调度及基础设施标准化服务,使得原本需要通过数据中心管理人员人工干预的IT基础设施申请、配置、释放等过程自动化。这大幅提升了基础设施的快速、敏捷发放能力,实现了资源动态弹性按需供给。此外,虚拟化、自动化资源的服务对象从先前的数据中心用户扩展到了网络上的每个租户,租户可以按照自身的需求自助创建、配置、释放虚拟化资源。并且通过自动化手段,使得应用运行环境的供给、安装及配置可基于虚拟机镜像固化下来,从而在后续部署过程中简化了复杂且重复的安装及配置过程。
云计算3.0:多云级联。实现多云同构及异构纳管,并且通过混合云模式打通私有云和公有云。通过引入统一的云管理平台,将物理上分布在多个数据中心的异构云平台统一整合为一个更大的逻辑资源池,并对外抽象为标准化的基础设施服务。其租户仅需要定义所需的资源数量、服务等级协议(SLA)/服务质量(QoS)及安全隔离要求,即可从底层基础设施中以自动化的模式弹性、按需、敏捷地获取资源。被使用的资源可以分布在不同的云平台中,而且可以以私有云或公有云的模式部署。
云计算4.0:应用的云原生化。除了云平台本身技术的进步,云上的应用也需要逐步从单体、小规模、有状态、进程式、烟囱式向云原生应用模式转变。云原生化主要是通过容器编排技术来实现应用的分布式和高并发要求,保障应用的快速启动、大规模管理、动态编排,从而实现应用自身的上云改造。
云计算的发展历史如下。
2006年:Amazon率先推出了基于开源Xen开发的EC2弹性伸缩服务,使用户可以在公有云上申请应用所需的虚拟机。EC2借助提供Web服务的方式,让用户可以弹性地拥有自己的虚拟机,用户可以在虚拟机上运行任何应用。EC2提供了可调整的云计算能力,使应用开发人员所需的底层资源供给变得更为容易。
2008年:Google发布了Google App Engine,它是一款让用户可以在Google的IaaS上运行应用程序的平台产品。Google App Engine应用程序易于构建和维护,并可随着用户的访问量和数据存储需求的增长而轻松扩展,它不需要维护服务器,只需上传应用程序,就可以立即为用户提供相应的服务。
2009年:Heroku推出了第一款PaaS服务,Heroku在基础操作系统Debian之上提供了多种编程语言的开发、运行环境。初期它仅支持Ruby,后来又增加了对Java、Node.js、Scala、Clojure、Python、PHP和Perl等多种语言的支持。
2010 年:Microsoft 推出了 IaaS+PaaS 平台 Azure,大举进入云计算市场。Rackspace和NASA正式发布了开源的IaaS云控制软件OpenStack,帮助云服务商和企业构建类似于Amazon EC2和S3的IaaS,目前它已经成为IaaS私有云的事实标准。
2011年:Pivotal发布了开源的PaaS平台Cloud Foundry,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在短时间内部署和扩展应用程序,无须担心任何基础架构的问题。
2013年:Google正式推出了IaaS服务Google Cloud Engine,宣告云计算三大巨头——Amazon、Microsoft、Google的大战开始。
2014年:Amazon推出了首款FaaS(Function as a Service)产品Lambda,用户无须预配置或管理服务器即可运行代码,标志着云上应用进入Serverless(无服务)时代。
2015年后,云计算本身的发展就进入了比较平缓的阶段,整个行业的注意力转移到了更为热点的“云原生”上。
综上所述,我们从虚拟化的不足、云平台、云计算的发展、云计算的特点等方面介绍了云计算。云计算的核心目的是提供标准化的、云化的资源给上层应用,也就是虚拟机、虚拟存储、虚拟网络、应用运行时环境及依赖。云计算以一种灵活的方式提供完整的云化资源来支持上层应用,让应用无须担心下层的资源分配调度,使开发人员将更多精力放在应用本身上,如图3-14所示。
图 3-14
通过本章内容不难发现,在传统的计算服务模式中,需要通过较多的手工操作或脚本方式来部署虚拟机、操作系统、数据库、Web服务器等,随着应用越来越多、越来越复杂,其部署实施和运维工作量则呈指数级增长。但通过云计算的方式,让基础设施即代码(IaC),通过声明式的方式实现基础设施运维自动化,像对待软件一样对待基础设施,用编写、执行代码的方式来定义、部署、更新和释放基础设施资源,从而极大程度地减少实施和运维的工作量与难度,使开发人员将更多注意力放在应用本身上。
与手动配置相比,基础设施即代码的优势显而易见。
自助服务:由于将基础设施定义为代码,因此整个部署和运维过程可以自动化,并且可以由 DevOps 团队中的任何人启动,有基础设施需求的用户可以在需要时获得所需的资源。
幂等性:幂等性意味着定义了“所需状态”,并且无论运行脚本多少次,结果都是相同的。它检查当前状态和所需状态,并仅将所需的更改予以实施。而使用Bash脚本很难做到这一点。
降低成本:可以降低配置所需的时间和精力。
更快的环境交付:快速为开发、测试和生产配置基础设施。由于部署过程是自动化的,因此它也是一致且可重复的。
以上这些,就是使用云计算为应用构建底层计算架构时所具有的最大优势。