未来的云计算语言?Go在Google内部崛起
Dennis Ritchie (站立者)与 Ken Thompson在最早的小型机 PDP-11 前工作, 1972年 Photo:Courtesy of Bell Labs
“很荣幸我是第一个体验此类痛点的人,”在接受开源大会上接受采访时Fitzpatrick表示,Google的团队在用Go处理集群和文件传输时进行了很多改进。项目大获成功,如今Go团队开始经常帮助其他团队完成小项目。正如Griesemer所言:这只“地鼠特工队”对研究团队、Chrome团队、客户调查团队以及其他“有关团队”也提供了很多帮助。
问题的根源是该文件服务器系统的底层代码的年龄已经超过五年,可谓破败不堪。
Brad Fitzpatrick在使用Google软件最常用的功能时卡住了——下载进度条在99%的地方停下了。虽然下载失败是很常见的问题,但Fitzpatrick却并无迁就之意,他是地球上最懂技术的企业——Google的工程师,他不能容忍此类问题发生在Google身上。
我们发现Go的并发模型与Erlang、C和C++的几乎一样强大,而且是对开发者非常友好的一种系统。 虽然Go语言在Google内部战绩彪炳,但是“地鼠特工队”并未在Google内部呼吁用Go全面取代其他编程语言。不少团队不希望改变目前使用的语言,也不愿做重复开发。Google开源经理Chris DiBona认为:对于不同的任务我们会使用最好的软件来完成,无论这些软件是Java、Python或是什么别的语言编写的。对于这一点,Fitzpatrick也表示赞同。 管理层和基础架构层决定了云计算的交付模型,两年内大多数云程序都将用Go语言编写。 最初的C++代码缺乏规范的文档,自动化测试也不达标,没有人能搞明白它是如何工作的。人们只是不停地做一些增量改变,最后在负责维护的程序员眼里,这些代码变成了“一坨面条”。系统的不稳定差不多要把服务器运营团队逼疯了,但是没有人有时间重写技术上还能使用的代码。于是Fitzpatrick自告奋勇接手这个任务,他来自Google的一个25位工程师组成的团队——地鼠队,负责开发一种定制化的编程语言——Go. 其实Fitzpatrick并不孤单,多年来很多人都曾抱怨dl.google.com系统不够稳定,而该系统极其重要,处理几乎所有Google的下载任务,包括Chrome浏览器安装文件、Android源代码,到体积小些的JavaScript库。 当一部分“老弱”程序代码不能正常工作时,Google就会派出负责Go语言项目的“地鼠特工队”负责除旧迎新。 Go语言目前在Google以外的应用还很少,但在业界依然引起了重视。 前VMware云平台首席技术官Derek Collison曾断言Go语言两年内将成为云计算的主流语言: “1k大的文件都托管不好对Google来说是很丢人的事情,”Fitzpatrick在上周俄勒冈的开源大会上说道,“所以我在内部的Google+站点上就此问题大吐其槽。” Collison对Go的预言也许有些夸大,但他新创立的云计算公司Apcera确实已经在使用Go语言,而且目前Go语言已经有了一个重大的成功案例,那就是Google自己,新的dl.google.com系统的可靠性得到了大幅提升。
此外,网游公司Zynga和NTT DoCoMo都在使用的开源数据库Couchbase就是部分用Go编写的,其开发者还用到了Erlang、C和C++。但是Couchbase的软件架构师J.Chris Anderson表示Go是最棒的:
前VMware云平台首席技术官Derek Collison曾断言Go语言两年内将成为云计算的主流语言,这也许有些耸人听闻,但Go语言在Google内部确实取得了令人瞩目的成绩。Wired最近发表文章讲述了Go语言在Google内部崛起的故事,IT经理网编译整理如下:
事实也是如此,新的用Go编写的dl.google.com软件代码上简洁不少,内存开销也更少,更重要的是,更加可靠。Fitzpatrick表示在开发过程中更加深入了解了Go,开发了一个新的开源缓存库,同时也发现了Go语言的一些不足。
Fitzpatrick对重写依然在生产环境使用的代码感到非常兴奋,因为他终于有机会能在真实的系统中测试Go了。
Go的初衷是实现即能像古怪的电信语言Erlang或流行的服务器端javaScript平台Node.js那样处理大规模并发用户,同时又能像C++那样迅捷。一个很够处理大规模并发下载请求的分布式文件系统应当是最能发挥Go长处的应用。
“如果代码不能得到持续的关爱就会变成一堆屎,”Fitzpatrick说道。
Go由计算机科学的三位大神Robert Griesemer、Rob Pike和Ken Thompson共同创建。Thompson也是Unix操作系统的联合开发者,同时也是C语言之父。Pike则是Thompson在贝尔实验室的同事。Griesemer因在Java编译器方面的工作而广为人知。