Go 企业应用案例分享:Go 用于支付和奖励系统
争做团队核心程序员,关注「幽鬼」
大家好,我是程序员幽鬼。
今天分享 Go 在企业中的应用案例,该案例是美国运通公司(Express)。该公司的一个总监这样评价 Go 语言:
Go 与其他编程语言的不同之处在于认知负载。你可以用更少的代码做更多的事情,这样可以更容易地推理和理解你最终编写的代码。
大多数 Go 代码最终看起来非常相似,因此,即使你使用的是全新的代码库,你也可以非常快速地上手并运行。
总的一句话,他们认为:Go 可改善微服务并提高生产力。
美国运通公司将 Go 应用于支付和薪酬系统。美国运通的支付处理系统是在其悠久的历史中发展起来的,并且已经通过多种架构演变进行了更新。在任何更新中,支付处理都需要快速,特别是在非常大的交易量下,并且必须跨系统构建弹性,这些系统必须完全符合安全和监管标准。借助 Go,美国运通获得了支付和奖励网络所需的速度和可扩展性。
美国运通明白,编程语言的格局正在发生巨大变化。该公司的现有系统是专门为高并发和低延迟而构建的,但知道这些系统将在不久的将来重新构建平台。支付平台团队决定花时间确定哪些语言是满足美国运通不断变化的需求的理想选择。
美国运通的支付和奖励平台团队是最早开始评估 Go 的团队之一。这些团队专注于微服务、事务路由和负载均衡等业务,他们需要对其架构进行现代化改造。许多美国运通开发人员都熟悉该语言的功能,并希望在其高并发和低延迟应用程序(例如自定义事务负载均衡器)中试用 Go。考虑到这一目标,团队开始游说高级领导层在美国运通支付平台上部署 Go。
"我们希望找到最佳语言来编写快速高效的支付处理应用程序,"美国运通副总裁兼首席工程师 Benjamin Cane 说。“为此,我们开始了一场内部编程语言的对决,目标是看看哪种语言最适合我们的设计和性能需求。”
比较语言
对于他们的评估,Cane 的团队选择用四种不同的编程语言构建微服务。然后,他们比较了这四种语言的速度/性能、工具、测试和易开发性。
对于该服务,他们决定使用 ISO8583 到 JSON 转换器。ISO8583 是金融交易的国际标准,在美国运通的支付网络中常用。对于编程语言,他们选择比较 C++,Go,Java 和 Node.js。除了 Go 之外,所有这些语言都已经在美国运通中使用。
从速度的角度来看,Go 以每秒 140,000 个请求获得了第二好的性能。这表明,Go 用于后端微服务时表现出色。
虽然 Go 不是测试结果最快的语言,但其强大的工具有助于提高其整体结果。Go 内置测试框架,profiling 和基准测试工具给团队留下了深刻的印象。“在 Go 中编写有效的测试很容易,” Cane说。“基准测试和 profiling 功能使我们的应用程序变得简单。再加上其快速的构建时间,用 Go 编写经过充分测试和优化的代码很容易。”
最终,Go 被团队选为构建高性能微服务的首选语言。工具、测试框架、性能和语言简单性都是关键因素。
基础架构
“我们的许多服务都在我们基于 Kubernetes 的内部云平台的 Docker 容器中运行,” Cane 说。Kubernetes 是一个用 Go 编写的开源容器编排系统。它提供了主机集群来运行基于容器的工作负载,尤其是 Docker 容器。Docker 是一个软件产品,也是用 Go 编写的,它使用操作系统级虚拟化来提供称为容器的可移植软件运行时。
美国运通还通过 Prometheus 收集应用程序指标,Prometheus 是一个用 Go 编写的开源监控和警报工具包。Prometheus 收集和聚合实时事件和指标,以进行监视和警报。
这三大 Go 解决方案(Kubernetes、Docker 和 Prometheus)帮助实现了美国运通基础设施的现代化。
使用 Go 提高性能
如今,许多开发人员正在美国运通使用 Go 进行编程,其中大多数开发人员都在为高可用性和性能而设计的平台上工作。
“工具一直是我们遗留代码库需要的关键领域,” Cane 说。“我们发现 Go 具有出色的工具,以及内置的测试、基准测试和 profiling 框架。编写高效且有弹性的应用程序很容易。”
Cane 甚至说,在使用 Go 开发后,大多数开发人员都不想回到其他语言了。
美国运通才刚刚开始看到Go的好处。例如,Go 从头开始设计时就考虑到了并发性 - 使用轻量级的"goroutines"而不是更重的操作系统线程 - 使得在同一地址空间中创建数十万个 goroutines 变得切实可行。使用goroutines,美国运通在其实时交易处理中看到了改进的性能数字。
Go 的垃圾回收也是对其他语言的重大改进,无论是在性能还是易于开发方面。“我们看到 Go 中的垃圾回收效果比其他语言要好得多,用于实时事务处理的垃圾回收是一件大事,” Cane 说。“调整其他语言的垃圾回收可能非常复杂。使用 Go,你不需要调整任何东西。”
这里有一篇 Cane 写的详细文章,关于美国运通为什么选择 Go:https://americanexpress.io/choosing-go/。
在他们的 GitHub 主页,可以看到有几个 Go 开源项目:https://github.com/americanexpress。
往期推荐
欢迎关注「幽鬼」,像她一样做团队的核心。