另类云计算,另类物联网

本文原载于iTalk,作者为技术泰斗陈榕老师。

“云计算”和“物联网”是最近IT领域的两个热点话题,但是Wikipedia上似乎也没有清晰定义这两个名词的含义。在许多人的概念中,云计算将浏览器作为“瘦”客户端,利用互联网门户的服务器阵列“云”来完成计算任务。而物联网则是利用现代互联网的基础设施,将大量传感器和智能终端设备连接到互联网门户服务器的所谓“机器到机器”(M2M)的网络。
早在1970年代IBM360主机时代,人们已经开始利用虚拟机(VM)来均衡任务负载。那时几乎所有大型机(Main-Frame)都用串口线连接着上百个“哑”终端(Dummy Terminal),按时间、按内存、按硬盘使用量计费,即采用所谓“Utility Computing”计费模式。
1987年夏天在美国伊利诺大学超级计算机应用中心(NCSA)实习的时候,我校与普林斯顿、康奈尔、卡内基-梅龙、加州圣地亚哥等五所大学的超级计算机中心通过卫星连接,让北美各地的科学家们拨号上网,分享计算资源。我们现在使用的浏览器就是1992年在NCSA发明的。
从1990年代开始,PC逐步渗透进中国百姓生活。现在绝大多数程序员和IT从业人员从来没有使用过大型机,也不太清楚PC之前的计算机发展史。如果按照媒体上关于“云”和“物联网”的宽泛描述,难道我们的IT产业在穿越时空,重返“恐龙年代”?
什么是“云
冯•诺伊曼团队在1945年到1952年间,为设计通用电子计算机定义了二条基本原则:程序加载到内存运行;计算机采用层次化结构存储,见下图。让我们试想一下,把PC机的“C:\”盘符用互联网门户域名(Domain Name)来替代,变成类似“Abc.com://”的形式,由此我们可以定义所谓“云盘”的概念。

我们知道,传统计算机的硬盘存储量远大于内存,内存的存储量又远大于寄存器。而CPU访问寄存器的速度远快于访问内存,访问内存的速度又远快于访问硬盘。关键的要点是硬盘的访问速度要足够快。加载一个应用的速度在0.2秒之内就是快,0.5秒是中,0.8秒是慢,1秒之后就不能叫“足够快”。软盘和磁带机就达不到“足够快”的要求,不能作为计算机运算的一部分,而只能放在一旁,作为备份用途。
随着宽带互联网和3G移动互联网技术的发展,不论是桌面PC还是3G智能手机,都已经能在足够快的时间内,直接从互联网门户网站加载应用,本地硬盘作为缓存(Cache)。MSN.com等社交网站,有管理员,有N个用户,每个用户都有自己的存储空间和访问权限,用户通过窗口与社交网站交互。现在媒体上描述的“云”与70年代的Main-Frame有许多类似之处,如计算资源分享等。
我们以为,像一台计算机那样工作的互联网门户就是一朵云。译成英文:“A portal which works as a single virtual computer is a cloud.”换个说法,云其实就是台计算机,也就是“A cloud is a computer.”传统计算机有硬盘、总线、内存等,许多人花费毕生精力研究它们。云计算机也不例外。云后面成千上万个实体计算机/服务器已经不再“通用”,而是作为云计算机的存储、CPU等基础元器件(IaaS),以及为认证、收费、安全、管理等后台服务提供专用功能(PaaS)。远程机器提供“软件构件”是Web服务。3G移动终端的CPU,门户网站服务器的多CPU,IaaS和PaaS服务器的多CPU,形成多进程,非对称型的计算机系统。
我们特别强调,当一个3G移动终端正在运行Abc.com的应用时,其CPU属于Abc.com云计算机的一部分,它可能直接运行Abc.com云盘存储的程序,也可能作为该计算机的图形显示窗口,将Abc.com门户的“主”CPU产生的结果,以“流”的形式展示出来。同一个3G终端在运行Xyz.cn的应用时,其CPU又属于Xyz.cn云计算机的一部分。这种动态融合众多客户端CPU的统一云计算机模型,从根本上有别于1970-1980年代“瘦客户端+服务器”运算模型。一个极端的例子是采用P2P协议的云计算机。
说说盘符,从70年代的CP/M(MS-DOS是从那里山寨来的)开始,A:、B:、…就作为盘符。C:盘一般是通过IDE协议访问,E:盘可能是通过USB协议访问,X:盘没准是TCP/IP连接的网络盘。不难想象,采用的通讯协议与运行的程序形成所谓“正交”关系(Orthogonal Relationship)。我们是否可以得出结论:研究JSON、REST、IBinder、DBus等技术与云计算机编程模型没有关系?进一步说,用http://、ftp://等作为云计算机的地址空间,就像“电子流动方向是从正极流向负极”一样,都是历史的误会。
什么是“云计算”
谈到云计算、普适计算等名词,不难从“计算”两字联想到图灵机的计算模型,歌德尔(Kurt Gödel)的可计算性理论。图灵机描述了计算模型,而冯氏体系架构实现了图灵计算模型。“计算”说的是“道”,而“架构”讲的是“术”。可计算性理论讲的计算,速度无穷快,内存无穷大。那么Map-Reduce和Hadoop真的对“云计算”里的计算有意义吗?计算讨论的是模型问题、极限问题,不应该与工程问题相混淆。没有Map-Reduce的云计算,用移动终端做计算的云计算,我们姑且称为“另类云计算”。

曾几何时,浏览器一键点击,把远在天边的网页拉到用户眼前,带来一场巨大的IT产业变革。既然冯•诺依曼说“程序也是数据”,类似用URL指定HTML网页,我们可以用URL来定位二进制程序代码模块。在移动通讯领域,推送短信(SMS——Short Messaging Service)、彩信(MMS——Multimedia Messaging Service)既是服务。要是能推送程序,也就真正达到了软件既是服务(SaaS)的目标,见上图。
浏览器统一了互联网数据与本地数据访问的模型。云计算就是要统一互联网软件与本地软件运行的模型。
从70年代UNIX以来,每台计机算后台启动几十个守护进程(Demons),应用程序使用的互联网业务必须限制在这个Demons集合之内,并且大部分Demons不会每次被用到。我们可以看出,传统的PC编程模型问题多多:Demons浪费资源,启动慢,藏污纳垢,纵容病毒泛滥。用户想要上网使用新的互联网业务又面临Windows、Linux等主流PC操作系统的安装、认证、删除、重新开机等重重困惑。其实人们早在90年代初期就意识到软盘时代遗留下Demons的问题,并试图通过各类“按需启动”的构件技术来解决。微软的COM技术,IBM的SOM技术,OMG的CORBA等构件技术都有20年左右的历史了。
近年来,随着构件与软件服务技术不断成熟,更重要的是,随着宽带移动互联网发展,人们终于有了脱胎于PC产业,从移动终端及云计算后台的角度,重新定义如何写软件的机会,而不必过多顾虑应用向后兼容的问题。苹果公司的iOS,谷歌公司的Android,惠普公司的WebOS、诺基亚和Intel的MeeGo、微软的Windows Phone 7等操作系统方兴未艾。计算模型要通过计算平台来支撑,而通用计算平台就是操作系统。这也就是操作系统行当沉寂15年之后又突然火爆的原因。真可谓,机不可失,时不再来。
云计算的核心思想是“分享软件服务”。让用户可以通过各类移动或固定终端,随时随地“浏览”云计算机提供的软件服务。朋友之间通过社交网络,互相“推送”软件服务。用户无需关心软件服务的安装及运行细节。诸如病毒沙箱、自动认证、软件升级、数字签名等一些列问题都交给云计算机的管理员来负责。用户只需要确认加入某个云计算服务社区的账号及密码,一键点击软件或信息,就开始与包含数据和动画的“服务”进行交互。我们预见一场比浏览器更为深刻的IT产业大变革“山雨欲来”。
软件服务从云(Cloud)上来,在端(Client)上跑。微软一直倡导“云+端”,发展Azure和Phone7两个新型OS,但在中国几乎无人响应。过气的微软讲话,也许还是有道理的。常言道:兼听则明。谷歌不遗余力鼓吹“云”,但也致力研发两个OS,ChromeOS和Android,从云和端两头掘进,试图打通“云端合一”的大一统软件运行环境。苹果公司干脆就把云和端用一套封闭环境打包销售了,干净利落,避免应用软件开发商给最终消费者带来各种迷茫。
云计算编程还要通过语言,毕竟语言表达思想。C/C++用来编写移动终端上的非流动性程序以及流动性的游戏及业务引擎。Java类语言用来编写对效率要求不太高的流动性服务构件。HTML/JS等脚本语言面向长尾用户,提供个性化及网络化服务,动态拼装第三方的业务引擎。三种语言通过反射技术自动翻译、沟通。我们定义:服务构件=构件+自描述信息。云编程=服务构件+拼装脚本。
云上下雨,自然不能像原来安装Office软件那样,一坨就是2-3百兆。一条彩信300KB,那么最大的“雹子”就是300KB。而且,雨必须从不同的云上下来。雨点就是一个一个功能(服务)构件,编译好的二进制代码,可能是CPU指令,也可能是Byte-Code。HTML/XML/JS等脚本语言要在客户端动态将服务构件拼装成应用。
SaaS,即软件作为服务,其目的是为了消灭软件。人们为一篇写得好的小说付钱,而不是为了印刷技术和纸张付钱。那谁应该为word付钱,老百姓还是电子书出版商?一段视频,mp4格式,每个终端要事先预装mp4解码器,百姓先为解码器买单,这个模式已经渐渐衰亡。标准永远是大公司利益较量的结果,费时费钱。解决问题的答案就是实现按需推送解码器。
什么是“物联网”
传感器、无所不在的嵌入式智能系统的发展极大促进社会进步。部署有限个事先规定数量的传感器和智能终端,用传统网络联接技术就能完成,因此IOT(Internet of Things)在国外的学术界并没有太大反响。如何部属动态进入特定环境的任意智能终端,让传感器与智能终端临时组成资源共享的计算网络?我们以为,以普适计算理论为基础的物联网研究才是重点发展方向。
物联网是两张网叠加,一张传感器物理链接网,一张软件协议网。二者之上才能构建协同操作的物联网应用。软件协议网有些必要条件是不可避免的,如软件一定是构件化的,用以封装在传感器里面。每个构件一定有全球唯一命名(URI),构件一定是用脚本来拼装的,物联网软件开发需要API和SDK。
面向对象技术曾经给软件界带来很大的变革。二进制代码的封装,继承,多态,反射,面向方面编程(AOP——Aspect Oriented Programming),等新兴软件开发技术势必成为普适计算的组成部分。纵向提取代码公因式叫继承,而横向提取代码公因式叫Aspect。宠物店里面猫和狗笼子都有个标签,注明价钱、产地、售后等。标签作为对象就是Aspect。Aspect都是在特定语境(Context)下才有意义,学校里学生有学号,医院里面病人有病例等。构件进入一个Context时,事先声明的Aspect就会自动创建,并与其聚合。产生于特定Context的构件,指定的Aspect会与生俱来。
云既然是用互联网域名命名的,由物理单机或者多机组成的一台虚拟抽象的计算机。那么我们可以认为物联网的计算基础模型就是“云计算机的驱动程序模型”。这个定义不符合当今主流舆论对物联网的描述,因此也最好理解为我们对“另类物联网”的定义。云计算编程框架支持Aspect也是出于对未来物联网、普适计算等方面应用的考虑。
回头看,UNIX驱动模型是最简化的面向对象编程模型。1970年代,UNIX利用open()、close()、read()、write()和ioctl()等几个标准的接口函数,通过“间址操作”,抽象地描述了所有计算机的外设。二进制代码继承,可以让包含软件的传感器动态“挂上/摘下”云计算机运行的编程框架(Framework),形成协调的互动关系。现代面向服务的构件技术已经能很好地描述任何第三方厂家开发的同步、异步、正向、反向的构件程序调用关系。如果能做到任意外设的热插拔,我们对这个问题的理解就深了一层。
互联网从逻辑上讲是移动互联网的子集,互联网能做的事情,移动互联网都能做,而位置服务(LBS)就不太可能在传统互联网上实施。再者,移动互联网应该是物联网的子集,毕竟人人相连,人物相连,物物相连,都超不出“Internet of Things”。iPhone和Android引领的移动互联网软件技术已经开始超越传统互联网,对此电信产业人士还有点措手不及。毋庸讳言,现在的物联网公司集中在传感器、物流等行业,而物联网软件技术离超越移动互联网软件技术还有点为时过早。
(原文刊于2011年中国计算机学会通讯第7卷第2期,并授权ITALK论坛发布)
陈榕,CCF高级会员、曾任CCF YOCSEF学术委员会委员。上海科泰华捷科技公司董事长。曾从事操作系统和面向对象程序设计的研究,多媒体软件、微软研究院操作系统组、IE3浏览器、OLE自动化、COM+、NET的开发工作。

你可能感兴趣的:(编程,应用服务器,互联网,云计算,中国移动)