1.3 云计算的分类
云计算的分类有多种,按照服务类型(交付方式)分为IaaS、PaaS和SaaS。
1.3.1 IaaS
IaaS(Infrastructure as a Service),基础设施即服务,就是将基础设施当作服务对外输出,那么什么是基础设施呢?计算、存储、网络这些原始资源就是基础设施资源,通过互联网对外提供服务。典型的例子是Amazon的EC2服务,用户可以通过他们的管理页面或者API创建一台EC2实例(虚拟机),然后直接通过浏览器或者通过SSH客户端登录控制台,而不再需要考虑物理服务器购买、网络的布线、操作系统安装等烦琐的传统IT基础运维工作。如果虚拟机还需要挂载存储,只需要在页面单击挂载,设定存储大小,便可以非常方便地实现给主机挂载存储。最后,当用户不再需要这个实例时,可以直接销毁,终止计费,简单且高效。虚拟化是IaaS实现的基础,通过计算虚拟化、网络虚拟化和存储虚拟化将物理资源整合成虚拟的资源池,然后将资源以更小的粒度提供给资源申请者,从而完成资源的二次分配。
1.3.2 PaaS
PaaS(Platform as a Service),平台即服务,它直接为用户提供一套平台,包括语言运行环境、编程框架及数据存储中间件等一系列功能。这个平台可以是Java开发平台,用户只需要在遵守平台开发规范的前提下,编写自己的业务代码,单击运行,平台就会自动完成代码编译和打包,以及程序所需的数据存储(例如MySQL),即通过调用SDK或者API就可以使用平台,使得用户可以更加关注自己的业务代码的编写。很早之前,Google就推出了Google App Engine服务,但最终并没有流行起来,主要是和它过强的代码侵入性相关。最近几年,容器和Kubernetes技术的不断成熟,为PaaS平台的实现提供了一种新的途径。通过将业务代码打包到容器的镜像内,再通过Kubernetes容器调度和运行管理对外提供服务,并且可以自动伸缩、滚动升级等。PaaS将管理的对象从资源升级到服务,面向接口编程和运维,PaaS平台的本质就是自动化编译构建及自动化服务运维。
1.3.3 SaaS
SaaS(Software as a Service),软件即服务,它是最高层的抽象,对于最终用户,它不关心任何技术相关内容,以服务的方式交付。我们使用的在线云编辑器就是一种SaaS服务,只需要通过浏览器就可以在线编辑Word或者PPT,并且可以云端保存,而且只要在能够连接到互联网的情况下,都可以编辑,用户不需要关心背后的实现细节。SaaS将会是未来应用交付的最优方式,浏览器在大部分应用场景中会逐渐取代桌面客户端程序,SaaS将应用的最终形态直接交付使用者,向用户暴露更少的技术细节。很多SaaS的APM(Application Performance Management,应用性能管理)服务可以简单通过在浏览器配置一个全球的网站延迟检查,获取指定网站在全球的访问延迟,而不用自己搭建任何服务。
图1-1是应用层次结构,可以看到每一种云服务类型。对于用户的抽象层次,可以明显看到从IaaS到SaaS,用户对底层技术的依赖越来越低,使用的方式越来越便捷,相应对底层技术的要求也越来越高。
图1-1 应用层次结构
最后,通过一个简短的生活例子总结一下,如果需要一份宫保鸡丁的炒菜(部署自己的一套服务),传统的IT基础环境下,你需要先去菜市场购买食材、买电、买锅、买燃气,以及菜谱等(购买服务器、网络设备等)。IaaS提供的服务就方便很多了,它已经提供了基本食材、水和燃气等,可以随意使用,那么还需要去摘菜、洗菜、切菜、开火、开油烟机等一些环境准备的操作(配置运行环境,如安装JDK等操作);PaaS提供的能力专注于平台服务,它已经为你提供了一套便捷的环境,锅已经在加热,油烟机已经打开,配菜整齐的摆放,只需要关注怎么去烹饪(服务配置和启动)即可,但这不是终极的目标,仍需要烹饪环节;如果你需要一份宫保鸡丁,直接单击一次鼠标就可以获得,这就是SaaS,直接提供给最终用户最高级的服务形态。
伴随着时代的发展,也出现了一些新的服务类型,例如FaaS(Function as a Service),AWS的Lambda表达式便是最典型的案例,通过定义一些CRUD操作函数,在特定事件下触发这些函数,并执行,例如查询用户函数,在前端查询用户的请求,请求达到之时,便会被触发,至于函数的业务逻辑便可以由开发者自己定义。从这个方面说,它是符合PaaS概念的,但它相对于普通的PaaS有着独特之处,FaaS是一种基于事件触发,可以为了某一次请求而启动整个平台,然后在请求结束后释放资源,这种Serverless架构是比微服务更加细粒度的服务提供方式。整个IT技术也是朝着面向业务、面向服务的架构演进的,开发人员只需要关注自己的业务逻辑,逐渐摆脱对底层硬件和中间件的依赖,提高开发效率,加速开发周期。Serverless这个单词的意思是无服务,但并非不需要服务器的运行,而是将第三方后端服务和包含自定义服务的代码的容器整合到一起的应用,从而降低使用者的运营和运维成本,比如AWS的Lambda、Google Cloud Functions,以及开源的OpenFaaS (https://github.com/openfaas/faas)等。然而,Serverless在具有快速扩展、降低维护成本等优点的同时,也存在自身问题。在使用方(开发者)放弃了维护的权利情况下,当服务出现问题时,定位问题调试等方面将带来巨大麻烦,这对服务的监控提出了更高的要求。而且Serverless的应用对于超过3G内存的功能都必须重新设计,否则,将无法运行,而且在公有云场景中很难实现将整个安全和数据等一系列东西交托出去。
将容器当作一种服务类型的CaaS(Container as a Service),通过容器化使开发人员和运维人员可以在这里共同构建、迁移和运行应用程序。CaaS的能力与PaaS相似,不再单独阐述,CaaS只是PaaS的一种具体实现形式。还有BaaS(区块链即服务)、TaaS(TensorFlow即服务)等,这些都是SaaS的应用。
云计算除了按照服务类型分类,还可以按照服务范围分为私有云、公有云和混合云。
1.3.4 私有云
私有云,顾名思义,就是企业内部私有化部署的,为企业内部提供云服务。私有云的主要目的是充分利用自有物理服务器资源,更加安全便捷地获取云服务,尤其在金融行业,为了数据的保密和安全,通常会采用私有化部署。私有云的特点是一般规模比较小、单集群或者同城多集群部署、几千级别的服务器数量、对内部隔离和安全要求比较低,当然一个企业内部不同部门的资源隔离也是必须的。为了适应不同企业的组织规划和流程,通常还会根据企业需求,定制一些特有的功能,这也是当前很多CMP运管平台专攻的市场。私有云的定制化让私有云更加贴近客户的需求、接近数据源的部署方式,更加高效、便捷。
2018年,中国私有云总市场规模约512.4亿元,其中,华为占据着绝对的领先优势。部署案例主要集中在政府、制造业、金融等行业。私有云的部署从盲目追从社区热度逐渐演变为生产落地。
1.3.5 公有云
公有云是当前最为大众熟知的云服务提供方式,向全球用户提供云服务,当前最大几个公有云厂商包括AWS、微软、Google和阿里云。当然,在亚太地区,阿里云一枝独秀。公有云的特点是集群规模很大,百万级别的服务器,全球多区域部署的数据中心。它们在系统安全、防攻击,以及可靠性等方面会有更高的要求。
1.3.6 混合云
混合云是将上面两种场景结合的产物,既然企业已经有了私有云,为什么还需要公有云服务呢?一方面是对数据安全的保护,不能将所有服务都迁移至公有云部署;另一方面,面对突发流量的情况,可以利用公有云快速伸缩的特性,分担业务流量,最典型的就是中国铁路12306通过阿里云分担车票查询服务的请求。
为了管理混合云,企业内部通常会定制一套混合云管理系统,同时对接私有云和公有云的API,但混合云实施的难点是解决服务之间的调用、网络互连和资源调度等问题。
笔者对于云发展趋势的观点如下:未来的服务将会是“一朵云”,公有云将是未来的主旋律,除了金融银行、政府及大型企业会选择自建私有云或者混合云,大部分企业都将会选择公有云,并逐渐意识到,IT优势在于自己的业务系统,而非IT基础建设,特别是中小型创业公司,从成本角度考虑都会选择使用公有云。而且,公有云市场的竞争激烈程度将日益加剧,最终只剩下几大公有云寡头。
云计算还可以根据行业划分为政务云(面向政府行业)、金融云(面向金融行业)、教育云(面向教育行业)等,根据每个行业的不同行业特征,提供定制的云服务。