最近无意间翻看了《云端代码--Google App Engine编程指南》这本书。感觉里面的内容不错,就利用业余时间读完了这本书。不同于其它讲云计算技术的书籍,这本书从开发者的角度,讲述了如何在云上写代码,给我眼前一亮的感觉。可能是由于自己长期从事嵌入式软件开发工作,孤陋寡闻了,其实这本书早在2013年就出版了,而Google App Engine这个项目,则在更早的2008年就产生了。
这本书首先讲述了云计算的概念。云计算经过这么多年的发展,已经不再是当年的虚无缥缈的概念炒作阶段了,很多领域已经开始切切实实产生了成果,亚马逊公有云的成功就是一个很典型的例子。云计算能够得到应用推广其实不难理解,这完全是市场的需要。这本书上对云计算比喻非常好:云是大量微小水滴的集合,有些水滴会落在院子里滋养树木和草坪,有些水会流入水库供饮用。而云本身又是由各地的水分蒸发形成。我只希望我的院子里有足够的水分滋养植物,水库里有足够的水分饮用,我才不关心是哪篇云带来了降水,所有的云对我来说都是一样的,没有任何区别,只要有充足的水,我就心满意足了。
上面的比喻很贴切,对应到计算机领域,有了云以后根本不需要自己去配电脑,只需在自家拉一根网线,最多再有一个盒子,就可以享受计算机能给你的任何服务。而你只需要租用电信运营商的服务就行。你可以到营业厅开通8G内存、500G硬盘,8核CPU的服务即可,然后按月付费,至于它是一台物理机分配的,还是多台,他是intel的CPU还是AMD的CPU,你都不需要关心,对你来没有任何区别。至于操作系统崩溃了,你也不用抱着机箱跑到电脑城重装系统了,自然有专业的人员在后台给你维护,你甚至都感觉不到它崩溃过。这就是云服务带来的便利。低成本、简单易用成了它必然能发展壮大的理由。
再回到这本书,其实他讲述了专门针对软件开发者的计算云,除了使用人群不同,它的初衷跟其它云计算无异。当代被称为“码农”的程序员,知识面已经变的十分狭窄,类似编译器如何高效工作,各种编译器之间的差异,软件的调度机制,软件之间通信机制等等,了解的少之又少。国内是这种情况,国外亦是。并且,当今这个高度分工的社会,也没有必要每个程序员都去了解这些细节问题。所以,Google的一帮人,就想着能不能把这些有些难度、但是重复的、繁琐的工作提取出来,形成框架的东西,开发者只需要把注意力集中在自己的业务领域上即可。这也是符合软件开发中的分离关注点原则。于是Google App Engine就产生了。书中通过Python和Java两种语言,实现了一个聊天工具,涵盖了Google App Engine使用基本方法。当然使用Google App Engine是要收费的,按照CPU的使用率、存储的使用量等来收费,但是会为用户免费提供少量的资源供体验。很遗憾,我没有时间亲自实现一下书中的例子,感受一下云端代码的编写。希望后续有时间能够使用一下。
Google App Engine对于初创软件企业或者自由软件人还是比较有用的。因为这些企业和个人本身规模较小,搭建平台的成本太高,如果能够租用Google的硬件和平台,无异能够减少很多成本压力。
当然,云计算也不是完美无缺的,最大的问题就是安全问题。我相信大家都有这样的感受,至少我现在还不会放心把我自己的照片全部放在我租用的公有云上,一来怕隐私泄露,二来担心一旦它的系统崩溃了,我的内容就全部消失了,找谁说理去。所以,云计算要普及,首先要打消人们对于安全的担心,就像人们愿意把钱存到银行一样,是因为银行已经达到了完全被信任的程度。
对于开发者的云计算平台而言,安全意味着自己开发部署的程序不被攻击,书中举了个例子,说如果程序被木马恶意攻击的话,CPU的使用量会大幅提升,而这些都是需要开发者付费的,弄不好会倾家荡产。这里的安全,除了开发者在写程序是尽量考虑减少漏洞之外,Google App Engine也在平台和框架层面做了一些保驾护航,只要按照指南和规范去开发,程序被攻击的可能性就会大大降低。
最后书中讲到了程序调试,不同于我们本地软件的调试,云端代码的调试显得要困难的多,当一个程序出了bug,如何定位修复,是Google App Engine必须考虑的。它有一套完善的日志记录手段,有兴趣可以研究一下。
说到底,Google做这么多事情,是在构建一个开发者的生态,它的理念是:你在我的平台上开发程序,然后部署到我的平台上,我来收取资源使用费。我把我的平台搞的好用一些,就会有更多的人愿意来的平台做开发,也会有更多的程序部署在我的云上,这就是所谓的粘性。这也是互联网公司常见的一种盈利模式。