アメリカン・エキスプレスが決済とリワードにGoを採用

American Express
Quotation mark.

Goが他のプログラミング言語と異なるのは、認知負荷です。より少ないコードでより多くのことができるため、書いたコードを推論し、理解しやすくなります。

ほとんどのGoコードは非常によく似ているため、まったく新しいコードベースで作業している場合でも、かなり迅速に立ち上げて実行することができます。

— グレン・バリエット 、  アメリカン・エキスプレス ロイヤリティプラットフォーム エンジニアリングディレクター

Goがマイクロサービスを改善し、生産性を加速

1850年に設立されたアメリカン・エキスプレスは、チャージカードおよびクレジットカード製品、加盟店獲得および処理サービス、ネットワークサービス、旅行関連サービスを提供する、グローバルに統合された決済会社です。

アメリカン・エキスプレスの決済処理システムは、その長い歴史の中で開発され、複数のアーキテクチャの進化を経て更新されてきました。いかなる更新においても、決済処理は高速である必要があり、特に非常に大規模なトランザクション量では、セキュリティおよび規制基準に準拠する必要があるシステム全体に回復力が組み込まれている必要があります。Goを使用することで、アメリカン・エキスプレスは、決済ネットワークとリワードネットワークの両方に必要な速度とスケーラビリティを獲得しています。

アメリカン・エキスプレスシステムの近代化

アメリカン・エキスプレスは、プログラミング言語の状況が劇的に変化していることを認識しています。同社の既存システムは、高い並行性と低いレイテンシのために目的に合わせて構築されていましたが、それらのシステムが近い将来に再プラットフォーム化されることを知っていました。決済プラットフォームチームは、アメリカン・エキスプレスの進化するニーズに理想的な言語を特定するために時間をかけることを決定しました。

アメリカン・エキスプレスの決済およびリワードプラットフォームチームは、Goの評価を開始した最初のチームの1つでした。これらのチームは、マイクロサービス、トランザクションルーティング、およびロードバランシングのユースケースに焦点を当てており、アーキテクチャを近代化する必要がありました。多くのアメリカン・エキスプレス開発者は、言語の機能に精通しており、高い並行性と低いレイテンシのアプリケーション(カスタムトランザクションロードバランサーなど)のためにGoを試験的に導入したいと考えていました。この目標を念頭に置いて、チームはアメリカン・エキスプレスの決済プラットフォームにGoを導入するよう上級管理職に働きかけ始めました。

「決済処理のための高速で効率的なアプリケーションを作成するための最適な言語を見つけたかったのです」と、アメリカン・エキスプレスのバイスプレジデント兼プリンシパルエンジニアであるベンジャミン・ケーンは述べています。「そのため、設計とパフォーマンスのニーズに最適な言語を見つけることを目的とした社内プログラミング言語対決を開始しました。」

言語の比較

評価のために、ケーンのチームは4つの異なるプログラミング言語でマイクロサービスを構築することを選択しました。そして、速度/パフォーマンス、ツール、テスト、開発の容易さの4つの言語を比較しました。

サービスのために、ISO8583からJSONへのコンバーターを決定しました。ISO8583は金融取引のための国際標準であり、アメリカン・エキスプレスの決済ネットワーク内で一般的に使用されています。プログラミング言語については、C++、Go、Java、Node.jsを比較することを選択しました。Goを除いて、これらの言語はすべてアメリカン・エキスプレス内で既に使用されていました。

速度の観点から、Goは1秒あたり140,000リクエストで2番目に良いパフォーマンスを達成しました。Goは、バックエンドマイクロサービスに使用される場合に優れていることを示しました。

Goはテストされた中で最速の言語ではなかったかもしれませんが、その強力なツールは全体的な結果を向上させるのに役立ちました。Goの組み込みテストフレームワーク、プロファイリング機能、ベンチマークツールはチームに感銘を与えました。「Goで効果的なテストを書くのは簡単です」とケーンは述べています。「ベンチマークとプロファイリング機能により、アプリケーションのチューニングが簡単になります。高速なビルド時間と相まって、Goは十分にテストされ、最適化されたコードを簡単に書くことができます。」

最終的に、Goはチームによって高性能マイクロサービスを構築するための推奨言語として選択されました。ツール、テストフレームワーク、パフォーマンス、および言語のシンプルさがすべて主要な貢献要因でした。

インフラストラクチャのためのGo

「当社のサービスの多くは、Kubernetesベースの社内クラウドプラットフォーム内のDockerコンテナで実行されています」とケーンは述べています。Kubernetesは、Goで書かれたオープンソースのコンテナオーケストレーションシステムです。コンテナベースのワークロード、特にDockerコンテナを実行するためのホストのクラスターを提供します。Dockerは、Goで書かれたソフトウェア製品であり、オペレーティングシステムレベルの仮想化を使用してコンテナと呼ばれるポータブルソフトウェアランタイムを提供します。

アメリカン・エキスプレスは、Goで書かれたオープンソースの監視およびアラートツールキットであるPrometheusを介してアプリケーションメトリクスも収集しています。Prometheusは、監視とアラートのためにリアルタイムイベントとメトリクスを収集および集計します。

Kubernetes、Docker、PrometheusというこのGoソリューションの三位一体は、アメリカン・エキスプレスのインフラストラクチャを近代化するのに役立っています。

Goでパフォーマンスを向上

現在、アメリカン・エキスプレスでは何十人もの開発者がGoでプログラミングしており、そのほとんどが高可用性とパフォーマンスのために設計されたプラットフォームで作業しています。

「ツールは常に当社のレガシーコードベースにとって重要なニーズ分野でした」とケーンは述べています。「Goには優れたツールがあり、組み込みのテスト、ベンチマーク、プロファイリングフレームワークも備わっていることがわかりました。効率的で回復力のあるアプリケーションを簡単に書くことができます。」

Goで作業した後、ほとんどの開発者は他の言語に戻りたがりません。

— ベンジャミン・ケーン 、  アメリカン・エキスプレス バイスプレジデント兼プリンシパルエンジニア

アメリカン・エキスプレスは、Goの利点をようやく認識し始めています。たとえば、Goは並行性を念頭に置いてゼロから設計されており、重いオペレーティングシステムのスレッドではなく軽量の「goroutine」を使用することで、同じアドレス空間に数十万のgoroutineを作成することが実用的になっています。goroutineを使用することで、アメリカン・エキスプレスはリアルタイムトランザクション処理でパフォーマンス数値の向上を見てきました。

Goのガベージコレクションも、パフォーマンスと開発の容易さの両面で他の言語よりも大幅に改善されています。「Goのガベージコレクションは他の言語よりもはるかに優れた結果を示し、リアルタイムトランザクション処理にとってガベージコレクションは非常に重要です」とケーンは述べています。「他の言語でガベージコレクションをチューニングするのは非常に複雑な場合があります。Goでは何もチューニングする必要はありません。」

詳細については、アメリカン・エキスプレスでのGoの採用についてさらに詳しく掘り下げた「Choosing Go at American Express」をお読みください。

企業でのGoの導入

アメリカン・エキスプレスがGoを使用して決済およびリワードネットワークを近代化しているのと同じように、他の数十の大企業もGoを採用しています。

世界中で100万人以上の開発者がGoを使用しており、銀行および商業、ゲームおよびメディア、テクノロジー、その他の産業にわたる企業で、PayPalMercado Libre、Capital One、Dropbox、IBM、Mercado Libre、Monzo、New York Times、Salesforce、Square、Target、Twitch、Uber、そしてもちろんGoogleなど、多様な企業で利用されています。

Goがアメリカン・エキスプレスのように、あなたの企業が信頼性の高いスケーラブルなソフトウェアを構築するのにどのように役立つかについて詳しく知るには、今すぐgo.devをご覧ください。

American Express American Express

アメリカン・エキスプレスについて

Goは、アメリカン・エキスプレスに、決済ネットワークとリワードネットワークの両方に必要な速度とスケーラビリティを提供します。