海洋球是五颜六色,给儿童玩的一种游乐设施。海洋球的多变性,给孩子们带来了无穷的乐趣。当要用脚踩在上面的时候,海洋球都会由于受到外力,发生位移。对未来的无法预知,增加了这样一个简单娱乐项目的乐趣。
IaaS, PaaS, SaaS 在 Windows 桌面时代就早已存在
任何一个写云计算历史的,都会写到,云计算分为IaaS, PaaS, SaaS 三个层面。表面上,这是软件运行发生了革命性的变化,从集中式的硬件环境走向虚拟化的运行环境,并逐层提供向上支撑:IaaS提供虚拟化的硬件,PaaS提供分布式的中间件,SaaS则交付最终的应用,非常完美。
在这里,需要着重关注一下PaaS。在云计算出现之前,PaaS的身影在哪里?其实,它不在服务器端,而是在最终用户的PC端,也就是以Microsoft Windows为代表的操作系统。
没错,Windows 是上一个时代的PaaS。它定义了,上层应用程序的规范,定义了应用程序的标准格式PE,也提供了统一的软件开发工具Visual Studio。
在互联网时代还没有到来的时候,软件的复制成本是高昂的,需要通过线传统渠道对软件进行销售。通过限制软件的使用许可——License,可以稳定的获得软件的销售收入。
在那个时代,有Intel 这个IaaS厂商的大力支持,外加上实体的工业标准支持,给了Windows一个较为稳定的**基础基线**。在弱的工业标准,都要比离开硬件的软件文档标准强。(可以发现,吴军以及诸多老外,都喜欢称之为Wintel体系。)
同时,在Windows这个唯一的PaaS之上,提供个各个硬件厂商的扩展空间,驱动程序机制。也是如今SPI (Service Provider Interface)的另一种实现原理。各大硬件厂商所开发的驱动,可以认为是Windows平台上的底层生态,UGC(User Generate Content)的方式之一;另一层面的UGC,则是使用 Visual Studio 开发的桌面应用程序(当然,还有Delphi 这个IDE)。
微软唯一没有做的,是对第三方程序,尤其是桌面应用程序的知识产权保护。各种破解,软件加壳,反跟踪,都是那个时代流行的知识产权保护的「黑科技」。
苹果、iOS和应用商店的启示
相比之下,苹果AppStore的成功,离不开iOS的安全性设计。iOS提供的是一个面向软件开发商有利的安全的运行环境。(现如今,越狱使用iOS系统的人,越来越少了。)这种机制,既保障了软件开发者的知识产权,也保障了软件最终用户的隐私安全——再非用户授权的条件下,第三方应用程序不得访问用户的隐私数据。例如:相册、联系人、相机、位置信息。
苹果没有开放硬件的设计,不走Android基于通用硬件架构的软件形态。很多人都会归结为这是乔帮主的固执、以及对极致的追求。我倒是认为,这是软件需要一个明确硬件运行环境定义,才能够发挥出最大效能,实现最极致体验的必要条件。
现如今,最大的PaaS,应当是苹果的iOS系统。当每个移动App去适配多款不同分辨率,不同屏幕尺寸,不同操作系统的Android系统的时候,受苦受累的,都是一线程序员。
兼容的价值——只有苦劳,没用功劳
如果说,云计算所定义的PaaS是承上启下的一层,那么这一层既要肩肩负对硬件的兼容,又要肩负对上层应用的兼容。
这看上去是中流砥柱。但目前,确只是空中楼阁。
对于PaaS来说,IaaS是海洋球。
对于提供虚拟化硬件环境的IaaS多方,距离应用层的SaaS太过于遥远,可以把责任推卸给PaaS。
对于SaaS来说,PaaS是海洋球。
对于在应用层体现IT整体价值的SaaS多方,则需要随着实际场景提出各种苛刻需求。
多方对多方,这就是像三明治一样夹在中间PaaS。
兼容性带来复杂,并且是「级数级的」也就是接入方的根据排列组合,产生若干总组合方式。
还记得高中的那个对于组合的定义吗?
从 n 个不同元素中取出 m(m≤n) 个元素的所有组合的个数,叫做从 n 个不同元素中取出 m 个元素的组合数。用符号 C(n,m) 表示。
这就是PaaS所要面临的兼容性复杂度上限。
于是乎,PaaS总是找不到硬气的存在理由。对于任意的直接用户而言,为其兼容它用不着的某个技术,价值无法得到认可。
PaaS的复杂性,没有显而易见的价值。
确保PaaS可持续发展的四个正确姿势
从逻辑上,PaaS确实应该存在的。这直接关乎到软件的开发成本。
众所周知,从事软件工作的优质一线编码工程,从事设计与框架落地的架构师,目前都被优厚的待遇,光明的职业发展空间所吸引,大多就职于世界上或者国内一流的互联网公司。
这些优秀的工程师与架构师,就像航空公司的飞行员。需要大量时间的磨练,才能成长。任何的成长,都需要时间——这个无条件的要素。
反观程序员的日常工作之一——编码,其中又饱含了大量重复的劳动。例如,如何解决分布式事务问题,如何保障高可用的稳定性,如何把业务逻辑实现。系统中的知识是通过零碎的代码集成在一起的,知识不仅在要在企业中复用,更需要在社会中发挥价值,这种价值的发挥,不应当以员工的跨企业流动为转移。
PaaS要想要得到健康的发展,以下四个方面是重中之重的必要条件:
- 运行在可控的虚拟硬件环境下
此处的可控,不代表自主建设,也可以选择一到两个差异性不大的公有云IaaS为基础。有条件的可以自行建设IaaS。
目的只有一个,降低底层兼容性的成本。
另外,从降低整个社会成本的角度出发,采用公有云的商业模式,也是最低的。
- 提供安全的数据处理环境
软件运行时数据所有权,是最终用户的。运行环境有义务和责任,保障数据的安全保存、安全传输、安全处理。其中前两者,目前的技术较为成熟,但安全管理,尤其是对秘钥以及证书的安全管理,使得安全的加密算法形同虚设。这也是软件研发、运营过程中的短板。
安全处理技术,是目前大数据安全、合法的最大屏障。也就是说,当数据的第一创造者,将数据交给第三方进行计算的时候,第三方不能够获得数据的真实含义——在密码学上的算法称为「同态加密」——还相当不成熟。
- 提供软件运行的精确能效计量
软件,本质上是若干知识沉淀为代码(用代码解决人的问题、用代码解决计算机的问题),而软件价值的体现方式,是被使用。任何软件代码中,都包含了若干知识工作者的成果。
每一次的代码集成、每一次的函数调用,都是一次「知识互联」的过程。其中包含了对业务知识的使用,对计算机知识的使用。在不能够区分每个知识能效的条件下,价值的最终体现,就像「大锅饭」一样。在发生故障的时候,一定会发生相互推诿;在优秀评比的时候,一定会发生不公正的事件。
架构中唯一职责的设计,需要与自然人形成映射,不管是从客观知识点,还是从代码实现上。
- 软件的智能集成
软件的每个小模块,就犹如若干个神经元。在目前的大多数情况下,都通过静态的编译脚本,把他们编译称为部署介质,或是部署包或是镜像。在软件的运行期,它们又通过程序设计好的规则,进行相互访问,以实现人定义好的处理规则。
软件的模块足够多,组合的方式也无法枚举。
未来,应当采用面向结果集的交互方式,与最终用户进行人机交互。
就犹如导航,设置好目的地,设置好必经的路径,剩下的,交给机器学习做自动集成和优化吧。
海洋球,应当是软件在应用层给人以随需而变的体验。
软件,应当代表最先进的生产力。