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

Core Data

Google 的使命是“整理全球信息,让每个人都能访问并从中受益”。负责整理这些信息的团队之一是 Google 核心数据解决方案团队。该团队负责维护全球网页索引服务等服务。这些网页索引服务通过保持搜索结果的更新和全面来帮助支持 Google 搜索等产品,并且它们是用 Go 编写的。

2015 年,为了跟上 Google 的规模,我们的团队需要将我们的索引堆栈从用 C++ 编写的单个整体二进制文件重写为微服务架构中的多个组件。我们决定用 Go 重写许多索引服务,我们现在使用这些服务为我们的大部分架构提供支持。

“Go 的内置并发性是一种自然契合,因为团队中的工程师被鼓励使用并发性和并行算法。”

— Minjae Hwang软件工程师

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

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

“当我在 C++ 中并且想要使用更多包时,我必须编写诸如头文件之类的部分。当我在 Go 中编写时,内置工具允许我更轻松地使用包。我的开发速度要快得多,”Hwang 也分享道。

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

“......谷歌的网络索引在一年的时间内重新构建。更令人印象深刻的是,团队中的大多数开发人员在重写 Go 时也在学习它。”

— Prasanna Meda软件工程师

开发一款在全球范围内使用如此广泛的产品并非易事,我们团队决定使用 Go 并非易事,但这样做帮助我们行动得更快。因此,谷歌的网络索引在一年的时间内重新构建。更令人印象深刻的是,团队中的大多数开发人员在重写 Go 时也在学习它。

除了核心数据解决方案团队外,谷歌各地的工程团队已在其开发过程中采用了 Go。了解ChromeFirebase 托管团队如何使用 Go 大规模构建快速、可靠且高效的软件。

Core Data Core Data

关于核心数据

Google 是一家技术公司,其使命是整理全球信息,并使其普适可及且有用。

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