清华资工所博士班研究生王建兴曾写过一篇博文《踏出云应用程序规划的第一步》,文中他为我们分享了“云计算”在应用程序设计上会带来哪些改变和影响。现把全文转载以此,全文如下:
虽说“云计算”有着和过去历史相似的观念,其中却也有着一些新的想法,而这些想法具备了新的时代意义,也对程序设计产生了一些冲击。
本文我们将来讨论一下“云计算”在应用程序设计上,究竟会有什么样的改变和影响。
云计算最核心的观念,在于将计算的重心摆在云。
何谓“云”即云所在的那一端。在网络领域中,时常用云朵的图案来代表网际网络,所以,“云计算”一词,即代表透过网际网络取用计算资源的一种计算型态。
倘若只抽象化到站在这个观点上来看,便是从历史的脉络中可以理解,这种计算方式早在之前,便是人们已经使用过的模式。
不过,现今的云计算,有一些新的元素在里头,这些元素不见得是新技术、新想法,在过去的研究文献或探讨中,这些想法或技术或许早就出现过,但如今“云计算”这个词语,将所需的相关观念集合在一块,形成一个整体的想法。
我们处于一个可以持续连网的时代
为什么在这个阶段,将计算摆到云上,又再度成为一个趋势呢?
其中有一个重要的关键在于行动装置的盛行。这些行动装置,像是智能型手机、平板计算机、小笔电等等,计算力虽然还是远胜昔日的桌上型计算机,但是相较于今日的个人计算机,仍然算是计算力薄弱的计算装置,这使得在此类的装置上进行大量沉重的计算并不恰当。
同时,由于无线区域网络愈来愈普及,加上3G网络基础建设愈来愈完备,这构成了一个重要的先决条件──装置几乎无时无刻都能处理连网的状态。这么一来,计算力较为薄弱的行动装置透过网络取用计算资源,便成了顺理成章的选择。
此外,因为使用者大多会在不同的装置间切换,例如,在办公室中使用笔记型计算机工作,接着在离开办公室后,可能还会透过手上的智能型手机读取电子邮件,或者是利用实时通软件和同事、朋友交换讯息。回到家后,或许还会打开像iPad之类的平板计算机,在客厅中阅读、上网、顺便回复邮件。由于每个使用者都可能运用多个装置处理事务,但是,使用者又会希望在这些不同的装置上都能处理相同的一组资料(例如电子邮件、或者是自己的记帐试算表)。
为了避免资料同步的麻烦及问题,将资料、以及对资料的计算操作统一放置在云,同样也成了十分理所当然的想法。
云计算并非所有应用程序的救赎,而从以上的描述不难看出,究竟何种应用程序类型适用云计算的观念来设计、能从云计算的观念获得好处。
#p#
如何规划应用程序执行的所在
云计算对应用程序开发所产生的第一项冲击,便是让应用程序的设计者思考,将应用程序切割成为两个部分,一部分在装置端,另一部分则摆放至云。
那么究竟应当如何切割呢?这是程序设计者在决定运用云计算观念来开发应用程序时马上会面临到的下一个问题。要回答这个问题,你必须思考,将程序摆放到云上,究竟具备了什么优势。
云相较于行动装置端,计算力更为充足,而且有值得信赖的电力供应,网络连线不仅更为稳定,可运用的频宽也更大,储存空间当然更为稳固、容量也高出许多。这便是将程序放置到云可以获得的好处。如果你的应用程序中,有一部分需要重度的计算、耗时的计算,那么将它们放到云上,便会比摆到装置端来得理想;如果你的应用程序中,有一部分需要频宽较大、较稳定的连网环境,或者,需要更大、更保险的储存空间,那么要将这部分程序放置于何处,我想答案也很明显。
例如,你打算开发一套电子书的系统,让使用者可以透过各种装置阅读电子书。在你的应用程序功能规划中,希望让使用者输入某个关键字,就能搜寻出来文中含有该关键字的书籍,那么这个功能会放在云或者是装置端呢?装置端的储存空间不可能存放所有的书籍,更别提要提供所有书籍全文检索的功能,必须建立索引,而全文检索的繁重运算量也不适合放在装置端进行了。基于储存空间、计算量的考量,你会将这一部分的计算程序划分至云。
那么什么样的程序适合划分至装置端呢?装置端的优势在于能和使用者直接沟通,能呈现声光效果,能借便利的输入方式获得使用者的操作命令。换言之,处理使用者界面的程序码十分适合划分到装置端。此外,如果计算量不是很繁重,而计算本身又必须有实时的反应,那么此种类型的程序码,也适合放在装置端。
#p#
用MVC的模式来协助划分程序责任范围
有一个设计模式叫做MVC,将应用程序画分为三个责任各异的部分──Model(资料模型)、View(检视)、Controller(控制器),其中Model代表的资料本身的表示方式以及操作资料的事务逻辑、View则负责资料的呈现。Controller则处于Model及View之间,负责控制应用程序的流程,它负责处理事件并回应事件“事件”,当Model中的资料改变时,负责更新View中的内容,相反的,当使用者透过View操作资料时,也将他所做的变动同步反映至Model中的资料。
当我们运用云的观念时,我认为MVC的模式能协助我们划分应用程序的所在究竟在云或装置端。最极端的情况,我们可以把View全部都放在装置端,Model全部都放在云,当然Controller介于其中。
也就是说,装置端仅负责做画面的呈现、接收来自于使用者的输入或操作。操作、计算资料的工作,全部都丢上云来完成。当装置端需要存取资料,便透过网络,要求位在远端的云程序处理,并由它们回传计算结果,接着再由装置端的程序进行计算结果的呈现。
当然,正如前段所述,这是“极端”的情况,几乎不让装置端上的程序处理太过“正经”的程序码。但装置端并非毫无计算能力,只是较弱罢了,但真要上场杀敌,也不是全无办法。
有时候,你还是会选择将部分的资料、以及部分处理资料的程序码放置在装置端。主要的原因是,透过网络连系云上的程序码,会需要付出网络通讯的延迟作为代价,当应用程序需要呈现的资料结果必须反应速度够快时,便不太适合总是调派云上的程序码相助。
在这种情况,可以将少部分的资料及处理资料的程序码置放在装置端。举例来说,应用程序可能需要频繁的取用资料,虽然“正港”的资料在云,但是,为了提供更快的反应速度,可以在装置端设计资料的快取机制,当使用者界面要呈现资料时,便可径自快速取用,如此,存取速度便较透过网络取得来得快上许多。
当我们打算套用云计算的概念时,所面对的第一个问题,便是如何划分程序的责任范围。
【编辑推荐】