SaaS、PaaS、IaaS

显然,一图胜千言万语:

iaas-paas-saas

途中蓝色部分是你在自行配置一个软件时需要搭建的,红色的是在相应的云服务情况下已经帮你搭建的。

细节部分

让我们先来理清一个现代软件产品(非单机产品)所应具有开发内容:

  1. 一个用户接口,也就是UI;现在我们更倾向于做GUI。比如,淘宝网的“搜索框”、“购物车”等,这些都是对底层阿里支付接口的图形化封装。有时候也可以简单把它叫做前端,但实际上一个图形化接口只是前端的一部分。在上图中这些都对应着"Applications"这个内容。
  2. 客户端数据。例如,QQ音乐在你电脑上缓存的音频数据、与后台的通信数据、你在服务器上尚未进入数据库的临时信息(登录凭证)。
  3. 运行环境。例如JRE、C#、各种动态链接库等。
  4. 中间件。例如Web服务的Tomcat、Spring的各种切面,包括前后端做数据加密、混淆和解码的程序等等等。
  5. 操作系统
  6. 数据可视化。对于一个开发者,需要监控你网站的流量、各种软件营销活动的KPI等,这些都需要一些监控平台来实现。
  7. 服务器。服务器和中间件并不是一个东西,尽管大部分时候它们会混淆在一起。例如Nginx,当它作为静态文件服务器时它的作用是一个服务器;当它用作反向代理服务器做负载均衡时,它更像是一个中间件。服务器总偏向于运转流程,而中间件则负责具体某种业务。
  8. 数据存储,或者我们习惯上说的数据库。但这里的概念还涉及到硬件部分,比如各种磁盘阵列等。
  9. 组网。组网是一个非常复杂的过程,如果你给你家组过网或者虚拟专用网络,你会对此深有体会。除此之外,你还需要关心机房的网络安全和运营维护等。

差异化

1. IaaS

先说""架构即服务"",我们熟悉的阿里云的弹性计算(ESC)和国内外各种云服务商对外出售的云服务器都属于这个范畴。

以阿里云为例子,阿里在全国各地都设置了机房,有磁盘阵列、有运算单元,并把各种算力做了虚拟化对外出售。同时阿里云还拥有大量IP资源,并完成复杂的组网过程。阿里云还提供了"阿里云控制台",复杂监控服务器的各种数据,画出详细的统计图表。所以,在理论上,一个IaaS服务商把软件开发过程中的6~9都完成了,你只需要关注上层实现即可。

2. PaaS

我建议先跳过PaaS去看SaaS,再回来看PaaS会有更深的体会。

如果说IaaS对于开发者而来过于硬核,因为很多事都要亲历亲为;SaaS对开发者的局限性过大,因为它的封装性过高,那么PaaS则是一种折中方案。

在PaaS模式中,你只需要关心业务逻辑和你的数据交互;程序跑在什么地方、兼容性如何、网络条件怎么控制等等问题你都不需要了解。

举一个简单的例子,Algolia提供了云搜索服务,你在搭建自己的网站时不再需要关心如何做站内搜索、关键字怎么定数据库怎么写,你只需要调用该公司给定API即可。

同样,在腾讯小程序的云开发中,你不需要关心如何去控制IOS的相机和安卓的相机,不需要知道IOS和安卓的本地存储结构、不再需要搭建自己的云服务器和数据库及中间件,你所需要的只有氪金购买PaaS和调用PaaS所提供的API。

3. SaaS

"软件即服务"主要时面向用户的。

例如,假设你是一个商贩,想要批发点什么东西,你会选择打开淘宝网。你不用关心数据、网络、图形接口和业务逻辑,你只需要购买物品,就可以为你的用户提供"零售商品"。

作为一个程序员,你可以选择使用纯文本编辑器编程也可以使用强大的IDE,你不用操心背后的各种汇编和编译优化,IDE提供商给你提供的就是SaaS服务;把这个概念放到云环境中来,你可以使用“腾讯问卷”来进行统计调查然后编写爬虫爬取你的问卷数据做二次开发,“腾讯问卷”所提供的其实就是SaaS。

再比如百度网盘、印象笔记等等,都是此类产品。

其他通俗化的解释

什么是云?