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は、監視とアラートのためにリアルタイムのイベントとメトリクスを収集および集計します。
このGoソリューションの三頭政治(Kubernetes、Docker、Prometheus)は、アメリカン・エキスプレスのインフラストラクチャを近代化するのに役立ちました。
Goによるパフォーマンスの向上
今日、多数の開発者がアメリカン・エキスプレスでGoを使用してプログラミングしており、そのほとんどが高可用性とパフォーマンス向けに設計されたプラットフォームに取り組んでいます。
「ツールは常にレガシーコードベースにとって重要なニーズ領域でした」とケイン氏は述べています。「Goには優れたツールと、組み込みのテスト、ベンチマーク、プロファイリングフレームワークがあることがわかりました。効率的で回復力のあるアプリケーションを簡単に作成できます。」
「Goで作業した後、ほとんどの開発者は他の言語に戻りたくありません。」
アメリカン・エキスプレスは、Goの利点を見始めたばかりです。たとえば、Goは並行性を念頭に置いてゼロから設計されており、より重いオペレーティングシステムスレッドではなく軽量の「ゴルーチン」を使用しているため、同じアドレス空間で数十万のゴルーチンを作成することが実用的になっています。ゴルーチンを使用することで、アメリカン・エキスプレスはリアルタイムトランザクション処理でパフォーマンス数値が向上しています。
Goのガベージコレクションは、パフォーマンスと開発の容易さの両方の点で、他の言語よりも大幅に改善されています。「Goでは、他の言語よりもはるかに優れたガベージコレクションの結果が得られ、リアルタイムトランザクション処理のガベージコレクションは非常に重要です」とケイン氏は述べています。「他の言語でのガベージコレクションの調整は非常に複雑になる可能性があります。Goでは何も調整しません。」
詳細については、「アメリカン・エキスプレスでのGoの選択」をお読みください。これは、アメリカン・エキスプレスでのGoの採用について詳しく説明しています。
企業でのGoの開始
アメリカン・エキスプレスが決済および報酬ネットワークを近代化するためにGoを使用しているように、他の多くの大企業もGoを採用しています。
世界中で100万人以上の開発者がGoを使用しており、銀行および商業、ゲームおよびメディア、テクノロジー、その他の業界にまたがり、PayPal、Mercado Libre、Capital One、Dropbox、IBM、Mercado Libre、Monzo、New York Times、Salesforce、Square、Target、Twitch、Uber、そしてもちろんGoogleなど、多様な企業で使用されています。
アメリカン・エキスプレスのように、Goが企業による信頼性の高いスケーラブルなソフトウェアの構築にどのように役立つかについて詳しく知るには、今すぐgo.devにアクセスしてください。
アメリカン・エキスプレスについて
Goは、アメリカン・エキスプレスに決済と報酬ネットワークの両方に必要な速度と拡張性を提供します。