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