我认为Go 的游程是我见过的对一门语言的最佳介绍,它非常简单,可以让你公平地了解 80% 的语言。当我们希望让开发人员学习 Go 并快速投入生产时,我们会告诉他们从 Go 的游程开始。
Go 帮助集成生态系统吸引开发人员并扩展电子商务
MercadoLibre, Inc. 拥有拉丁美洲最大的在线商务生态系统,业务遍及 18 个国家。该公司成立于 1999 年,总部位于阿根廷,已转向 Go 以帮助其扩展和现代化其生态系统。随着 MercadoLibre 的在线商务增长,Go 提供了可轻松扩展的干净高效的代码,并通过允许其工程师在编写更少代码的情况下为不断增长的受众提供服务,从而提高了开发人员的生产力。
MercadoLibre 利用 Go 进行扩展
早在 2015 年,MercadoLibre 内部就有一种越来越强烈的意识,即他们现有的 API 框架(Groovy 和 Grails)已达到极限,公司需要一个不同的平台来继续扩展。MercadoLibre 的平台正在(并且继续)呈指数级增长,这为其开发人员带来了大量额外工作:Groovy 和 Grails 都需要开发人员做出大量决策,而 Groovy 是一种动态编程语言。对于快速扩展增长来说,这不是一个好组合,因为 MercadoLibre 需要在这个资源密集型环境中非常有经验的开发人员来开发和调整以实现所需的性能。测试执行时间很慢,构建和部署时间也很慢。因此,代码效率和可扩展性的需求变得与代码开发速度的需求一样重要。
Go 提高系统效率
作为 Go 对网络效率贡献的一个示例,核心 API 团队构建并维护着公司微服务解决方案核心的最大 API。该团队创建用户 API,而这些 API 又被 MercadoLibre Marketplace、MercadoPago FinTech 平台、MercadoLibre 的运输和物流解决方案以及其他托管解决方案使用。由于这些解决方案要求很高的服务级别(平均用户 API 每分钟有八百万到一千万个请求),因此该团队使用 Go 以每请求不到十毫秒的速度为其提供服务。
API 团队还部署 Docker 容器(一种软件即服务 (SaaS) 产品,也用 Go 编写)来虚拟化其开发并通过 Docker Engine 轻松部署其微服务。此系统支持更大的、任务关键型 API,这些 API 每分钟处理超过 2000 万个 Go 请求。
一个 API 重要地使用了 Go 的并发基元来有效地复用来自多个服务的身份标识符。该团队仅用几行 Go 代码就完成了这项工作,而此 API 的成功说服了核心 API 团队将越来越多的微服务迁移到 Go。对于 MercadoLibre 而言,最终结果是提高了成本效益和系统响应时间。
Go 的可扩展性
从历史上看,该公司的堆栈大部分基于关系数据库支持的 Grails 和 Groovy。然而,很快发现这个具有多层的大型框架遇到了可扩展性问题。
将该遗留架构转换为 Go 作为构建 API 的一个新的、非常精简的框架,简化了那些中间层并产生了巨大的性能优势。例如,一个大型 Go 服务现在能够在每台机器上运行 70,000 个请求,而仅使用 20 MB 的 RAM。
“Go 对我们来说简直太棒了。它非常强大,而且非常容易学习,并且在后端基础设施方面,它在可扩展性方面对我们来说非常棒。”
使用 Go 使 MercadoLibre 能够将用于此服务的服务器数量减少到原来的八分之一(从 32 台服务器减少到 4 台),此外,每台服务器都可以使用更少的功率(最初为四个 CPU 核心,现在减少到两个 CPU 核心)。使用 Go,该公司消除了 88% 的服务器,并将剩余服务器上的 CPU 减半,从而产生了巨大的成本节约。
MercadoLibre 作为开发人员和云提供商之间的桥梁,使用了一个名为 Fury 的平台,这是一个平台即服务工具,用于以与云无关的方式构建、部署、监控和管理服务。因此,任何想要在 Go 中创建新服务的团队都可以访问各种服务类型的经过验证的模板,并且可以快速在 GitHub 中启动一个存储库,其中包含 starter 代码、该服务的 Docker 镜像和一个部署管道。最终结果是一个系统,允许工程师专注于构建创新服务,同时避免设置新项目的繁琐阶段,同时有效地标准化构建和部署管道。
如今,Mercadolibre 大约一半的流量由 Go 应用程序处理。
MercadoLibre 为开发人员使用 Go
MercadoLibre 基础设施的编程通用语目前是 Go 和 Java。每个应用程序、每个程序、每个微服务都托管在其自己的 GitHub 存储库中,此外,该公司还使用一个额外的 GitHub 工具包存储库来解决新问题并允许客户端与其服务进行交互。
这些广泛且经过精心策划的 Go 和 Java 工具包允许程序员快速且在强大支持下开发新应用程序。此外,在拥有 2,800 多名开发人员的社区中,MercadoLibre 拥有多个内部群组,可用于聊天和指导 Go 的部署,无论是在不同的开发中心还是不同的国家。该公司还培养内部工作组,为新的 MercadoLibre Go 开发人员提供培训课程,并为外部开发人员举办 Go 聚会,以帮助建立更广泛的拉丁美洲 Go 开发人员社区。
Go 作为招聘工具
MercadoLibre 对 Go 的倡导也已成为该公司强有力的招聘工具。MercadoLibre 是阿根廷最早使用 Go 的公司之一,并且可能是拉丁美洲第一家如此广泛地在生产中使用该语言的公司。MercadoLibre 总部位于布宜诺斯艾利斯,附近有许多初创公司和新兴技术公司,它对 Go 的采用塑造了潘帕斯草原开发人员的市场。
“我们非常认同该语言的更大理念。我们喜欢 Go 的简单性,我们发现它非常明确的错误处理对开发人员来说是一种收获,因为它在生产中产生了更安全、更稳定的代码。”
如今,布宜诺斯艾利斯已成为一个极具竞争力的程序员市场,为计算机程序员提供了许多就业机会,而且该地区对技术的高需求带来了丰厚的薪水、优厚的福利以及在选择雇主时具有选择性的能力。因此,MercadoLibre——就像该地区所有工程师和程序员的雇主一样——努力提供一个激动人心的工作场所和强有力的职业道路。Go 已被证明是 MercadoLibre 的一个关键差异化因素:该公司为外部开发人员组织 Go 研讨会,以便他们前来学习 Go,当他们享受自己所做的事情和与之交谈的人时,他们很快就会认识到 MercadoLibre 是一个诱人的工作场所。
Go 赋能开发人员
MercadoLibre 使用 Go 来简化大规模系统,但这种简单性也是该公司开发人员喜爱 Go 的原因。
该公司还使用Go by Example和Effective Go等网页来教育新程序员,并分享用 Go 编写的代表性内部 API,以加速理解和熟练程度。MercadoLibre 开发人员获得了他们需要的资源来掌握这门语言,然后利用他们自己的技能和热情开始编程。
“Go 非常适合编写业务逻辑,而我们就是编写这些 API 的团队。”
MercadoLibre 利用 Go 的富有表现力和简洁的语法,让开发人员可以更轻松地编写在现代云平台上高效运行的程序。虽然开发速度为公司带来了成本效益,但开发人员个人受益于 Go 提供的快速学习曲线。MercadoLibre 的经验丰富的工程师不仅能够使用 Go 非常快速地构建高度关键的应用程序,而且即使是入门级工程师也能够编写服务,而在其他语言中,MercadoLibre 只会将这些服务委托给更高级的开发人员。例如,一组关键的用户 API(每分钟处理近千万个请求)是由入门级软件工程师开发的,其中许多人只是从大学最近的课程中了解到编程。同样,MercadoLibre 已经看到精通其他编程语言(如 Java、.NET 或 Ruby)的开发人员在短短几周内就学会了 Go,并开始编写生产服务。
使用 Go,MercadoLibre 的构建时间快了三倍 (3x),其测试套件运行速度惊人地快了 24 倍。这意味着公司的开发人员可以进行更改,然后比以前快得多地构建和测试该更改。
而且,使用 Go 将 MercadoLibre 的测试套件运行时间从 90 秒缩短到仅 3 秒,这对其开发人员来说是一个巨大的福音——允许他们在更快的测试完成时保持专注(和上下文)。
利用这一成功,MercadoLibre 不仅致力于对程序员进行持续教育,还致力于持续进行 Go 教育。该公司每年都会派关键工程领导人参加 GopherCon 和其他 Go 活动,MercadoLibre 的基础设施和安全团队鼓励所有开发团队保持 Go 版本的最新状态,并且该公司有一个团队正在开发一个Go-meli-toolkit:一个完整的 Go 库,用于连接 Fury 提供的所有服务。
让你的企业开始使用 Go
就像 MercadoLibre 从一个概念验证项目开始实施 Go 一样,还有几十家大型企业也在采用 Go。
全球有超过一百万开发者在使用 Go,他们来自银行业和商业、游戏和媒体、技术和其他行业,在像 美国运通、贝宝、Capital One、Dropbox、IBM、Monzo、纽约时报、Salesforce、Square、Target、Twitch、Uber,当然还有 Google 这样多元化的企业中。
要详细了解 Go 如何帮助你的企业构建可靠、可扩展的软件,就像在 MercadoLibre 中那样,请立即访问 go.dev。
关于 MercadoLibre
随着 MercadoLibre 的在线商业发展,Go 提供了干净、高效的代码,可以轻松扩展,并且通过允许其工程师在编写更少代码的同时为不断增长的受众提供服务,从而提高了开发人员的生产力。