谷歌的使命是“整合全球信息,供大众使用,使人人受益”。负责组织这些信息的团队之一就是谷歌的核心数据解决方案团队。该团队除了其他职责外,还维护着全球网页索引服务。这些网页索引服务通过保持搜索结果的更新和全面,来支持谷歌搜索等产品,而它们是用Go语言编写的。
2015年,为了跟上谷歌的规模发展,我们的团队需要将我们的索引技术栈从用C++编写的单体二进制文件重写为微服务架构中的多个组件。我们决定用Go语言重写许多索引服务,现在我们用它来支撑我们大部分的架构。
“
Go语言内置的并发功能非常适合,因为团队中的工程师被鼓励使用并发和并行算法。
在选择编程语言时,我们团队发现Go语言的几个特性使其特别合适。例如,Go内置的并发功能是一个天然的优势,因为团队中的工程师被鼓励使用并发和并行算法。工程师们还发现“Go代码更自然”,这使得他们能够将时间专注于业务逻辑和分析上,而不是花在管理内存和优化性能上。
用Go语言编写代码要简单得多,因为它有助于减少开发过程中的认知负担。例如,在使用C++时,复杂的IDE可能会“显示源代码没有编译错误,但实际上存在错误”,而“在Go中,[当IDE]说代码没有编译错误时,[代码]总是能通过编译”,核心数据解决方案团队的软件工程师MinJae Hwang这样说道。减少开发过程中的小摩擦点,比如缩短修复编译错误的周期,有助于我们团队在最初的重写过程中更快地交付,并且有助于将我们的维护成本保持在较低水平。
“当我在C++中想使用更多的包时,我必须编写诸如头文件之类的部分。当我在Go中编写时,内置的工具让我能更轻松地使用包。我的开发速度要快得多,”Hwang还分享道。
凭借简洁的语言语法和Go工具的支持,我们团队中的几位成员发现用Go语言编写代码要容易得多。我们还发现Go在静态类型检查方面做得非常出色,某些Go基础工具,如godoc命令,帮助团队围绕编写文档建立了一种更规范的文化。
“
……谷歌的网页索引在一年内完成了架构重构。更令人印象深刻的是,团队中的大多数开发人员在重写Go代码的同时也在学习它。
在全球范围内如此重度使用的产品上工作绝非易事,我们团队决定使用Go语言也并非轻率之举,但这样做帮助我们提升了速度。结果,谷歌的网页索引在一年内完成了架构重构。更令人印象深刻的是,团队中的大多数开发人员在用Go语言重写代码的同时,也在学习这门语言。
除了核心数据解决方案团队,谷歌的各个工程团队也在其开发过程中采用了Go语言。了解Chrome和Firebase Hosting团队如何使用Go语言大规模构建快速、可靠和高效的软件。
About Core Data
谷歌是一家科技公司,其使命是整合全球信息,供大众使用,使人人受益。
在本案例研究中,谷歌的核心数据解决方案团队分享了他们与Go语言的旅程,包括他们决定用Go重写网页索引服务,利用Go内置的并发功能,以及观察Go如何帮助改进开发流程。