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