理解Stream(一)——串行与终止操作
写在前面
上篇IaaS-PaaS-SaaS定义中介绍了云计算的3种服务模型:
本文解释这张图的由来,即云服务模型的演进过程
一.表层模型
早在2008年,Microsoft等公司(在此之前还有Amazon、Google)就在探索云服务了。推出Azure时,Microsoft提出了这样的模型图:
用来解释PaaS模型与当时人们所熟知的本地部署(on-premises)、外包托管(outsourced hosting)之间的差异
具体的:
-
本地部署:需要拥有(购买)硬件并维护数据
-
外包托管:可以直接用主机托管或托管服务器
-
PaaS:使用云架构,不但资源托管还支持弹性扩展
实际上,这种基于订阅的收入模型可能会蚕食Microsoft当时已有的许多基于许可证的产品。但从宏观上看,规模经济(economies of scale)才是云服务模型最重要的价值
在微观经济学中,规模经济是指企业由于经营规模而获得的成本优势,单位产出成本随着规模的扩大而降低:
In microeconomics, economies of scale are the cost advantages that enterprises obtain due to their scale of operation (typically measured by amount of output produced), with cost per unit of output decreasing with increasing scale.
简单来讲,规模经济就是随着规模的扩大而更高效地做事:
The simple meaning of economies of scale is doing things more efficiently with increasing size.
在云计算中体现在资源集中管理(Resource pooling)上,从而产生规模效应:
云计算的规模经济体现在两个方面,一是使得用户终端成本降低,二是拥有更高的利用率,因而被认为可能产生良好经济效益。
一方面用户不需要购买存储器或服务器、而是通过购买服务来获得(相应功能),降低成本的投入和管理费用。另一方面云服务的提供实际上就是大量的用户在共享一个服务的资源,利用率更高。
由云服务供应商集中管理软硬件资源,并提供维护、按需计费、弹性扩展等服务,用户不再需要全权控制上上下下的N层资源栈,即可部署自己的应用程序(PaaS)
二.资源栈模型
上图仅从表层去描述了PaaS与外包托管和本地部署之间的主要差异,缺乏具象的对比,因此需要一种能够突出差异并传达其价值,同时还能说明差异程度的可视化模型:
先根据人们所熟知的本地IT环境抽象出9层资源栈,作为统一上下文,再将云服务模型映射到这个上下文中,并突出差异。之所以用层次结构来描述,是因为:
-
体现了某种程度的关注点分离
-
表现出栈中各层之间具有一些直接依赖关系和设计/操作抽象
具体的:
-
本地部署:正如我们所理解的那样,完全控制整个资源栈,拥有并管理这些资源
-
IaaS:不再全权控制所有资源,下5层托管给基础设施供应商
-
PaaS:除Application之外的层都交由供应商管理了,我们只需要关注自己的应用程序
三.类比模型
也有一些类比模型,例如披萨、汽车等,但都不如资源栈模型贴切,因为在做类比时会丢失一些上下文信息,比如层间依赖和关注点分离
如何熟悉一个系统?(内含知识大图)
以汽车模型为例:
这种类比的关键点是:
-
本地部署:就像拥有自己的车,可以随时去任何想去的地方(完全控制)。车的型号、外观、颜色、装饰等都可以自选,但要自己负责维护
-
IaaS:像是租车服务,仍然可以随时想去哪就去哪。虽然在车的选择上有一些限制,但不必自己维护,拿到钥匙就能出发
-
PaaS:就像公共交通,可以根据发车时间表按既定路线去往已通车的地方,虽然存在这样一些限制,但易于使用,而且能按使用量付费(得益于规模经济)
从本质上来讲,这种类比所表达的还是最初控制与规模经济之间的权衡,但在视觉上更容易理解,而且有助于展开讨论和传播
四.资源栈模型扩展
9层资源栈模型出现之后,又对其视觉呈现做了一些修改(将3D的部分扁平化,减少颜色数量,去掉复杂形状),得到了:
接着有人提出SaaS也应该加进来,于是有了:
为了让SaaS与PaaS的差异更明显(直接加的话,仅一层Application的区别),对资源栈本身做了一些调整:
-
Security & Integration层被删掉了,因为所有层都存在安全问题,作为单独一层没什么意义
-
在Applications层下面添上Data层
-
Databases, Servers, Server HardWare层分别改为Middleware、O/S和Server层
这样,云环境(IaaS、PaaS、SaaS)之间都是2层差异,云环境与本地环境之间有5层差异,表明云环境与本地环境间的差异更大
之后为了表意更准确,又做了一些修缮,
-
O/S改为Operating System
-
On-Premises改为Traditional IT,因为本地部署包括私有云环境,要区分开
-
对IaaS中的managed by线做了轻微调整(延伸出一部分到Operating System层),表示IaaS中的O/S层是共同维护的,云供应商提供基础了VM镜像,但用户还需要维护其补丁和更新
得到终稿:
参考资料
有所得、有所惑,真好
关注「前端向后」微信公众号,你将收获一系列「用心原创」的高质量技术文章,主题包括但不限于前端、Node.js以及服务端技术
本文首发于 ayqy.net,原文链接 http://www.ayqy.net/blog/云服务模型:控制与规模经济的博弈/
Redis(二):命令集构建及关键属性解析