Go 企業(yè)應(yīng)用案例分享:Go 用于支付和獎(jiǎng)勵(lì)系統(tǒng)
大家好,我是程序員幽鬼。
今天分享 Go 在企業(yè)中的應(yīng)用案例,該案例是美國(guó)運(yùn)通公司(Express)。該公司的一個(gè)總監(jiān)這樣評(píng)價(jià) Go 語(yǔ)言:
Go 與其他編程語(yǔ)言的不同之處在于認(rèn)知負(fù)載。你可以用更少的代碼做更多的事情,這樣可以更容易地推理和理解你最終編寫(xiě)的代碼。
大多數(shù) Go 代碼最終看起來(lái)非常相似,因此,即使你使用的是全新的代碼庫(kù),你也可以非常快速地上手并運(yùn)行。
總的一句話,他們認(rèn)為:Go 可改善微服務(wù)并提高生產(chǎn)力。
美國(guó)運(yùn)通公司將 Go 應(yīng)用于支付和薪酬系統(tǒng)。美國(guó)運(yùn)通的支付處理系統(tǒng)是在其悠久的歷史中發(fā)展起來(lái)的,并且已經(jīng)通過(guò)多種架構(gòu)演變進(jìn)行了更新。在任何更新中,支付處理都需要快速,特別是在非常大的交易量下,并且必須跨系統(tǒng)構(gòu)建彈性,這些系統(tǒng)必須完全符合安全和監(jiān)管標(biāo)準(zhǔn)。借助 Go,美國(guó)運(yùn)通獲得了支付和獎(jiǎng)勵(lì)網(wǎng)絡(luò)所需的速度和可擴(kuò)展性。
美國(guó)運(yùn)通明白,編程語(yǔ)言的格局正在發(fā)生巨大變化。該公司的現(xiàn)有系統(tǒng)是專門為高并發(fā)和低延遲而構(gòu)建的,但知道這些系統(tǒng)將在不久的將來(lái)重新構(gòu)建平臺(tái)。支付平臺(tái)團(tuán)隊(duì)決定花時(shí)間確定哪些語(yǔ)言是滿足美國(guó)運(yùn)通不斷變化的需求的理想選擇。
美國(guó)運(yùn)通的支付和獎(jiǎng)勵(lì)平臺(tái)團(tuán)隊(duì)是最早開(kāi)始評(píng)估 Go 的團(tuán)隊(duì)之一。這些團(tuán)隊(duì)專注于微服務(wù)、事務(wù)路由和負(fù)載均衡等業(yè)務(wù),他們需要對(duì)其架構(gòu)進(jìn)行現(xiàn)代化改造。許多美國(guó)運(yùn)通開(kāi)發(fā)人員都熟悉該語(yǔ)言的功能,并希望在其高并發(fā)和低延遲應(yīng)用程序(例如自定義事務(wù)負(fù)載均衡器)中試用 Go。考慮到這一目標(biāo),團(tuán)隊(duì)開(kāi)始游說(shuō)高級(jí)領(lǐng)導(dǎo)層在美國(guó)運(yùn)通支付平臺(tái)上部署 Go。
"我們希望找到最佳語(yǔ)言來(lái)編寫(xiě)快速高效的支付處理應(yīng)用程序,"美國(guó)運(yùn)通副總裁兼首席工程師 Benjamin Cane 說(shuō)。“為此,我們開(kāi)始了一場(chǎng)內(nèi)部編程語(yǔ)言的對(duì)決,目標(biāo)是看看哪種語(yǔ)言最適合我們的設(shè)計(jì)和性能需求。”
比較語(yǔ)言
對(duì)于他們的評(píng)估,Cane 的團(tuán)隊(duì)選擇用四種不同的編程語(yǔ)言構(gòu)建微服務(wù)。然后,他們比較了這四種語(yǔ)言的速度/性能、工具、測(cè)試和易開(kāi)發(fā)性。
對(duì)于該服務(wù),他們決定使用 ISO8583 到 JSON 轉(zhuǎn)換器。ISO8583 是金融交易的國(guó)際標(biāo)準(zhǔn),在美國(guó)運(yùn)通的支付網(wǎng)絡(luò)中常用。對(duì)于編程語(yǔ)言,他們選擇比較 C++,Go,Java 和 Node.js。除了 Go 之外,所有這些語(yǔ)言都已經(jīng)在美國(guó)運(yùn)通中使用。
從速度的角度來(lái)看,Go 以每秒 140,000 個(gè)請(qǐng)求獲得了第二好的性能。這表明,Go 用于后端微服務(wù)時(shí)表現(xiàn)出色。
雖然 Go 不是測(cè)試結(jié)果最快的語(yǔ)言,但其強(qiáng)大的工具有助于提高其整體結(jié)果。Go 內(nèi)置測(cè)試框架,profiling 和基準(zhǔn)測(cè)試工具給團(tuán)隊(duì)留下了深刻的印象。“在 Go 中編寫(xiě)有效的測(cè)試很容易,” Cane說(shuō)。“基準(zhǔn)測(cè)試和 profiling 功能使我們的應(yīng)用程序變得簡(jiǎn)單。再加上其快速的構(gòu)建時(shí)間,用 Go 編寫(xiě)經(jīng)過(guò)充分測(cè)試和優(yōu)化的代碼很容易。”
最終,Go 被團(tuán)隊(duì)選為構(gòu)建高性能微服務(wù)的首選語(yǔ)言。工具、測(cè)試框架、性能和語(yǔ)言簡(jiǎn)單性都是關(guān)鍵因素。
基礎(chǔ)架構(gòu)
“我們的許多服務(wù)都在我們基于 Kubernetes 的內(nèi)部云平臺(tái)的 Docker 容器中運(yùn)行,” Cane 說(shuō)。Kubernetes 是一個(gè)用 Go 編寫(xiě)的開(kāi)源容器編排系統(tǒng)。它提供了主機(jī)集群來(lái)運(yùn)行基于容器的工作負(fù)載,尤其是 Docker 容器。Docker 是一個(gè)軟件產(chǎn)品,也是用 Go 編寫(xiě)的,它使用操作系統(tǒng)級(jí)虛擬化來(lái)提供稱為容器的可移植軟件運(yùn)行時(shí)。
美國(guó)運(yùn)通還通過(guò) Prometheus 收集應(yīng)用程序指標(biāo),Prometheus 是一個(gè)用 Go 編寫(xiě)的開(kāi)源監(jiān)控和警報(bào)工具包。Prometheus 收集和聚合實(shí)時(shí)事件和指標(biāo),以進(jìn)行監(jiān)視和警報(bào)。
這三大 Go 解決方案(Kubernetes、Docker 和 Prometheus)幫助實(shí)現(xiàn)了美國(guó)運(yùn)通基礎(chǔ)設(shè)施的現(xiàn)代化。
使用 Go 提高性能
如今,許多開(kāi)發(fā)人員正在美國(guó)運(yùn)通使用 Go 進(jìn)行編程,其中大多數(shù)開(kāi)發(fā)人員都在為高可用性和性能而設(shè)計(jì)的平臺(tái)上工作。
“工具一直是我們遺留代碼庫(kù)需要的關(guān)鍵領(lǐng)域,” Cane 說(shuō)。“我們發(fā)現(xiàn) Go 具有出色的工具,以及內(nèi)置的測(cè)試、基準(zhǔn)測(cè)試和 profiling 框架。編寫(xiě)高效且有彈性的應(yīng)用程序很容易。”
Cane 甚至說(shuō),在使用 Go 開(kāi)發(fā)后,大多數(shù)開(kāi)發(fā)人員都不想回到其他語(yǔ)言了。
美國(guó)運(yùn)通才剛剛開(kāi)始看到圍棋的好處。例如,Go 從頭開(kāi)始設(shè)計(jì)時(shí)就考慮到了并發(fā)性 - 使用輕量級(jí)的"goroutines"而不是更重的操作系統(tǒng)線程 - 使得在同一地址空間中創(chuàng)建數(shù)十萬(wàn)個(gè) goroutines 變得切實(shí)可行。使用goroutines,美國(guó)運(yùn)通在其實(shí)時(shí)交易處理中看到了改進(jìn)的性能數(shù)字。
Go 的垃圾回收也是對(duì)其他語(yǔ)言的重大改進(jìn),無(wú)論是在性能還是易于開(kāi)發(fā)方面。“我們看到 Go 中的垃圾回收效果比其他語(yǔ)言要好得多,用于實(shí)時(shí)事務(wù)處理的垃圾回收是一件大事,” Cane 說(shuō)。“調(diào)整其他語(yǔ)言的垃圾回收可能非常復(fù)雜。使用 Go,你不需要調(diào)整任何東西。”
這里有一篇 Cane 寫(xiě)的詳細(xì)文章,關(guān)于美國(guó)運(yùn)通為什么選擇 Go:https://americanexpress.io/choosing-go/。
在他們的 GitHub 主頁(yè),可以看到有幾個(gè) Go 開(kāi)源項(xiàng)目:https://github.com/americanexpress。
本文轉(zhuǎn)載自微信公眾號(hào)「幽鬼」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系幽鬼公眾號(hào)。






























