我认为,Go 语言之旅是我见过最好的语言入门教程,它真的非常简单,并且能让你对这门语言的大约 80% 有一个大致的了解。当我们希望开发者学习 Go 语言并快速投入生产时,我们都会告诉他们从 Go 语言之旅开始。
Go 语言帮助集成生态系统吸引开发者并扩展电子商务规模
MercadoLibre, Inc. 拥有拉丁美洲最大的在线商业生态系统,业务遍及 18 个国家。该公司成立于 1999 年,总部设在阿根廷,已转向使用 Go 语言来帮助其扩展和现代化其生态系统。Go 提供了简洁、高效的代码,可以随着 MercadoLibre 在线商业的增长而轻松扩展,并通过让工程师在编写更少代码的同时服务于不断增长的受众,从而提高开发人员的生产力。
MercadoLibre 利用 Go 语言实现扩展
早在 2015 年,MercadoLibre 内部就有一种日益增长的感觉,即他们现有的基于 Groovy 和 Grails 的 API 框架已达到极限,公司需要一个不同的平台才能继续扩展。MercadoLibre 的平台一直在(并将继续)呈指数级扩展,这给其开发人员带来了大量额外工作:Groovy 和 Grails 都要求开发人员做出许多决策,并且 Groovy 是一种动态编程语言。对于快速扩展增长而言,这不是一个好的组合,因为 MercadoLibre 在这个资源密集型环境中需要非常有经验的开发人员来开发和调优以实现所需的性能。测试执行时间很慢,构建和部署时间也很慢。因此,代码效率和可扩展性的需求变得与代码开发速度的需求同样重要。
Go 语言提高系统效率
作为 Go 对网络效率贡献的一个例子,核心 API 团队构建并维护着公司微服务解决方案中心最大的 API。该团队创建用户 API,这些 API 又被 MercadoLibre Marketplace、MercadoPago FinTech 平台、MercadoLibre 的运输和物流解决方案以及其他托管解决方案使用。由于这些解决方案所需的服务水平很高——平均用户 API 每分钟有 8 到 1000 万个请求——该团队使用 Go 语言在每请求不到 10 毫秒的时间内为它们提供服务。
API 团队还部署了 Docker 容器——一种软件即服务 (SaaS) 产品,也用 Go 语言编写——以虚拟化其开发并通过 Docker Engine 轻松部署其微服务。该系统支持更大的、任务关键型 API,这些 API 每分钟处理超过 2000 万个 Go 语言请求。
一个 API 重要地使用了 Go 的并发原语来有效地多路复用来自多个服务的 ID。团队能够用几行 Go 代码实现这一点,这个 API 的成功说服了核心 API 团队将越来越多的微服务迁移到 Go。MercadoLibre 的最终结果是提高了成本效率和系统响应时间。
Go 语言实现可扩展性
从历史上看,该公司的大部分技术栈都是基于 Grails 和 Groovy,并由关系数据库支持。然而,这个具有多层的大型框架很快就遇到了可扩展性问题。
将这种遗留架构转换为 Go 作为构建 API 的全新、非常薄的框架,简化了这些中间层并带来了巨大的性能优势。例如,一个大型 Go 服务现在能够每台机器运行 70,000 个请求,仅占用 20 MB 内存。
“
Go 对我们来说简直太棒了。它功能强大且易于学习,对于后端基础设施而言,在可扩展性方面对我们帮助很大。
使用 Go 语言让 MercadoLibre 将其用于此服务的服务器数量减少了八分之一(从 32 台服务器减少到 4 台),此外每台服务器的功耗也更低(原来是四个 CPU 核心,现在减少到两个 CPU 核心)。借助 Go 语言,该公司取消了 88% 的服务器,并将剩余服务器的 CPU 减半——从而产生了巨大的成本节约。
MercadoLibre 位于开发人员和云提供商之间,使用名为 Fury 的平台——一个平台即服务工具,用于以云无关的方式构建、部署、监控和管理服务。因此,任何想要在 Go 中创建新服务的团队都可以访问各种服务类型的成熟模板,并且可以快速在 GitHub 中启动一个包含入门代码、服务的 Docker 镜像和部署管道的仓库。最终结果是一个系统,它允许工程师专注于构建创新服务,同时避免设置新项目的繁琐阶段——所有这些都有效地标准化了构建和部署管道。
如今,MercadoLibre 大约一半的流量由 Go 应用程序处理。
MercadoLibre 将 Go 语言用于开发者
MercadoLibre 基础设施的编程通用语言目前是 Go 和 Java。每个应用程序、每个程序、每个微服务都托管在自己的 GitHub 存储库中,此外,公司还使用一个额外的工具包 GitHub 存储库来解决新问题并允许客户与其服务进行交互。
这些广泛且精心策划的 Go 和 Java 工具包允许程序员快速开发新应用程序并获得大力支持。此外,在一个拥有 2800 多名开发人员的社区中,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 倍。这意味着公司的开发人员可以更快地进行更改,然后构建和测试这些更改。
将 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
Go 语言提供简洁、高效的代码,可以随着 MercadoLibre 在线商业的增长而轻松扩展,并通过让工程师在编写更少代码的同时服务于不断增长的受众,从而提高开发人员的生产力。