PayPal 採用 Go 進行現代化與規模化

PayPal
Quotation mark.

由於我們的 NoSQL 與資料庫代理程式在多執行緒模式下使用了相當多的系統底層細節,導致程式碼在管理不同狀況時變得非常複雜。鑒於 Go 提供了通道(channels)與協程(routines)來處理這種複雜性,我們能夠建構出符合需求的程式碼架構。

— Bala Natarajan工程資深總監, 開發者體驗  於 PayPal

基於 Go 建構的新程式碼基礎架構

PayPal 的創立旨在實現金融服務民主化,並賦能個人與企業參與全球經濟並從中獲益。這項使命的核心是 PayPal 的支付平台,該平台結合了專有技術與第三方技術,能高效且安全地促進全球數百萬商家與消費者之間的交易。隨著支付平台的規模日益龐大且複雜,PayPal 致力於推動系統現代化,並縮短新應用程式的上市時間。

Go 在編寫簡潔、高效且能隨軟體部署規模擴展的程式碼方面展現了其價值,使該語言非常適合支援 PayPal 的目標。

支付處理平台的核心是一個由 PayPal 以 C++ 開發的專有 NoSQL 資料庫。然而,程式碼的複雜性極大地降低了開發人員升級平台的能力。Go 簡潔的程式碼佈局、goroutines(輕量級執行緒)以及通道(作為連接並發 goroutines 的管道),使 Go 成為 NoSQL 開發團隊簡化與現代化平台的自然選擇。

作為概念驗證(PoC),一個開發團隊花了六個月的時間學習 Go,並從零開始以 Go 重建了 NoSQL 系統。在此期間,他們也提供了關於如何在 PayPal 更廣泛地導入 Go 的見解。截至今日,已有 30% 的叢集已遷移至使用此新款 NoSQL 資料庫。

使用 Go 簡化規模化運作

隨著 PayPal 的平台變得日益複雜,Go 提供了一種輕鬆簡化大規模軟體開發與執行複雜度的方法。該語言為 PayPal 提供了優質的函式庫、快速的工具,以及並發處理、記憶體回收(garbage collection)與型別安全等特性。

透過 Go,PayPal 讓開發人員從 C++ 與 Java 開發的雜訊中解脫出來,將更多時間用於審視程式碼與進行策略思考。

在這個新重寫的 NoSQL 系統取得成功後,PayPal 內部的更多平台與內容團隊開始採用 Go。Natarajan 目前帶領的團隊負責 PayPal 的建置、測試與發布流水線——這些全都以 Go 建構。該公司擁有一個大型的建置與測試機房,完全使用 Go 基礎架構進行管理,以支援公司內部開發人員的「建置即服務」(builds-as-a-service)與「測試即服務」(tests-as-a-service)。

Go gopher factory

以 Go 實現 PayPal 系統現代化

針對 PayPal 所需的分散式運算能力,Go 是更新系統的正確語言。PayPal 需要能夠進行並發與平行處理、能編譯出高效能且高度可攜的程式語言,並能為開發人員帶來模組化、可組合的開源架構所具備的優勢——Go 實現了這一切,並協助 PayPal 完成了系統現代化。

安全性與可維護性是 PayPal 的關鍵事項,公司的營運流水線也越來越多地由 Go 主導,因為該語言的簡潔性與模組化有助於實現這些目標。PayPal 對 Go 的部署為開發人員創造了一個充滿創意的平台,讓他們能夠為 PayPal 的全球市場開發出簡潔、高效且可靠的大規模軟體。

隨著 PayPal 持續以 Go 更新其軟體定義網路(SDN)基礎架構,他們不僅看到了程式碼可維護性的提升,也獲得了效能上的優勢。例如,Go 現已驅動了路由器、負載平衡器以及越來越多的生產系統。

在我們執行 Go 程式碼的嚴格管理環境中,我們觀察到 CPU 使用率降低了約 10%,同時程式碼也變得更簡潔且易於維護。

— Bala Natarajan工程資深總監

Go 提升開發人員生產力

作為全球性營運企業,PayPal 需要其開發團隊能夠有效管理兩種規模:生產規模(特別是與其他伺服器如雲端服務互動的並發系統);以及開發規模(特別是多位程式設計師協同開發的大型程式碼庫,如開源開發)。

PayPal 利用 Go 來解決這些規模化的問題。公司的開發人員受惠於 Go 的特性,它結合了解譯型、動態型別語言的編寫易用性,以及靜態型別、編譯語言的高效與安全。在 PayPal 進行系統現代化之際,對於網路與多核心運算的支援至關重要。Go 不僅提供了這些支援,且效率極高——在單台電腦上編譯大型可執行檔僅需幾秒鐘。

目前 PayPal 有超過 100 位 Go 開發人員。得益於公司內部已有的許多成功部署案例,未來選擇採用 Go 的開發人員在申請使用該語言時將會更加順利。

最重要的是,PayPal 的開發人員透過 Go 提升了生產力。Go 的並發機制使得編寫程式變得更加容易,能充分利用 PayPal 的多核心與連網機器。使用 Go 的開發人員同時也受惠於它能快速編譯成機器碼,且應用程式能享有記憶體回收的便利與執行時期反射(run-time reflection)的強大功能。

加速 PayPal 的產品上市時間

目前 PayPal 的一線語言是 Java 與 Node,Go 主要被用作基礎架構語言。儘管 Go 可能永遠不會取代某些特定應用中的 Node.js,但 Natarajan 正推動將 Go 成為 PayPal 的一線語言。

透過他的努力,PayPal 也正在評估遷移至 Google Kubernetes Engine (GKE) 以加速新產品的上市時間。GKE 是一個託管的、生產就緒型環境,用於部署容器化應用程式,並帶來了 Google 在開發人員生產力、自動化運營與開源靈活性方面的最新創新。

對於 PayPal 而言,部署至 GKE 將能簡化應用程式與服務的部署、更新與管理,從而實現快速開發與迭代。此外,PayPal 也將能更輕鬆地執行機器學習、通用 GPU(GPGPU)、高效能運算以及其他受惠於 GKE 支援之專用硬體加速器的工作負載。

對 PayPal 而言最重要的是,Go 開發與 GKE 的結合使公司能夠毫不費力地根據需求進行擴展。Kubernetes 的自動縮放功能讓 PayPal 能夠處理不斷增加的服務使用者需求,在關鍵時刻確保服務可用,並在平靜時期縮減資源以節省成本。

讓您的企業開始使用 Go

PayPal 的故事並非個案;其他數十家大型企業也正在發現 Go 如何協助他們更快地發布可靠的軟體。全球有超過一百萬名開發人員使用 Go,遍及銀行與商業、遊戲與媒體、技術與其他行業。這些企業包括 American ExpressMercado Libre、Capital One、Dropbox、IBM、Monzo、紐約時報 (New York Times)、Salesforce、Square、Target、Twitch、Uber,當然還有 Google。

若想了解更多關於 Go 如何像協助 PayPal 一樣幫助您的企業建構可靠、可擴展的軟體,請立即訪問 go.dev

PayPal PayPal

關於 PayPal

Go 在編寫簡潔、高效且能隨軟體部署規模擴展的程式碼方面展現了其價值,使該語言非常適合支援 PayPal 的目標。