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