从零到生产:Go在Google的历程[译]
内容提要
本文介绍了Go语言在Google公司内部的发展历程,成为主要编程语言。Go的简单高效在Google内部得到广泛应用,包括监控工具、RPC系统、服务器框架等。Go的成功应用推动了SRE团队在Google内部的推广,并对外部社区产生了积极影响。
延伸解读
早期内部采用的关键挑战
Go在Google内部推广初期,面临与现有基础设施集成的巨大挑战。文章指出,团队必须构建基于proto buffer的Stubby RPC系统和LOAS加密验证,并依赖Chubby进行名称解析。这些底层库的缺失使得大多数工程师无法用Go连接存储系统,直到Bigtable、Colossus和Spanner等接口库逐一建成,Go的实用性才真正提升。
SRE团队如何推动Go的标准化
Google的SRE团队在Go的采用中扮演了关键角色。他们不仅参与客户端库的维护,还开发了服务器工具包(Goa),为Go应用添加了日志、监控、负载管理和流量控制等生产级功能。SRE领导层明确建议使用Go替代Python编写生产工具,因为Go的编译时检查和类型安全减少了维护难题,提升了工程效率。
性能对比:Go与Java的实践启示
在JID代理服务的迁移中,Google用Go替换了Java服务,并利用真实流量对比性能。结果显示,Go虽然消耗更多CPU核心,但垃圾收集暂停极短,有利于改善面向用户服务的尾部延迟。这一发现增强了SRE对Go生产就绪性的信心,也体现了Go在设计上对低延迟的侧重。
设计哲学:简约与统一的权衡
Go团队坚持避免引入不一致的框架,强调统一的开发体验。服务器工具包以库的形式提供可靠性功能,不改变编程模型,这降低了新程序员的集成成本。文章认为,尽管Rust功能更丰富,但Go的简约设计使其在大型项目中更易维护和扩展,证明了强大软件不一定需要复杂性。
Q&A
Go语言在Google的诞生时间是什么时候?
Go语言于2007年在Google诞生,2009年开源。
Go语言在Google内部主要应用于哪些领域?
Go在Google内部广泛应用于监控工具、RPC系统和服务器框架等。
Go语言的简单性和高效性对Google的影响是什么?
Go的简单性和高效性使其成为Google内部的主要编程语言,推动了SRE团队的推广。
Go语言在性能上与Java相比如何?
Go在性能上表现出色,尤其在垃圾收集方面,使用比Java更多的CPU内核,但GC暂停时间较短。
SRE团队如何推动Go语言的采用?
SRE团队通过改进应用程序的可靠性和监控功能,推动了Go的采用,并帮助维护客户端库。
Go语言的设计理念对新程序员的影响是什么?
Go的简约设计和统一编码促进了新程序员的快速集成,特别是在时间紧迫的项目中。