国外竟然有这么多公司使用 Go
阅读本文大概需要 20 分钟。
大家好,我是 polarisxu。
一直以来,各种语言都是国外大规模使用,但 Go 语言很不一样,国内更火。因为这样,有些人质疑:Go 也就国人瞎炒作,国外根本没啥公司用。真的是这样吗?今天就盘点一下那些使用 Go 的国外公司,看看他们的案例,希望对大家的技术选型有所借鉴!
为了更清晰,以下盘点进行了必要的归类。文章较长,请耐心浏览完,对各行各业使用 Go 的情况有一个大致了解。再有人质疑 Go 没人用,可以把这篇文章「砸过去」。
注意:Google 内部也是有好几个项目使用 Go 的,这块之前有专门介绍过,以后也会更详细介绍 Google 使用 Go 的情况,这个列表就没有列出 Google。
01 技术平台公司
技术平台提供了一组加速应用程序开发的通用功能,因此可以更快地将解决方案部署到业务中。它们通常要求高的可扩展性和可靠性,这正是 Golang 所擅长的。
Dropbox
Dropbox 有些人可能用过。在国内云盘流行之前,很多人使用它。Dropbox 的成功很大程度上归功于 Python:它使公司能够快速开发和迭代。然而,随着用户基数的不断增长,他们开始探索以更有效的方式扩展系统。这导致将性能至关重要的后端从 Python 迁移到 Go,以利用更好的并发支持和更快的执行速度。
对 Dropbox 来说,这个工程是巨大的。没有点魄力和对 Go 语言足够的调研和信心,真不敢迈出这一步。因为有大约 20万行 Go 代码,需要由一小组工程师完成。现在他们已经成功地将基础设施的主要部分移到了 Go 上。其中的细节,有兴趣的可以看看这个视频:https://www.youtube.com/watch?v=JOx9enktnUM
因为尝到了 Go 高效的甜头,Dropbox 将基础设施都使用 Go 构建,同时新业务也都优先考虑使用 Go。
此外,Dropbox 还开放了几个有助于改进缓存、标准错误接口等的 Golang 库,关于这些库的信息,可以参考该文:https://dropbox.tech/infrastructure/open-sourcing-our-go-libraries。
在 2020 年,Dropbox 对 Python 整体代码库下手,并将其发展成为一个无服务器的托管平台,这将减少代码耦合,解放服务及其底层工程师团队。为此,他们正在创新体系结构,例如标准化 gRPC 和使用 Envoy’s gRPC-http 转码。其中细节,可以看看他们几个礼拜前发的一篇博文:https://dropbox.tech/infrastructure/atlas--our-journey-from-a-python-monolith-to-a-managed-platform。
SendGrid
这个公司很多人可能没听过,但我熟悉,因为它提供的邮件服务我在使用。网站给用户发邮件,其实是一个很苦恼的事情。Go 语言中文网之前一直使用腾讯企业邮,但经常提示超过发送额度。后来我找到了 SendGrid,然后一直使用它的产品。没想到他们也在使用 Go。
下面简单介绍下它。
SendGrid 是一个基于云计算的电子邮件服务,为世界上一些大公司可靠地发送大量的电子邮件,这些公司包括 Uber、 Airbnb、 Spotify 等等。他们使用 Golang 开发了 SendGrid 的可定制、可靠和可伸缩的 API。这样的电子邮件应用程序可以在正确的时间将最相关的内容发送给正确的用户。
从根本上说,SendGrid 在开发中面临的最大挑战是并发编程。为什么这么说?因为他们每天发送 5 亿条信息,这是极具挑战性的。
他们为什么选择 Go 语言,这篇文章是他们的回答:https://sendgrid.com/blog/convince-company-go-golang/。
02 在线预订系统
在线预订系统允许通过网络或移动应用程序订购服务和支付,允许企业进行规模化经营。作为日常操作的一部分,这些系统需要一流的可靠性、可伸缩性以及与其他系统的集成。
Uber(优步)
尽管从历史上看,Uber 主要使用 Node.js 和 Python,但是很多人 Gopher 应该知晓,他们已经有很多服务使用 Go 构建,包括他们开源的一些流行库,一些 Go 代码规范,在 Go 圈都很受欢迎。Go 语言已经成为 Uber 许多新服务的首选语言。这是它们的 Go 组织:https://github.com/uber-go,在这里可以找到他们开源的 Go 相关项目。
Uber 已经有超过 100 个服务是使用 Go 构建的。Geobase 是 Uber 最近推出的一个服务,也是使用 Go 构建的,该服务匹配乘客和司机。在 Uber 上,Go 每秒处理极大量的查询。
2016 年,Uber 一个工程师在官方博客发了一篇文章:https://eng.uber.com/go-geofence-highest-query-per-second-service/,文章提到了:
Go 有很高的开发效率。对于 C++,Java 或 Node.js 开发人员,学习 Go 通常只需要几天,并且 Go 的代码易于维护。 高性能、低延迟。在 Uber 的主数据中心,服务于非中国的流量(因为当时在中国正和滴滴竞争,所以中国的流量必然得额外算),这项服务处理了 170k QPS 的峰值负载,在 NYE 2015 上有 40 台机器以 35% 的 CPU 使用率运行。响应时间在 95 百分位 < 5ms,在 99 百分位 < 50ms。 超级可靠。这项服务自启动以来已经有 99.99% 的正常运行时间。唯一的停机时间是由初学者编程错误和第三方库中的文件描述符泄漏漏洞造成的。重要的是,我们没有发现 Go 运行时有任何问题。
Delivery Hero
这个公司,我之前不了解
Delivery Hero 正在建设下一代全球在线食品订购平台。它们使用微服务体系结构,而 API REST、 gRPC、 SQS/SNS 用于部署到基于云的基础设施的应用程序之间的通信,使用 Kubernetes/Docker,并遵循 12 factors。
Go 和 PHP 是他们的主要语言,但是 Go 正在成为 foodora 和 foodpanda 平台的核心技术。
trivago
一个旅行网站。2020 年初,他们在网站发了一篇文章:https://tech.trivago.com/2020/03/02/why-we-chose-go/,介绍他们为什么选择 Go。
Go 的简单性和它强大的工具让我们不仅可以扩展我们的服务,更重要的是扩展软件工程本身的过程,减少新员工入职和培训过程中的摩擦,对公司的生产率有着重大影响,在 trivago 这样不断变化的环境中更是如此。
Sixt
SIXT 是世界上最大的技术驱动的移动公司之一。它允许客户计划他们的旅程,通过远程信息处理打开和关闭汽车,审查他们的使用数据等等。它是建立在最先进的云本地化、基于微服务、事件驱动的 Golang 基础设施之上的。
自 2015 年以来,他们就开始使用 Golang。那时候,他们那没有多少人在生产环境上使用 Go,大部分是辅助项目。所以对他们来说这确实是一个大胆的举动,但是事实证明这是相当成功的。快进到 2019 年,他们有超过 15 个 Team 在使用 Go。
这篇文章详细介绍了他们使用 Go 的情况:https://www.facebook.com/sixtkarriere/posts/find-out-more-about-golang-at-sixt-to-become-a-godeveloper-mfd-at-sixt-click-her/2049632898495842/。
03 电子商务
电子商务初创企业、中小企业和大型企业都面临着页面加载时间、可扩展性和网站可用性等方面的挑战。Golang 被广泛用于解决这些问题。
Allegro
这是波兰最大的在线购物平台。超过 2100 万的注册用户和每月超过 2.2 亿的访问量,在全球在线销售领域排名第 13 位。
和国内的淘宝类似,虽然大多数微服务是用 Java 或其他基于 JVM 的语言编写的,但有些是用 Python 编写的。然而,当想编写一个非常快速的缓存服务时,他们决定尝试一些新的东西,并在 Go 中实现这个服务。
最后,我们将应用程序的加速时间从超过 2.5 秒提高到最长请求的不足 250 毫秒
2016 年,他们写了一篇文章,介绍他们使用 Go 实现这个缓存服务的情况:https://blog.allegro.tech/2016/03/writing-fast-cache-service-in-go.html,这就是 BigCache。
Mercadolibre
公司拥有拉丁美洲最大的在线商务生态系统,在 18 个国家都有业务。公司已经转向 Go 来帮助它扩大规模并使其生态系统现代化。
通过使用 Go,他们将服务器的数量从 32 台减少到 4 台,构建速度加快了 3 倍,测试套件运行时间从 90 秒减少到 3 秒。
Go 对我们来说太神奇了。它非常强大,而且非常容易学习,并且拥有后端基础设施,在可扩展性方面对我们来说非常有帮助。
他们使用 Go 的案例可以参考该文:https://go.dev/solutions/mercadolibre/。
04 金融科技
在金融科技领域,许多客户对金融数据的需求是 24*7 无间断。在处理交易和访问财务数据方面,Go 是一个非常合适的语言。
SolarisBank
这是一家拥有完整的德国银行许可证的科技公司。他们的“银行即服务”平台使企业能够使用简单的 api 提供自己的金融产品,比如数字银行、支付、信用卡、身份识别和借贷服务。
从银行业的战壕深处到服务的边缘,Go 在 Solarisbank 被多个团队使用:
核心银行团队 —— 建立骨干,协议级银行系统,如环保总局和环球银行金融电信协会 Auth Team —— 反向代理和身份验证/授权系统 数据平台团队 —— 建立管道(pipeline),作为将数据转化为知识的基础设施
该公司的主要技术栈如下:
Docker,Microservices,Ruby,Grape,Golang,Elixir,Phoenix,React.js,MySQL,Postgres,Redis,Concourse,GitHub,Prometheus,AWS
更多信息可以参考该文:https://boards.greenhouse.io/solarisbank/jobs/4220372002。
Monzo Bank
总部位于英国的初创企业 Monzo 于 2017 年 4 月获得正式银行牌照。它在 2019 年夏天为美国开设了一个等候名单。
对于银行操作系统,他们决定建立自己的平台,使用的主要是开源生态:Linux、 Cassandra 分布式数据库、Go 语言和 PostgreSQL。基础设施托管在亚马逊网络服务(AWS)云上。该银行的两个数据中心用于与万事达卡(Mastercard)系统进行交互。
Go 是创建微服务架构的完美语言,围绕着‘单一责任原则’,Go 的并发特性和通用型语言,使得在 Monzo 轻松创建小而简单的网络服务成为可能。
关于他们使用 Go 的更多信息可以参考该文:https://www.infoq.com/news/2017/03/monzo-bank-golang/。
Capital One
这是一家以科技为导向的金融公司。他们的服务之一是 Credit Offers API,其中的联盟合作伙伴如 Credit Sesame、 CreditCards.com 和 Bankrate 显示可用的信用卡选项。
在 2016 年中期,他们为 API 创建了新的 Go 端点。
Go 在 Capital One 开始获得了巨大的、令人印象深刻的动力,基于我的团队整合的 POC,我们看到了与 Java 的巨大性能提升。这些结果很清楚,所以我们决定将其用于这个新的端点。当时,没有一个团队成员知道 Go,但不到一个月,每个人都用 Go 写东西,我们在构建端点。它的灵活性、易用性和 Go 背后真正酷的概念(Go 如何处理原生并发、垃圾收集,当然还有安全 + 速度)在构建过程中帮助我们参与进来。
详细情况一通过该文了解:https://medium.com/capital-one-tech/a-serverless-and-go-journey-credit-offers-api-74ef1f9fde7f。
05 支付系统
支付系统,一直依赖似乎都是 Java 的天下。
支付处理系统允许企业使用信用卡、借记卡和支票为商品和服务进行支付。这些系统检查交易过程中收到的详细资料,并在结算交易之前采取一系列反欺诈措施。
对于 24*7 的服务,稳定性和自动恢复是必须的,因此要求在支付处理流水线中的每个步骤都需要 Go 提供的尽可能低的延迟。
American Express
美国运通主要以其信用卡和支付处理而闻名。截至 2019 年 12 月 31 日,该公司已有 1.144 亿张有效卡,其中包括 5470 万张在美国有效的卡。
2016 年,他们的付款和奖励平台团队是第一批开始评估 Go 的团队之一。他们的主要关注点是微服务、事务路由和负载均衡,并且他们需要对其体系结构进行现代化改造。
在 Go 上工作之后,我们的大多数开发人员都不想回到其他语言上。” ー Benjamin Cane,美国运通公司副总裁兼首席工程师
为了帮助其他企业确定 Go 是否适合他们,他们发布了一个 Go 案例研究:https://americanexpress.io/choosing-go/。
PayPal
PayPal 是在线支付的先驱,现在仍然是在线供应商、拍卖网站和世界各地许多其他商业用户的领先支付处理器。
目前在 PayPal 有超过 100 个 Go 开发者。虽然 Go 可能永远不会取代 Node.js 的某些应用程序,但 Go 是 PayPal 的一级语言。
Go 提供了处理复杂性的通道和 Goroutine,我们能构造代码来满足需求。
信息来源:https://go.dev/solutions/paypal/。
iZettle
Zettle 开发了改变游戏规则的商业工具,比如移动读卡器和销售点应用程序,这些应用程序赋予小企业与大企业竞争的能力。他们于 2010 年在斯德哥尔摩成立,用世界上第一个迷你芯片读卡器和移动设备软件彻底改变了移动支付。
Go 是 iZettle 的主要后端语言。技术栈包括用于持久化的 PostgreSQL 和 Dynamo,用于异步服务的 AmazonSQS 和 AmazonSNS。
更多信息参考:https://careers.sh/pl/firma/izettle/prace/68805。
Bolt
Bolt Payments 是电子商务零售商的一个一体化支付平台。他们的端到端支付平台旨在使整个结账体验尽可能无摩擦。
为了提高他们的灵活性,Bolt 团队创建了 sleet,一个开源的库,用于使用 Golang 与不同的 PSPs 接口。
我们的灵感来源于 ActiveMerchant,它是另一个用 Ruby on Rails 编写的库,也达到了同样的目的。在确认 Go 没有这样的解决方案之后,我们决定自己开发。
06 网络安全
前段时间,我写文提到,说 Go Team 越来越重视安全问题了。安全和隐私持续引起人们的兴趣,网络安全市场正在蓬勃发展,并继续增长。静态语言、注重安全的 Golang 非常适合该领域,并在服务器和云环境中得到广泛应用。
1Password
这个是大名鼎鼎的密码管理软件。保护着超过 60,000 家企业的数据,1Password 让你完全控制密码和其他敏感的商业信息。
1Password Administrator Tools 的后端完全用 Golang 编写。它使管理员能够为整个公司管理 1Password,并使帐户恢复简单,安全。
(据说现在挺多部分改用 Rust 实现了。。。)
Keybase
Keybase 是允许用户加密消息和验证身份的密钥目录(key directory)。
为什么要在 Keybase 使用 Go?Go 的库真是太棒了。过去,我花了很多时间在 OKCupid 上使用 C++ ,很难找到一个真正协同工作的库。相反的,Go 中大量的核心库,基本上可以满足你的所有需求。
信息来源:https://softwareengineeringdaily.com/2015/09/04/identity-and-encryption-with-keybase-founder-max-krohn/。
07 音乐和视频
Golang 的 HLS 等协议使构建流服务变得容易,安装简单,同时提供最高效的性能。它支持最常用的文件和编码格式。使用该语言进行流媒体播放的最大优势是速度,尤其是在直播方面。如果在编码、解码和打包视频和音频时没有无缝转换,就不可能实现流媒体直播。Go 处理所有这些流程很方便,可以给用户更好的体验。
SoundCloud
这是一个消费者网站,是网络上领先的音频平台,这意味着任何东西都可以和大家分享。SoundCloud 维护了大约 6 个服务和超过 12 个完全使用 Go 编写的仓库。当开发新的后端项目时,他们也越来越多地转向 Go。
关于 Go 在他们公司的具体情况,可以通过这篇文章详细了解:https://developers.soundcloud.com/blog/go-at-soundcloud。
Twitch
这是一个直播视频平台,主要关注视频游戏的直播,同时也播放音乐、创意内容、电子竞技比赛等等。
Twitch 在流量最大的系统中使用 Go。它的简单性、安全性、性能和可读性使它成为一个很好的工具,解决了在向数百万用户提供实时视频和聊天服务时遇到的问题。Go 是 Twitch scales 的重要组成部分,尤其是与 AWS Lambda 的结合。
在 2018 年 Twitch 使用了 RPC 框架,不同服务间的通讯通过 Twirp 这个框架实现,这是一个 Go 语言实现的 RPC 框架。关于该框架的信息参考该文:https://blog.twitch.tv/pl-pl/2018/01/16/twirp-a-sweet-new-rpc-framework-for-go-5f2febbf35f/。
Dailymotion
这是一个在法国托管的视频分享网站。这个网站类似于 YouTube,它播放视频,包括 Dailymotion 工作室创建的原创内容。Dailymotion 使用 Golang 实现自动化 api 和端到端测试用例。
他们每个月使用 Golang 进行数百次自动化测试。他们选择 Golang 进行大量的自动化测试,因为它快速而强大。由于其性能、静态类型检查和简单性,他们用 Golang 开发了大部分后端项目。
08 IM 领域
聊天服务器必须能够执行许多功能。并发性很重要,在构建消息传递应用程序时利用了高可伸缩性。在消息需要几乎同时发送和接收的时候,Go 的速度有利于支持消息和聊天平台中的项目。
Stream
Stream 是一个企业级的聊天和活动提供商,为超过 10 亿的最终用户提供服务。
Go 的优秀生态系统、新开发人员容易入门、快速性能、对并发性的友好支持和高效编程环境的组合使其成为一个很好的选择。使得 Stream 这样小型开发团队能为超过 5 亿的终端用户提供 feed 和聊天功能。
他们发表过为什么从 Python 迁移到 Go 的文章:https://getstream.io/blog/switched-python-go/。
Slack
很多人对此不陌生。全球超过 1000 万用户每天依靠 Slack 与同事合作。随着用户数量的增加,他们的重点也在增强性能,并确保它们在高负载下正常运行。
他们团队发表的相关文章:
https://slack.engineering/scaling-slacks-job-queue/ https://slack.engineering/load-testing-with-koi-pond/
09 物联网(IoT)
随着物联网的不断发展和边缘设备数量的迅速增加,需要对大量数据迅速处理和计算。Golang 的内置并发性使得这种语言成为许多物联网应用的优秀候选者。
Samsara
Samsara 平台带来了人工智能安全程序、实时可视性、工作流程、报告以及一个集成的生态系统来连接驱动经济的运作:从生产到物流、建筑、政府等等。
该物联网平台完全使用 Go 构建:
后端服务(包括自己的、开源的 GraphQL 实现) 云配置,包括 fenerating Terraform 文件,管理用户和团队等 运行设备的固件
信息来源:https://medium.com/samsara-engineering/a-chapter-in-the-life-of-gos-compiler-c89b9db74617。
TIBCO
2017 年,TIBCO 开放了其核心项目 Flogo。最初,Flogo 是物联网框架,后来发展成为一个专注于 FaaS 的框架。
今天,Flogo 运行在 AWS Lambda 上,使你能够将 Flogo 流作为 function 部署。此外,Flogo 最新的能力之一是支持嵌入式机器学习模型,可以部署在边缘设备。
10 Real-time 事件平台
随着人们对更高效、更准确的工具和智能的需求不断增加,实时事件平台经历了难以置信的变化。为了保持领先地位,公司不得不更新和改进他们的系统,以便对应用程序中的事件作出的响应几乎是即时发送的。速度是 Golang 的招牌,因为它结合了轻量级的内存需求和快速的交付时间,这将使你的客户对应用程序的服务感到满意。
Pusher
在全世界 25 万以上的开发者的网络和移动应用程序中使用 api 来创建协作和通信功能。
每天,Pusher 在不到 100 毫秒的时间内发送数十亿条实时消息:源到目的地。我们如何实现这一目标?一个关键因素是 Go 的低延迟垃圾收集器。
详细信息可参考:https://making.pusher.com/golangs-real-time-gc-in-theory-and-practice/index.html。
PubNative
一个移动货币化平台,允许应用程序发布者通过灵活的广告单元来提高他们的收入策略。它使移动发布商最大化他们的程序性广告收入。
由于每天大约有 25B 左右的流量,PubNative 的广告服务端是用 Go 编写的,并连接到 Spark 数据管道。
11 游戏领域
随着游戏持续以指数级增长,你所使用语言能否跟上你的系统可能需要的任何更新是很重要的。使用现有的 Go 库,如 Nano,一个用 Go 编写的游戏服务器库,可以通过预先编写代码来减少编程所需的时间,这些代码可以在你的项目中使用。这可以帮助你专注于游戏的其他方面,节省你宝贵的时间。
Riot Games
Riot Games 成立于 2006 年,致力于在全球开发以玩家为中心的游戏。2009 年,他们发布了处女作,《英雄联盟》已经成为世界上大家玩得最多的电脑游戏,也是电子竞技爆炸式增长的关键驱动力。
Riot 的一级服务端语言是 Java 和 Go,它们是可互操作的,并且相对容易打包和部署。
他们喜欢 Go 有很多原因,包括:
部署工具,用于部署和管理运行在 Docker 运行时中的服务的生命周期 为了最小化向后端可观察性平台转发日志和指标时的请求延迟 在多个项目中,使用 Golang 的 httputil 反向代理来处理代理请求,为请求的生命周期添加中间件来注入额外的身份验证或头部 整个后端微服务架构都是使用 Golang 构建的——从游戏服务器流程的分离和管理到购买商品,所有的事情都是使用 Go 编写的服务完成的
这里是他们发的文章:https://technology.riotgames.com/news/leveraging-golang-game-development-and-operations。
Nakama
提供实时、社交和多人游戏体验需要的一切,让游戏开发公司可以专注于开发令人惊叹的游戏。他们用来构建、部署和赚钱的开源工具箱,就是使用 Golang 构建的。
Nakama 处理超过 1.5 亿玩家的游戏,并每月处理超过 700 亿请求。
信息来源:https://heroiclabs.com/。
12 总结
看到这么多领域,这么多公司,你是不是很惊叹:原来 Go 可以在这么多领域大放异彩,而且有这么多公司在使用。不管有些公司使用的规模如何,至少,有 Go 的一席之地。
Go 语言在性能和开发人员生产力之间取得了很好的平衡。在接下来的 10 年里,随着云解决方案、物联网数据和 5G 等新技术的使用不断增加,Golang 毕竟会吸引越来越多的公司。
看了这么公司和方向,你还怀疑 Go 的前景吗?!
推荐阅读