Google 核心数据解决方案团队如何使用 Go

Core Data

Google 的使命是“整合全球信息,供大众使用”。负责整合这些信息的一支团队就是 Google 的核心数据解决方案团队。该团队负责维护全球网页索引服务等工作。这些网页索引服务通过保持搜索结果的最新和全面来支持 Google 搜索等产品,而它们就是用 Go 编写的。

2015 年,为了跟上 Google 的发展规模,我们的团队需要将用 C++ 编写的单个单体二进制文件重写为微服务架构中的多个组件。我们决定用 Go 重写许多索引服务,现在我们已将其用于支撑我们架构的大部分。

Go 内置的并发性非常适合,因为团队中的工程师被鼓励使用并发和并行算法。

— Minjae Hwang软件工程师

在选择一门语言时,我们的团队发现 Go 的多项特性使其特别适用。例如,Go 内置的并发性非常适合,因为团队中的工程师被鼓励使用并发和并行算法。工程师们还发现“Go 代码更自然”,使他们能够花时间专注于业务逻辑和分析,而不是管理内存和优化性能。

用 Go 编写代码要简单得多,因为它有助于减轻开发过程中的认知负担。例如,在使用 C++ 时,复杂的 IDE 可能会“显示源代码没有编译错误,但实际上却有”,而 MinJae Hwang,核心数据解决方案团队的软件工程师说:“在 Go 中,当 IDE 说代码没有编译错误时,代码总是能够编译通过”。通过消除开发过程中的小摩擦点,例如缩短修复编译错误的周期,帮助我们的团队在最初重写时能够更快地发布,并有助于将我们的维护成本保持在较低水平。

Hwang 还分享道:“当我在 C++ 中想要使用更多包时,我必须编写像头文件这样的东西。当我用 Go 编写时,**内置工具让我能够更轻松地使用包。我的开发速度快了很多。**”

凭借简单的语言语法和 Go 工具的支持,我们团队的几名成员发现用 Go 编写代码更容易了。我们还发现 Go 在静态类型检查方面做得非常好,并且像 godoc 命令这样的某些 Go 基础知识,帮助团队围绕编写文档建立了更有纪律的文化。

……Google 的网页索引在一年内就重新设计了。更令人印象深刻的是,团队中的大多数开发人员在学习 Go 的同时也在用 Go 进行重写。

— Prasanna Meda软件工程师

负责一个被全世界如此广泛使用的产品并非易事,我们团队使用 Go 的决定也并非易事,但这样做帮助我们更快地行动。因此,Google 的网页索引在一年内就重新设计了。更令人印象深刻的是,团队中的大多数开发人员在学习 Go 的同时也在用 Go 进行重写。

除了核心数据解决方案团队,Google 的其他工程团队也已在开发过程中采用了 Go。阅读关于 ChromeFirebase Hosting 团队如何使用 Go 来构建快速、可靠、高效且可扩展的软件。

Core Data Core Data

关于核心数据

Google 是一家技术公司,其使命是整合全球信息,供大众使用。

在本案例研究中,Google 的核心数据解决方案团队分享了他们与 Go 的旅程,包括他们用 Go 重写网页索引服务的决定,利用 Go 内置的并发性,以及观察 Go 如何帮助改进开发过程。