当社のNoSQLとDBプロキシはマルチスレッドモードでかなりのシステム詳細を使用していたため、さまざまな条件を管理するコードが複雑になっていました。Goが複雑さに対処するためのチャネルとルーチンを提供しているため、要件を満たすようにコードを構築することができました。
Goで構築された新しいコードインフラストラクチャ
PayPalは、金融サービスを民主化し、人々や企業がグローバル経済に参加し、成長することを支援するために設立されました。この取り組みの中心となるのがPayPalの決済プラットフォームであり、独自の技術とサードパーティの技術を組み合わせて、世界中の何百万もの販売者と消費者間の取引を効率的かつ安全に促進しています。決済プラットフォームが拡大し、より複雑になるにつれて、PayPalはシステムの近代化と新しいアプリケーションの市場投入までの時間の短縮を模索しました。
Goは、ソフトウェアの展開規模に応じて容易に拡張できるクリーンで効率的なコードを生成する点で価値があり、PayPalの目標をサポートするのに最適な言語でした。
決済処理プラットフォームの中心には、PayPalがC++で開発した独自のNoSQLデータベースがありました。しかし、コードの複雑さが開発者のプラットフォーム進化能力を大幅に低下させていました。Goのシンプルなコードレイアウト、goroutine(軽量な実行スレッド)、およびチャネル(同時並行のgoroutineを接続するパイプとして機能)により、GoはNoSQL開発チームにとってプラットフォームを簡素化し、近代化するための自然な選択肢となりました。
概念実証として、開発チームは6ヶ月間Goを学び、NoSQLシステムをGoでゼロから再実装しました。その間、PayPalでGoをより広範囲に実装する方法についての洞察も提供しました。現在、クラスターの30%が新しいNoSQLデータベースを使用するように移行されています。
Goを使って規模に合わせて簡素化する
PayPalのプラットフォームがより複雑になるにつれて、Goは大規模なソフトウェアの作成と実行の複雑さを容易に簡素化する方法を提供します。この言語は、PayPalに優れたライブラリと高速ツール、さらに並行処理、ガベージコレクション、タイプセーフティを提供します。
Goを使用することで、PayPalは開発者がC++やJava開発の煩わしさから解放され、より多くの時間をコードの検討や戦略的思考に費やすことができます。
この新しく書き換えられたNoSQLシステムの成功後、PayPal内のより多くのプラットフォームチームとコンテンツチームがGoを採用し始めました。Natarajanの現在のチームは、PayPalのビルド、テスト、リリースパイプラインを担当しており、これらはすべてGoで構築されています。同社は、社内の開発者向けにサービスとしてのビルド(およびサービスとしてのテスト)をサポートするために、Goインフラストラクチャを使用して完全に管理されている大規模なビルドおよびテストファームを所有しています。

GoによるPayPalシステムの近代化
PayPalが必要とする分散コンピューティング機能にとって、Goはシステムを刷新するのに適した言語でした。PayPalは、並行処理と並列処理が可能で、高性能にコンパイルされ、高い移植性を持ち、開発者にモジュール式で構成可能なオープンソースアーキテクチャの利点をもたらすプログラミングを必要としていました。Goは、PayPalがシステムを近代化するのに役立つそれらすべて、そしてそれ以上のものを提供しました。
PayPalにとってセキュリティとサポート性は重要な問題であり、同社の運用パイプラインではGoがますます優勢になっています。なぜなら、Goのクリーンさとモジュール性により、これらの目標を達成できるからです。PayPalがGoを導入することで、開発者にとって創造性のプラットフォームが生まれ、PayPalの全世界市場向けにシンプルで効率的かつ信頼性の高いソフトウェアを大規模に生産できるようになります。
PayPalがGoを使ってソフトウェア定義型ネットワーク(SDN)インフラストラクチャを近代化し続けるにつれて、保守性の高いコードに加えてパフォーマンス上の利点も見ています。たとえば、Goは現在、ルーター、ロードバランサー、および増加する数の本番システムを動かしています。
「
Goコードを実行する厳密に管理された環境では、よりクリーンで保守性の高いコードにより、CPUが約10%削減されました。
Goが開発者の生産性を向上させる
グローバルな事業であるPayPalは、開発チームが2種類の規模を効果的に管理できる必要があります。1つは本番規模で、特に多くの他のサーバー(クラウドサービスなど)と連携する同時実行システムです。もう1つは開発規模で、特に多くのプログラマーが連携して開発する大規模なコードベース(オープンソース開発など)です。
PayPalは、Goを活用してこれらの規模の問題に対処しています。同社の開発者は、Goが解釈型で動的に型付けされた言語のプログラミングの容易さと、静的に型付けされたコンパイル言語の効率性と安全性を組み合わせる能力から恩恵を受けています。PayPalがシステムを近代化するにつれて、ネットワークとマルチコアコンピューティングのサポートが重要になります。Goはそのようなサポートを提供するだけでなく、迅速に提供します。単一のコンピューターで大規模な実行可能ファイルをコンパイルするのにかかる時間は、せいぜい数秒です。
現在、PayPalには100人を超えるGo開発者がおり、今後Goを採用する開発者は、すでに同社で多数の成功した実装が本番稼働しているおかげで、Goの承認を得るのが容易になります。
最も重要なことは、PayPalの開発者がGoで生産性を向上させたことです。Goの並行処理メカニズムにより、PayPalのマルチコアおよびネットワーク接続されたマシンを最大限に活用するプログラムを簡単に作成できるようになりました。Goを使用する開発者は、Goが機械語に素早くコンパイルされるという事実からも恩恵を受けており、彼らのアプリケーションはガベージコレクションの利便性とランタイムリフレクションの強力な機能を享受できます。
PayPalの市場投入までの時間を短縮する
今日のPayPalにおける主要言語はJavaとNodeであり、Goは主にインフラストラクチャ言語として使用されています。特定のアプリケーションではGoがNode.jsに取って代わることはないかもしれませんが、NatarajanはGoをPayPalの主要言語にすることを推進しています。
彼の努力を通じて、PayPalは新しい製品の市場投入までの時間を短縮するためにGoogle Kubernetes Engine(GKE)への移行も検討しています。GKEは、コンテナ化されたアプリケーションをデプロイするための管理された本番環境であり、開発者の生産性、自動化された運用、オープンソースの柔軟性におけるGoogleの最新のイノベーションをもたらします。
PayPalにとって、GKEへの展開は、PayPalがアプリケーションとサービスをより簡単にデプロイ、更新、管理できるようにすることで、迅速な開発と反復を可能にします。さらに、PayPalは、機械学習、汎用GPU、ハイパフォーマンスコンピューティング、およびGKEがサポートする特殊なハードウェアアクセラレータから恩恵を受けるその他のワークロードを実行することが容易になります。
PayPalにとって最も重要なのは、Go開発とGKEの組み合わせにより、Kubernetesのオートスケーリングがサービスのユーザー需要の増加に対応できるようにするため、需要を満たすために会社が楽に拡張できることです。これにより、最も重要なときにサービスを維持し、静かな期間には規模を縮小してコストを節約できます。
企業でGoを始める
PayPalの事例は珍しいものではありません。他の数十の大企業が、Goがいかに信頼性の高いソフトウェアをより速く出荷するのに役立つかを発見しています。世界中で100万人を超える開発者がGoを使用しており、金融や商業、ゲームやメディア、テクノロジーなどの業界にわたって、アメリカン・エキスプレス、メルカド・リブレ、キャピタル・ワン、Dropbox、IBM、モンゾ、ニューヨーク・タイムズ、セールスフォース、スクエア、ターゲット、Twitch、Uber、そしてもちろんGoogleといった多様な企業で採用されています。
GoがPayPalで行われているように、企業が信頼性のあるスケーラブルなソフトウェアを構築するのにどのように役立つかについて詳しく知るには、今すぐgo.devをご覧ください。
PayPalについて
Goは、ソフトウェアの展開規模に応じて容易に拡張できるクリーンで効率的なコードを生成する点で価値があり、PayPalの目標をサポートするのに最適な言語でした。