导读:据称字节跳动 70% 的微服务都依赖于 Go。仅凭这一数据,就足以证明各大科技公司对其最关键基础设施的重视程度。
概述
Go,也称为Golang。
最初是 Google 内部为应对服务器规模挑战而提出的解决方案,如今已发展成为现代软件架构的支柱。
运通 (American Express) 公司将 Go 用于支付和会员奖励网络,实现了海量交易所需的速度和可扩展性。贝宝(PayPal) 发现 Go 能够生成简洁高效的代码,并随着软件部署规模的增长无缝扩展,这为其带来了巨大的价值。
这些数字为我们讲述了一个个引人入胜的故事。
使用 Golang 构建的交易平台每秒可以处理数千笔交易,这对于需要实时性能的金融科技公司来说绝对不可或缺。SendGrid 每月使用 Go 的高效架构处理和发送数十亿封电子邮件。这些并非孤立的成功案例,它们代表了各行各业向 Go 转型的广泛趋势。
为什么这些公司选择 Go 而不是其他成熟的替代方案?CockroachDB 发现,Go 的性能优势、垃圾回收机制和低门槛使其成为其数据库技术的理想之选。Go 语言兼具简洁性和成熟工具,使企业不仅可以扩展服务,还可以扩展整个软件工程流程。
使用 Go 的公司受益于其垃圾收集功能和轻量级 goroutine,这使得应用程序扩展变得简单易行。这一技术基础使组织能够在处理日益复杂的操作的同时保持简洁性——这是传统编程语言通常难以实现的平衡。
拼车巨头 Uber(优步) 已经建立了业内最令人印象深刻的 Go 实现之一,其基础设施代表了大规模微服务架构的大师级水平。
Uber 的公司使命是“让每个人都能随时随地享受到像自来水一样可靠的交通”。这并非仅仅是营销口号,而是其平台的技术实力。Uber 处理海量实时数据,通过其全球网络将乘客与司机连接起来。与大多数纯粹线上的数字服务不同,Uber 的运营环境注重时间的流逝。人们依靠技术赚取收入或到达目的地,这使得系统故障会立即带来切实的后果。
Golang 与 Python、 Node.js以及Java一起,在 Uber 的技术栈中占据核心地位。其 Go 实现的规模令人瞩目:其 Monorepo 包含约 5000 万行代码,并托管约 2100 个独立的 Go 服务。这是业内规模最大的 Go 部署之一。
该公司战略性地采用 Go 来开发高性能应用程序。地理围栏和峰值定价等关键系统(均需要快速并发处理)均在 Go 基础架构上运行。Uber 甚至将其高并发地理围栏查询服务从 Node.js 迁移到 Go,展现了他们对 Go 语言处理关键任务操作能力的信心。
Go 的并发模型恰好满足了 Uber 实时操作的需求。该语言通过goroutines将并发视为“一等公民” ,允许开发者自由创建 goroutines 以隐藏延迟。在协调数千个并发乘车请求时,这种架构决策至关重要。
除了性能之外,Go 的简洁性还使 Uber 的工程团队能够快速迭代和改进系统。正如他们的工程团队所说:“Go 为我们带来了效率、简洁性和运行时速度。” 在管理涵盖数千个服务的 5000 万行代码库时,这种组合至关重要。
数字说明了一切。当 Uber 将地理围栏查询服务迁移到 Go 语言后,CPU 使用率下降了 50%。这不仅仅是一个小小的优化,而是代表着其全球基础设施成本的显著节省。
最近,Uber 开始与 Google 合作,在 Go 中实现了基于配置文件的优化 (PGO),通过优化内联实现了约 4% 的性能提升。虽然 4% 听起来可能不多,但以 Uber 的规模来看,这项优化使其顶级服务无需再使用 24,000 个 CPU 核心。这些结果充分说明了为什么选择 Golang 的公司往往能够显著提升资源效率。
直播带来了大多数平台从未遇到过的独特技术挑战。热门流媒体巨头 Twitch 在构建全球最大的直播视频分发系统之一时发现了这一事实,并最终发现Golang对于支持其最关键的基础设施组件至关重要。
Twitch 通过一个规模惊人的平台将数百万内容创作者与他们的观众连接了起来。该系统通过其视频处理管道处理超过 1500 万日活跃用户。在峰值容量下,超过 200 万个并发视频流通过其基础设施。
除了视频传输之外,Twitch 还面临着同样严峻的挑战:Twitch 维护着一个庞大的实时聊天系统,每天要发送超过 100 亿条消息。他们的 Web API 平均每秒处理 5 万个请求,这使得性能瓶颈一旦出现,可能立即影响数百万用户。
自 2013 年底以来,Twitch 已在众多高流量系统中使用了 Golang 。让我们来看看他们最重要的一个实现:该平台基于 IRC 的聊天基础设施是他们最早、最成功的 Go 语言部署之一。
该系统采用了多个用 Go 编写的专用组件。Edge 负责消息接收和分发,Pubsub 负责内部消息分发。Clue 负责分析用户操作,Room 负责维护观众列表管理。此外,Twitch 还开发了 Twirp,这是一个用 Go 编写的 RPC 框架,用于促进后端服务器之间的通信。
Twitch 工程师始终强调 Go 的简洁性、安全性、性能和可读性,认为它是应对大规模挑战的理想之选。该语言内置的并发支持使平台能够同时处理多个流和聊天室。无论并发使用水平如何,这一技术基础都能确保无缝的用户体验。
对于一个直播平台来说,或许最重要的是,Golang 的高效性让 Twitch 能够在不可预测的流量激增期间快速扩展服务。“刷新风暴”可以在几秒钟内造成 20 倍的正常负载——如果没有强大的并发能力,这种情况会让系统瘫痪。
诚然,追踪 Go 运行时版本间的性能提升,可以揭示这门语言的进化历程。从 Go 1.4 到 Go 1.6,Twitch 的垃圾收集暂停时间缩短了 20 倍。Go 1.6 中的进一步优化又将这些暂停时间缩短了一半。
在 Go 1.7 预发布版本中,典型的暂停时间已降至约 1 毫秒,比 Go 1.6 调优配置提升了 10 倍。最近,Twitch 实现了一项内存压载技术,将 CPU 利用率降低了约 30%,同时峰值负载期间整体 99 百分位 API 延迟降低了约 45%。
云存储先驱 Dropbox 做出了科技史上最大胆的迁移决策之一。最初,Dropbox 是基于Python构建的,但该公司意识到了一个根本性的限制:其性能至上的后端无法扩展,无法高效地服务数百万用户。2013 年,他们做出了迁移到 Go 的战略决策,这一举措最终涵盖了他们的大部分基础设施。
Dropbox 运营着基于云的存储和文件共享服务,这些服务已成为全球超过 5 亿用户不可或缺的基础设施。该平台面临着一项独特的技术挑战——管理数百万个并发文件操作,同时确保每次同步都能在多台设备上可靠地进行。这不仅仅是存储文件的问题;更重要的是,当数百万用户同时在其设备上上传、下载和修改文档时,如何保持完美的一致性。
迁移的故事始于性能瓶颈。Dropbox 主要使用 Golang 来增强其文件同步流程,从而更快、更高效地管理用户文件。他们并没有彻底重写,而是从 2013 年开始策略性地迁移了性能敏感的组件。如今,Dropbox 的大部分基础设施都运行在基于 Go 的系统上。
该公司甚至开发了一个非官方的 Go SDK,允许开发人员与 Dropbox API 集成,尽管它目前仍处于测试阶段,没有正式的支持。这款 SDK 表明了他们对 Go 的承诺,超越了内部基础设施的范畴。
Go 的架构优势非常适合 Dropbox 的用例。最重要的是,Go 的每个 goroutine 仅需 2 KB 内存,从而支持数百万个并发进程而不会崩溃。这种效率直接解决了 Dropbox 的核心挑战:处理数百万用户同时进行的文件操作而不会导致系统故障。
从 Python 迁移到 Go 后,通过降低基础设施成本和缩短响应时间,带来了可观的业务价值。速度和简洁性——Go 的两大核心属性——对于构建 Dropbox 的可扩展文件存储系统至关重要。
音乐流媒体先驱 SoundCloud 是 Golang 的早期采用者,早在 2012 年就将该语言与Ruby on Rails一起集成到其堆栈中。这种前瞻性的方法已经扩展到他们的整个基础设施。
SoundCloud 是一家全球在线音频分发平台和音乐流媒体服务公司,用户遍布 190 个国家/地区。该平台拥有约 3 亿首曲目,是同类服务的三倍,每月活跃用户约 7600 万。SoundCloud 的核心是通过无缝音频内容交付将听众与艺术家连接起来,同时管理海量流媒体数据。
SoundCloud 自称是“多语言”公司,尽管 Ruby on Rails 仍占据其核心地位,但 Go 在后端基础设施中扮演着越来越重要的角色。该公司目前维护着大约六项服务和十多个完全用 Go 编写的存储库。
他们的搜索基础设施彰显了 Go 的战略价值。虽然该系统由Elastic Search驱动,但其管理和与 SoundCloud 其他部分的交互几乎完全通过 Go 服务进行。此外,他们名为 Bazooka 的部署系统(专为管理内部服务而设计)也是使用 Go 构建的,因为它能够安全地处理复杂的状态机。
SoundCloud 工程师将 Go 描述为“所见即所得”语言,这意味着代码完全按照页面上的说明执行。这种清晰的界面极大地缩短了用户上手时间,工程师们自信地表示:“Go 从零开始到高效提交的时间比我们使用的任何其他语言都要快。”
实际效益远不止于个人生产力。Golang 的静态类型和快速编译功能,使其能够在开发过程中实现近乎实时的静态分析和单元测试。一些想法可以在不到一小时的时间内从白板推进到生产环境——这对于任何工程团队来说都是一项了不起的成就。
Go 项目的代码审查更侧重于问题领域,而非语言的复杂性。Go 的“只有一种方法”理念消除了在代码风格争论上浪费的时间,使开发人员能够专注于解决实际的业务问题。这种精简的方法使 SoundCloud 即使在高峰时段也能提供不间断的音乐流媒体体验。
Google 创建了 Golang,这使得它自然而然地成为有关使用该编程语言的公司讨论的中心。
Google 的使命是整合全球信息,使其人人皆可访问、人人可用。该公司运营着规模庞大的服务,很少有公司能与之匹敌。其核心数据解决方案团队负责维护全球网络索引服务,为 Google 搜索等产品提供支持。Chrome 的后端服务包括 Chrome 优化指南服务,该服务在用户的关键路径上运行。Google 还为 Google Cloud 客户提供 Firebase Hosting 服务,通过全球内容分发网络提供静态网站托管服务。
早在 2007 年,谷歌工程师开发了 Go 语言,专门用于解决谷歌规模的服务器挑战。该语言于 2009 年 11 月公开,此后,谷歌已将其应用于众多内部项目。如今,Go 为谷歌云和谷歌 Kubernetes 引擎的很大一部分提供支持。核心数据解决方案团队依靠 Go 语言提供网页索引服务,而运行在用户关键路径中的 Chrome 优化指南服务则基于 Go 语言运行。谷歌持续改进 Go 语言本身,Go 1.24 版本引入了性能改进,降低了大多数应用程序的 CPU 开销。
创建自己的编程语言已在多个领域带来了丰厚的回报:
l卓越的可扩展性- Go 非常适合大型项目,而 C++ 的可扩展性较差
l速度快但不复杂——性能几乎与 C/C++ 相当,但没有困难之处和常见错误源。
l跨大型企业代码库的并发和工具的标准化方法
l更快的编译时间——对于谷歌庞大的代码库至关重要
Google 构建 Go 语言是为了解决实际工程问题,而非将其视为一个理论上的语言实验。这种务实的基础使其成为 Google网络服务和云基础设施的理想之选,也为我们如今在其他公司看到的广泛采用奠定了基础。
如何才能同时向数百万观众提供值得一看的精彩内容,且不出现缓冲中断?流媒体巨头 Netflix 在 Golang 中找到了部分答案,并将其应用于其关键基础设施组件,以确保其全球娱乐系统平稳运行。
Netflix 成立于 1997 年,是一家美国制作公司,为全球数百万用户提供订阅式流媒体服务。该平台已发展成为一家全球娱乐巨头,提供跨设备的个性化内容。Netflix 面临的技术挑战令人震惊——必须高效处理数百万个并发流,这需要后端系统在保持可靠性的同时最大限度地降低延迟。该服务的云基础设施依赖于多样化的技术栈,包括 Java、Spring Boot、Python、React.js、Node.js 和 AWS。
Netflix 战略性地将 Go 应用于性能至上的系统,因为这些系统对延迟和并发性至关重要。Rend是一款完全用 Go 编写的高性能 Memcached 兼容代理和服务器,它作为 Netflix EVCache 系统的一部分,为实时会员流量提供服务。这只是他们 Go 实现战略的一部分。
l该公司还利用 Golang 来做如下事情:
l大规模监控和调试微服务的分布式跟踪系统
l管理数千个微服务的云编排工具
lChaos Monkey,该公司的弹性测试工具,可模拟生产环境中的故障
Netflix 的工程团队做出了慎重的选择,寻求“一种比 Java 具有更低延迟(垃圾收集暂停是一个问题)并且比 C 更能提高开发人员效率,同时还能处理数以万计的客户端连接的东西”。
Go 的并发功能使 Netflix 能够同时处理多个用户请求,确保节目准时开始,不会出现延迟或缓冲问题。Netflix 工程师非常欣赏 Go 简洁直观的语法,这使得他们能够专注于构建新功能,而无需费力应对语言的复杂性。
在 Netflix 的全球扩张历程中,其实际影响显而易见。为了支持全球业务增长,他们专门用 Go 重写了连接管理服务。事实证明,Go 语言每秒可处理数千个并发连接,同时 CPU 和内存消耗也低于 Java 或 Python 等替代方案。这种高效性帮助 Netflix 在保持流媒体领先地位的同时控制运营成本——这在竞争激烈的娱乐领域是一项至关重要的优势。
世界上历史最悠久的国家广播机构悄然构建了媒体领域最具韧性的数字基础设施之一。自 2012 年以来,BBC 一直依靠 Golang 来应对在全民电视时代为英国公众提供服务所带来的独特压力。
很少有机构像BBC这样,面临着堪比数字风暴的挑战。选举之夜、皇室婚礼、重大体育赛事——这些场合带来的流量激增足以让大多数网站瘫痪。BBC的业务涵盖电视、广播和数字平台,为全球受众提供新闻、娱乐和教育内容。他们的多媒体网站位列全球最大网站之列,但仅仅规模本身并不能真正体现BBC面临的挑战。
BBC 的公共服务使命赋予了其商业媒体公司难以承担的义务。当突发新闻或国家大事发生时,数百万用户期望能够立即、可靠地获取信息。他们无法承受逐步扩展或高峰时段宕机的后果。
该公司选择使用 Go 语言在其广泛的数字平台上交付内容,主要关注后端和内部分析服务。BBC 的开发人员已经为收集和处理数据的网络爬虫和数据抓取工具构建了基于 Go 的解决方案。这些系统构成了内容分发的支柱,默默地管理着无缝用户体验背后的技术复杂性。
BBC 的实现尤其引人注目的是 Go 语言在重大活动期间处理流量高峰的方式。事实证明,该语言最大化 CPU 利用率的能力对于 BBC 的后端基础设施至关重要。
在收视率飙升的重大活动中,效果不言而喻。BBC 的 Go 语言系统可同时处理多个请求,确保用户在最需要时能够快速访问内容。Go 语言的高效性使开发人员能够创建高性能的 Web 应用程序,在不影响质量的情况下处理大规模工作负载。
Go 清晰的语法和极简的开发方式简化了 BBC 工程师的开发流程。这转化为运营优势——尽管对高质量数字体验的需求日益增长,但该公司仍能提供不间断的内容访问。BBC 早期采用 Golang 使其在寻求可扩展内容交付解决方案的媒体公司中占据了有利地位。
容器虚拟化先驱 Docker 在 Golang 上构建了其整个平台,创造了 Go 驱动的开发人员基础设施最成功的案例之一。
Docker 提供了一个容器化平台,使开发人员能够在容器中打包、分发和运行应用程序。这些轻量级的独立软件包包含运行应用程序所需的一切:代码、运行时、系统工具、库和设置。该平台允许应用程序在不同环境中一致运行,为开发人员提供标准化的部署单元。
Docker 已成为现代软件开发不可或缺的一部分,它简化了应用程序的构建、发布和运行流程。这项技术解决了开发人员面临的一项根本挑战——确保应用程序无论部署在何处都能以相同的方式运行。
Docker 的核心技术主要基于 Go 语言构建。该公司之所以选择 Golang,正是因为该语言非常适合构建基础设施工具。Docker 开发者不仅广泛使用 Go 语言构建其内部工具链,还自行创建基于 Go 语言的解决方案,用于容器化 Go 应用程序。
他们的方法通常涉及多阶段构建,从而创建出更小的镜像。在某些情况下,这种技术可以将容器大小从 300 多 MB 缩减到仅 6 MB。显著的尺寸缩减可以最大限度地减少潜在的安全漏洞,同时提高部署流程的性能。
Docker 通过使用 Go 构建其平台获得了几个关键优势:
l更快的编译时间- Go 的内置依赖管理和对代码格式的强烈意见提高了开发者的工作效能
l轻松交叉编译——Go 可以轻松地为不同的操作系统和架构创建二进制文件
l更小的应用程序规模- Go 的静态二进制文件非常适合 Docker 擅长提供的微服务部署策略
l优化性能——语言的效率有助于容器快速启动,这对于容器化应用程序至关重要
Docker 的 Go 实现在语言和平台之间建立了一种共生关系。这种关系使 Docker 成为在代码中定义开发环境的绝佳工具,确保团队成员和 CI 系统使用相同的工具集。最终结果是开发流程更加可靠,环境相关问题更少。
电子邮件传递面临着大多数开发人员从未考虑过的独特技术挑战。SendGrid每天处理超过 5 亿条消息,使其成为 Golang 任务关键型通信基础设施中要求最严格的应用程序之一。
SendGrid 是一项基于云的电子邮件交易服务,帮助企业安全高效地传递消息。作为 Twilio 通信生态系统的一部分,该公司为无数需要可靠电子邮件传递服务的组织(从营销活动到交易通知)提供支撑。他们的电子邮件传递系统要求高吞吐量和持续低延迟,以确保及时向全球客户传递消息。
该公司转向 Go 的历程反映了现代电子邮件基础设施的演变。SendGrid 早期最初使用 Perl/AnyEvent 构建后端系统,最终过渡到 Python/Twisted。然而,随着消息量呈指数级增长,团队意识到传统方法已无法满足其规模需求。
SendGrid 做出了一项战略决策,将 Go 作为其主要开发语言。目前,该公司在其核心电子邮件基础设施中广泛使用 Golang,并系统地重写了关键功能,以增强其稳健性、速度和可靠性。该实现利用 Go 的轻量级 goroutine 和强大的并发模式来管理定义电子邮件传递的异步操作。
测试结果证明了 Go 在通信基础设施方面的有效性。Go 有效地解决了 SendGrid 运营中至关重要的并发编程挑战。开发人员指出,这项改进显著降低了维护成本。
尤其耐人寻味的是,SendGrid 的工程师们对 Go 的潜力充满热情——许多人在 Go 正式采用之前就投入了个人时间进行实验。这种自然而然的采用模式通常表明了一项技术对开发者的真正价值。
Golang 的并发模型使 SendGrid 能够高效地同时处理数百万封电子邮件。作为一家通信基础设施提供商,他们的电子邮件投递系统实现了高吞吐量和持续低延迟。此外,SendGrid 还受益于其开发的 Go 库的开源,这不仅巩固了他们在开发者社区中的地位,还改进了招聘流程。
数字银行创新者Monzo采取了与大多数科技公司不同的方法。他们没有在遇到规模限制后迁移到 Golang,而是从第一天起就用 Go 构建了整个银行的基础设施。
Monzo 成立于 2015 年,是英国首屈一指的基于应用程序的挑战者银行之一,截至 2023 年,服务客户超过 750 万。这家移动优先的银行持有英国金融行为监管局 (FCA) 颁发的全牌照,提供全面的数字银行服务。用户可以按类别追踪支出、设置预算、向其他 Monzo 用户发送即时付款、赚取储蓄利息,以及使用透支和联名账户等传统银行功能。该平台还支持 Apple Pay、Google Pay 和 3D Secure 在线支付。
大多数公司都是从单体架构发展到微服务架构的。Monzo 却选择了相反的道路。据 Monzo 首席工程师 Matt Heath 介绍,该公司之所以选择 Go,主要是因为它的内存管理能力、静态类型和出色的并发原语。这一战略决策最终使其银行系统拥有超过 1600 个微服务,所有这些微服务都封装在 Docker 容器中,并部署在 Kubernetes 上。
在高峰使用期间,其规模令人印象深刻。这些系统在 AWS 云服务上运行时,每秒可处理 4,000 笔交易,同时还运行 Linux、Apache Cassandra 和 PostgreSQL 数据库等开源技术。
Golang 的并发特性使 Monzo 能够构建一个可扩展的银行平台,服务全球数亿客户。该架构可保持 99.9% 的系统正常运行时间,无需维护窗口或单点故障。除了技术可靠性之外,Monzo 在实施 Golang 后还将运营成本降低了约 20%。
Matt Heath 抓住了他们成功的本质:“Go 是一种创建微服务架构的完美语言......允许在 Monzo 轻松创建围绕‘单一责任原则’的小型和简单的网络服务”。
Facebook 运营着全球最大的社交网络平台,连接着全球数十亿用户。该公司管理着一个庞大的技术生态系统,该生态系统必须每天高效地处理、存储和传输海量数据。除了其旗舰平台之外,Facebook 还管理着 Instagram、WhatsApp 和 Messenger 等其他社交应用,所有这些应用都需要强大的后端系统来维持大规模性能。鉴于如此庞大的基础设施,Facebook 不断寻求能够高效处理并发操作同时又保持简单性的技术。
Facebook 的工程团队主要将 Go 用于基础设施服务和微服务,利用其 Goroutines 同时处理多个任务。Go 语言利用其强大的网络应用程序标准库,为 Facebook 的许多网络工具和服务提供支持。Facebook 还使用 Go 进行数据处理和分析任务,高效地管理海量信息。
该公司对 Go 生态系统最显著的贡献来自 Ent,这是一个 Go 实体框架,最初由 Ariel Mashraki 在 Facebook 连接团队工作期间开发。这款对象关系映射工具专为在标准解决方案不足的情况下处理复杂网络拓扑映射而设计。Facebook 后来将 Ent 开源,并于 2023 年将其迁移至 Linux 基金会,为其未来开发提供了一个与供应商无关的平台。
事实证明,Go 的性能特性非常适合那些注重速度和资源效率的应用程序。该语言编译为单个二进制文件,简化了各种内部任务的命令行工具的部署和分发。最重要的是,Go 的并发模型允许 Facebook 的开发者同时处理多个任务,这使得它非常适合那些需要在海量数据集中高效利用资源的高性能应用程序。
Facebook 的经验表明,即使是最成熟的科技公司也能从 Go 处理大规模并发操作的方法中找到价值。
传统银行在采用新技术时面临着独特的挑战——它们必须在创新与金融服务严格的合规性要求之间取得平衡。Capital One 就是一个引人注目的案例,它展现了老牌金融机构如何在满足这些严苛标准的同时,成功拥抱 Golang。
第一资本银行是美国第六大银行,通过全面的银行业务、信用卡和贷款服务为数百万客户提供服务。该公司总部位于弗吉尼亚州麦克莱恩,拥有约 755 家分支机构。第一资本银行的与众不同之处在于其以技术为主导的银行业务模式——该机构持续投资技术,以在各种金融服务渠道中创造更直接、更高效的客户互动。
他们的业务规模庞大。截至2016年,Capital One按购买量排名,是第五大信用卡发行商,仅次于美国运通、摩根大通、美国银行和花旗集团。
Capital One 的 Go 之旅始于 2016 年,当时他们只有一个信用优惠 API 端点,用于确认何时向客户显示优惠。他们现有的系统依赖于 Java,但最初的概念验证测试显示出令人印象深刻的性能提升,引起了工程团队的关注。
这一成功促使 Capital One 在其整个基础设施中扩展 Go 的实施。目前,该公司使用 Golang 进行以下工作:
l他们的信用优惠 API - 完全从 Java 重建为 Go(3.0 版),现在完全无服务器
l处理公共云服务资源配置和管理的平台
l支持 MacOS 和 Windows 客户端的命令行界面
l从分层、基于序列的工作流程过渡到更扁平的微服务架构
对于一个拥有数十年基于 Java 系统的组织来说,这次迁移代表着一次重大的架构转变。
Capital One 采用 Go 后的效果超出了最初的预期。该公司的请求到回复响应时间性能提升了 70%。更显著的是基础设施成本的降低——通过移除 EC2、ELB 和 RDS 等传统组件,该公司实现了 90% 的成本节省。
团队开发速度提升了约 30%,因为开发人员可以专注于开发业务导向的功能,而无需管理服务器基础设施。对于一家必须同步推进监管合规和功能开发工作的金融服务公司而言,这种转变尤为宝贵。
开发团队获得了创新的灵活性,同时支持 API 的扩展功能,并改进了与 Capital One持续集成/持续交付流程的集成。对于一家在严格监管下运营的银行而言,这种敏捷性代表着许多传统金融机构难以实现的竞争优势。
网络基础设施巨头 Cloudflare 展示了公司如何利用 Golang 来管理全球范围内真正庞大的网络运营。
Cloudflare 致力于网络安全与性能优化的融合,通过 DDoS 缓解服务每秒处理数百万个请求,同时保持实时网络性能。该公司的基础设施已成为现代互联网的关键,通过其内容分发网络服务处理着全球大量的网络流量。
Cloudflare 的运营规模凸显了其面临的技术挑战的复杂性。其网络中超过一半的动态流量与 API 请求相关,这使得 Cloudflare 成为全球 Web 应用程序的关键骨干网络。这一职责要求其基础设施能够即时扩展,同时保持分布式边缘计算系统的可靠性。
Golang 是 Cloudflare 的主要编程语言之一。该公司使用 Go 开发了多个主要系统,每个系统都针对其基础设施需求的特定方面:
lRRDNS - 一种 DNS 代理,可通过响应速率限制、缓存、负载平衡和 CNAME 展平来扩展 Cloudflare 的 DNS 基础设施
lRailgun - 压缩技术,可加速 Cloudflare 数据中心与原始 Web 服务器之间的连接,对于高延迟连接尤其有价值
lRed Month - 用于加密和解密操作的双人规则控制机制的密码安全实现
lSSL Bundler - 为客户 SSL 证书计算最佳证书链的系统
这些实现展示了 Go 在网络基础设施不同方面(从 DNS 解析到安全协议)的多功能性。
Cloudflare 的 Go 语言实施已带来显著的基础架构改进。他们最近在 Go 语言中采用了配置文件引导优化 (PGO),将 CPU 使用率降低了约 3.5%,从而在整个基础架构中节省了约 97 个核心。这项优化展示了语言级别的改进如何直接转化为大规模运营成本的节省。
Go 的轻量级并发模型对 Cloudflare 的服务至关重要,可确保其关键基础架构的停机时间最小化。其实际影响不仅限于内部运营——Cloudflare 的《2024 年 API 客户端语言流行度报告》显示,Go 已成为构建自动化 API 客户端的首选,约占所有自动化 API 请求的 12%。
Cloudflare 服务的开发人员的广泛采用证明了该公司在其自己的 Golang 实现中所体验到的效率和可靠性。
数据库技术公司 Cockroach Labs 在其开发过程的早期就做出了一个大胆的架构决策,选择在 Golang 上构建几乎整个分布式 SQL 数据库。
Cockroach Labs 还开发了 CockroachDB,这是一款分布式 SQL 数据库,专为需要持续可用性的关键任务应用程序而设计。该公司成立于 2015 年,最近庆祝了成立十周年,标志着其十年来致力于构建兼具弹性、可扩展性和简易性的数据库技术。
其客户包括 Bose、Form3、Hard Rock Digital 和 Shipt,以及财富 50 强金融机构以及大型零售和媒体公司。他们应对的核心挑战是使企业能够运行即使在基础设施发生故障的情况下也能保持可用性的应用程序,这一要求要求零停机容忍度。
2014 年初,该公司面临着一个关键的语言选择:在 Rust 尚未达到稳定状态之前,他们选择了 Go,而不是 C++ 和 Java 等成熟的替代方案。值得注意的是,当时项目中的所有开发人员(包括创始人)都是 Go 语言的新手。如今,CockroachDB 的代码库体现了这一承诺:89.6% 的代码是用 Go 编写的,其他一些小组件则使用 Java、C++、Python、TypeScript、Starlark 和 Yacc 编写。这标志着项目从早期空荡荡的 GitHub 仓库发展到如今超过 125,000 行未生成的 Go 代码的显著增长。该项目已吸引了超过 1000 名 GitHub 贡献者,这表明即使对于没有 Go 语言经验的开发人员来说,Go 仍然非常易于上手。
事实证明,Go 的软件工程方法非常适合数据库开发。该语言的简洁性和一致性加速了新开发者的入门,而 Go 强制的代码风格、简单的导入、自动化的导入管理和极简的编程习惯则显著提升了生产力。与 Java 强调面向对象的抽象不同,Go 允许团队直接专注于实现,仅在必要时添加接口。与 C++ 相比,自动内存管理消除了常见的错误源。
最初,团队担心 Go 的垃圾回收机制会影响数据库性能。然而,他们发现可以进行手动调整,控制哪些代码最终会被垃圾回收,最终实现与 C++ 相当的性能,同时保持代码更简洁、更易懂。
当一家公司意识到他们的技术栈无法跟上爆炸式增长的步伐时,会发生什么?作为拉丁美洲电子商务的领导者,MercadoLibre就面临着这样的挑战。
MercadoLibre 运营着拉丁美洲最大的在线电子商务生态系统,目前业务覆盖 18 个国家。该公司成立于 1999 年,总部位于阿根廷,提供全面的电子商务解决方案,使个人和企业能够通过互联网购买、销售、支付、广告和配送产品。其规模令人震惊——每分钟处理超过 9 亿个请求,同时管理着约 12 万个 Amazon EC2 实例上超过 1 万个每日部署。
该公司选择 Go 语言并非出于自愿,而是出于必要。最初,MercadoLibre的平台基于 Groovy 和 Grails,并采用关系数据库。然而,到了 2015 年,随着用户增长的加速,这些技术已达到极限。如今,向 Golang 的战略性迁移为公司大约一半的流量提供了支持。
他们的核心 API 团队使用 Go 语言构建和维护其微服务生态系统核心的关键服务。这些 API 支持多个平台,包括MercadoLibre市场、MercadoPago 金融科技以及运输/物流解决方案。他们最大的 API 目前每分钟处理超过 2000 万个请求。
此次转型带来的成果好得令人难以置信。请求处理时间从一分钟缩短至仅需10毫秒。MercadoLibre将服务器需求从32台服务器减少到4台,同时每台服务器的CPU核心数也减少了一半。这意味着服务器数量减少了88%,剩余每台服务器的CPU使用率也降低了50%。
开发人员的工作效率也得到了显著提升。构建时间缩短了三倍,测试套件执行时间从 90 秒缩短至仅 3 秒,速度提升了 24 倍。工程经理 Eric Kohan 完美地诠释了他们的体验:“Go 对我们来说简直太棒了。它功能强大,易于学习,并且与后端基础设施配合使用,在可扩展性方面表现出色。”
游戏开发巨头 Riot Games 展示了娱乐公司如何利用 Golang 支持全球分布的游戏平台上数百万同时在线的玩家。
Riot Games 开发并运营着一些全球要求最高的在线多人游戏。《英雄联盟》和《Valorant》需要复杂的匹配系统以及支持全球数百万玩家同时在线的实时游戏服务器。该公司的技术基础设施面临着独特的压力——既要在全球各地区保持稳定的性能,又要应对在大型赛事或内容发布期间可能意外激增的庞大玩家群体。
Go 在 Riot 享有“一等公民”的地位,与 Java 并列为服务的主要语言。Riot 开发者体验 (RDX) 团队广泛使用 Go 来加速游戏团队在全球范围内开发、部署和运营后端微服务。他们的实施涵盖了关键系统,包括全球部署工具、访问控制管理层以及管理 AWS 资源的云基础设施配置服务。
Valorant 的整个后端微服务架构都基于 Golang 运行——从启动和管理游戏服务器进程到处理游戏内购买。这种全面的采用反映了 Go 语言能够满足现代游戏基础设施对实时性和高并发性的需求。
Go 通过 goroutine 和 channel 实现并行化和并发原语,使 Riot 能够高效处理玩家连接。Go 语言简洁易用,规范精简,无论新工程师的编程背景如何,都能轻松上手。
Riot 工程经理 Aaron Torres 非常看重 Go 的分发便捷性——只需下载并运行二进制文件即可部署应用程序,非常适合命令行工具。Go 内置的并发支持使 Riot 能够在速度变慢时实现背压,并行执行独立操作,并在应用程序中运行后台进程。这些功能在管理复杂的实时交互(这些交互决定了竞技游戏的体验)时至关重要。
企业软件迁移很少成为头条新闻,但 Salesforce 向 Golang 的迁移则讲述了一个关于大规模实际工程决策的引人注目的故事。
Salesforce 是全球领先的人工智能 CRM 解决方案提供商,帮助各种规模的组织通过人工智能解决方案重塑业务。该公司提供来自不同来源的统一数据平台以及全面的 Customer 360 应用程序。其旗舰产品使组织能够高效管理客户关系,同时通过先进的分析工具提供洞察。Salesforce 的领导层始终站在新兴技术的前沿,利用市场分析和客户对话方面的专业知识,帮助企业预测未来趋势。
Einstein Analytics 于 2017 年推出,是一款可视化工具,能够洞察 Salesforce 环境中发生的所有活动。最初的架构采用了混合方法——C 语言负责性能,Python 语言负责查询解析和 REST API 服务器等功能。在产品发展壮大之前,这种做法似乎很合理。
随着不必要的新功能加载到 Python 包装器上,性能瓶颈随之出现。Einstein Analytics 在发布前就开始出现速度变慢的情况,这给这款企业产品带来了严重的问题。Salesforce 做出了战略决策,将 Einstein Analytics 从 Python-C 混合开发迁移到 Golang。首席架构师 Guillaume Le Stum 领导了这一迁移,用 Go 语言重建了几乎整个后端。
Go 有效地解决了 Python 在多线程方面的局限性——这是企业级应用程序的关键需求。与 Python 的松散类型相比,Go 语言的静态类型提供了更高的可靠性,而松散类型对于客户花费数百万美元购买的应用程序来说是一个问题。
Salesforce 避免了他们所说的 Python 库管理可能带来的“巨大的依赖噩梦”。Go 的跨平台功能提供了意想不到的灵活性——正如 Le Stum 所说:“如果我们在移动应用中需要这些代码,我们可以将其交叉编译到 iOS 或 Android 平台上,它就能正常工作。”
或许对企业软件开发来说,最能说明问题的是:Salesforce 的开发人员更欣赏 Go 的可读性,而非 Python 的优雅性,因为他们意识到,在企业软件中,工程师阅读代码的时间比编写代码的时间要多。这种实际的考虑反映了维护大型商业应用程序的现实,清晰性比巧妙性更重要。
这 17 家科技公司呈现的模式揭示了 Go 在不同行业的实际影响,数据是令人信服的。虽然每家公司在 Golang 的旅程中都面临着独特的挑战,但结果却呈现出惊人的一致。
公司 | 主营业务 | Golang 的主要用例 | 获得的主要好处 | 显著的性能改进 |
优步 | 拼车平台 | 地理围栏、峰值定价系统、约 2,100 个独特的 Go 服务 | 提高并发性、系统简单性、运行速度 | 地理围栏服务中 CPU 使用率降低 50%,通过 PGO 整体性能提升 4% |
Twich | 直播平台 | 聊天基础设施、Edge 服务、Pubsub 系统 | 简单、安全、性能、可读性 | 垃圾收集暂停时间缩短 20 倍,CPU 占用减少 30% |
Dropbox | 云存储 | 文件同步、后端基础设施 | 高效并发处理,降低基础设施成本 | 每个 Goroutine 仅需要 2kB 内存,可支持数百万个并发进程 |
SoundCloud | 音频流 | 搜索基础设施、部署系统(Bazooka) | 加快开发人员入职速度,提高生产力 | 不到一小时即可将创意转化为生产,简化代码审查 |
谷歌 | 技术/搜索 | 网页索引、Chrome 优化指南、云服务 | 卓越的可扩展性、标准化方法、更快的编译速度 | Go 1.24 显著降低了 CPU 开销 |
Netflix | 视频流 | Rend(Memcached 代理)、分布式追踪、Chaos Monkey | 降低延迟,提高开发人员的工作效率 | 高效处理数万个客户端连接 |
BBC | 广播 | Web 服务、内容交付、数据处理 | 强大的流量处理,高效的并发处理 | 处理重大流量高峰,且不会降低服务质量 |
Docker | 集装箱化 | 核心容器技术、内部工具链 | 编译时间更快,交叉编译更轻松 | 容器大小从 300MB 减少到 6MB |
Send Gird | 电子邮件服务 | 核心电子邮件基础设施 | 高效并发操作,降低维护成本 | 每天处理 5 亿多条消息 |
Monzuo | 数字银行 | 1,600 多个微服务、银行基础设施 | 系统正常运行时间长,运营成本低 | 响应时间加快 70%,成本节省 90% |
Facebook | 社交媒体 | 基础设施服务、网络工具、数据处理 | 提高资源效率,简化部署 | 不适用 |
CapitalOne | 银行业 | 信用优惠 API、云资源管理 | 提高团队速度,降低成本 | 响应时间性能提升 70%,成本节省 90% |
Cloudflare | 网络安全/CDN | DNS 代理、SSL 捆绑、安全工具 | 高效的 API 处理,减少资源使用 | CPU 减少 3.5%,节省了整个基础设施的 97 个核心 |
Cockroach Labs | 数据库技术 | 分布式 SQL 数据库(89.6% Go 代码库) | 加快开发人员入职速度,提高生产力 | 性能与 C++ 相当,但代码更简洁 |
MercadoLibre | 电子商务 | 核心 API、微服务 | 提高可扩展性,减少基础设施需求 | 请求处理时间从 1 分钟缩短至 10 毫秒,服务器减少 88% |
Riot Games | 游戏开发 | 游戏服务器管理、部署工具 | 高效的玩家连接处理,轻松部署 | 不适用 |
Salesforce | CRM平台 | Einstein Analytics 后端 | 改进的多线程,更好的可靠性 | 消除了 Python 依赖问题,增强了跨平台功能 |
最令引人注目的是资源效率的提升。MercadoLibre 的请求处理时间从一分钟缩短到 10 毫秒,这体现了用户体验的根本性提升。同样,Capital One 和 Monzo 也都实现了 90% 的成本节约——这些数字直接影响着企业的可持续性。
开发人员生产力的提升同样引人注目。SoundCloud 能够在不到一小时内完成从概念到生产的整个过程,充分体现了 Go 语言对工程团队的实际优势。这不仅仅意味着更快的计算机速度,更意味着更快的创新周期。
有趣的是,从银行到游戏再到流媒体,不同行业的公司都报告了在并发处理和系统简洁性方面类似的优势。这表明 Go 的设计选择旨在解决现代软件架构中的根本挑战,而非仅仅解决一些小问题。
来自不同行业的 17 家大型科技公司已采用 Golang,这并非出于实验,而是将其作为技术基础设施的核心组件。
性能改进始终是主要驱动力。MercadoLibre 的请求处理时间从一分钟缩短至 10 毫秒,其显著提升令企业领导者瞩目。同样,Capital One 的成本节省了 90%,Uber 通过优化减少了 24,000 个 CPU 内核,也证明了 Go 能够创造可衡量的商业价值。
这些结果之所以格外引人注目,是因为它们在各种用例中都表现出了一致性。无论是 Twitch 处理数百万并发视频流,SendGrid 处理每日数亿封电子邮件,还是 Monzo 每秒管理数千笔银行交易,Go 都能在大规模环境下提供可靠的性能。
简单性因素同样重要。Cockroach Labs 发现,开发者使用 Go 语言可以比其他语言更快地提高工作效率,而 SoundCloud 工程师则报告称,他们只需不到一小时就能将创意从概念转化为实际产品。这种开发人员效率直接转化为更快的产品上市时间和更低的开发成本。
对于像 Cloudflare 和 Netflix 这样的企业来说,可靠性至关重要,因为一旦宕机,业务就会遭受严重影响。这些公司之所以选择 Go,是因为它能够构建在极端负载条件下也能保持稳定性能的系统。
或许最能说明问题的是这些采用者的多样性。从要求最高安全性的金融机构到管理实时玩家互动的游戏公司,Go 已被证明能够适应各种不同的技术需求。这种多功能性表明,该语言致力于解决现代软件开发中的根本挑战,而非解决狭隘的专业问题。
Go 相对较短的历史使得这些采用模式更加引人注目。该语言仅用大约十五年就实现了其他编程语言几十年才能实现的目标。
作者:洛逸
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。