Luo Hao

Paas、IaaS等

rehoni / 2020-07-12


前一阵子这几个概念炒得很火,时不时有有叫XaaS的产品上市,这几个概念本身也不容易理解,所以很多人都是云里雾里,不知道有什么区别。因此本文以通俗的例子和语言来解释一下这几个概念到底是什么意思。

整体而言:

IaaS 是云服务的最底层,主要提供一些基础资源。

PaaS 提供软件部署平台(runtime),抽象掉了硬件和操作系统细节,可以无缝地扩展(scaling)。开发者只需要关注自己的业务逻辑,不需要关注底层。

SaaS 是软件的开发、管理、部署都交给第三方,不需要关心技术问题,可以拿来即用。

那么BaaS和FaaS又是什么呢?

BaaS:Backend as a Service(后端即服务)

服务商为客户(开发者)提供整合云后端的服务,如提供文件存储、数据存储、推送服务、身份验证服务等功能,以帮助开发者快速开发应用。

FaaS:Function as a service(函数即服务)

无服务器计算,当前使用最广泛的是AWS的Lambada。

服务商提供一个平台,允许客户开发、运行和管理应用程序功能,而无需构建和维护通常与开发和启动应用程序相关的基础架构的复杂性。 按照此模型构建应用程序是实现“无服务器”体系结构的一种方式,通常在构建微服务应用程序时使用。

其实还有很多的aaS,比如DaaS(Data as a service,数据即服务)、NaaS(Network as a service,网络即服务) 等等。

一个例子

很多人举例子,都使用了一个做披萨的例子,但是这个例子实际上是不太恰当了,完全脱离了本意,与实际场景也很难对应上。为了更好地理解,我直接以这些概念本身应用的场景作为例子来讲解。

比如说,你有一家制造衣服的工厂,你准备把工厂里面的衣服通过网上渠道卖出去。这是这件事情的出发点。

接下去,你从朋友那里了解到,弄一个电商系统就可以了,这样就可以把衣服放到网上去卖,顾客可以在你的电商系统上面买衣服。

再接下去,你继续了解到,要找一个产品经理设计一个电商系统。所以这时候你找了一个产品经理。

之后,产品经理把电商系统设计好了,他告诉你,需要程序员把设计好的东西开发出来,他还告诉你,分别至少需要一个前端程序员和一个后端程序员。

你又问什么要这么多人,产品经理告诉你,后端程序员写业务逻辑,前端程序员写页面展示,他们通过接口传输数据,这叫前后端分离。

再接下来,你找了程序员,东西也开发好了,程序员告诉你,这东西还不能直接用,要放到服务器上面。

接下去你又买了服务器,程序员有告诉你,他不会部署服务器,要找专门的运维,才能部署服务器。

于是你又招了运维人员来,服务器也部署好了,这时候程序员告诉你,还是不能用,还要搭软件的环境,因为是他是用PHP语言写的,还要搭一个PHP的环境才能运行程序。

最后,环境搭好了,程序终于跑起来了,你也终于累瘫了。为了弄一个电商系统,你总共招了1个产品经理,1个前端工程师,1个后端工程师,1个运维工程师,还买了一台服务器。

SaaS

这个时候,你意识到,自己只是想要建立网上渠道来卖衣服,只要弄个别人已经开发好的电商系统就够了,完全没必要自己去开发一套新的,能用就好,管他谁开发的呢。

这就是SaaS(Software as a Service,软件即服务)的概念,直接购买第三方服务商已经开发好的软件来使用,从而免去了自己去组建一个团队来开发的麻烦。

我们可以算一笔账,来计算使用SaaS节省下来的费用,以上面的这个例子,搭建这样一个团队,按最低配置算,需要至少4人,开发周期至少2月,人力成本算平均1.5W/人·月,那就至少需要12W,这还不包括后期维护的成本。但是如果使用SaaS,每年只需要付几百到几千的费用,就能达到更好的效果,两者相比,差距很明显。

实际上,第三方服务商开发这样一套软件,也需要这样多的成本,为什么他就能挣钱呢?原因在于,他开发出来的软件,不是只卖给一个人用的,可能卖给了成千上万的人使用。可以按照一个用户一年1000元计算,只要能够卖给120个用户以上,就稳赚不赔了。这就是SaaS的商业模式。

需要注意的是,SaaS卖的不仅是软件,而是对软件开箱即用的服务,软件是部署在SaaS服务商那里的,不需要客户自行部署软件运营的环境和服务器等。像有赞、十二赞、微盟等,就是典型的SaaS服务商,注册账号后就可以直接使用一套完整的电商系统,无需自己进行任何开发工作。

你发现,使用SaaS,上面原本要招的4个人你一个都不用招了,服务器也不用买了,省了一大笔开支。

BaaS

用了一段时间的SaaS后,你发现,SaaS好是好,但是缺点也有,那就是东西都被定好了,自己没得改。自己想在某个页面加一个亮闪闪的东西上去,结果被告知没得改,SaaS服务商答复说,那么多用户在用,不能为了你一个人而改。

你了解到,自己要改的东西,只需要前端改了就可以了,后端部分完全不需要改。这时候你动脑筋,可以招了前端工程师,前端页面自己做,后端部分还是用服务商的。

这就是BaaS(Backend as a Service,后端即服务),自己只需要开发前端部分,剩下的所有都交给了服务商。经常说的“后端云”就是BaaS的意思,例如像LeanCloud、Bomb等就是典型的BaaS服务商。

BaaS模式跟SaaS模式比较,多出了需要自己开发前端。这就至少需要1个前端工程师了,但是这种方案跟最初的方案比,还是能够省下1个产品经理,1个后端工程师,1个运维和1台服务器。

PaaS

随着业务规模的变大,你发现,即便是使用BaaS,也有很多不能满足的地方,因为后端被完全限制了,后端部分决定了你的系统能够做什么事情,前端只是做一个展现以及作为做这些事情的一个渠道,后端做不到的事情,前端无论怎么改都做不到。

于是你又招了1个后端工程师来进行开发,考虑到需要自行设计业务逻辑,同时也招了1个产品经理,自行设计开发一个电商系统。但是软件运行的环节还是使用服务商的。

这就是PaaS(Platform as a Service,平台即服务),自己只需关心软件本身,至于软件运行的环境由服务商提供。我们常说的云引擎、云容器等就是PaaS。例如你的程序是用PHP写的,你就可以选一个已经搭建好PHP运行环境的平台,如果是用Python写的,就选一个搭建好Python环境的,以此类推。

使用PaaS跟最初的方案比,能够省下1个运维和1台服务器。

IaaS

使用了一段时间的PaaS,你发现缺点是,可能有的环境服务商没提供或者支持不好,于是你决定环境还是自己进行搭配,服务商只需要提供能够运行的服务器就可以了。

这就是IaaS(Infrastructure as a Service,基础设施即服务),由服务商提供服务器,一般为云主机,客户自行搭建环境部署软件。例如阿里云、腾讯云等就是典型的IaaS服务商。

总结

从上面的过程中可以看出,这些服务跟最初的方案比较,只是将一部分工作交给了第三方服务商去完成,也就是将一部分不重要的工作交给更为专业的第三方服务商,我们可以做出一个以下的对比图(打勾表示需要自己做的部分,打叉表示交给第三方服务商做的部分):

从上图中应该就可以很明显看出,各种服务的区别,下次要辨别某个服务属于什么类型,就直接拿出这张图比较吧。