Googleの使命は、「世界の情報を整理し、世界中の人々がアクセスできて使えるようにすること」です。その情報の整理を担当するチームの1つが、Googleのコアデータソリューションチームです。このチームは、とりわけ、世界中のウェブページをインデックス化するサービスを維持しています。これらのウェブインデックスサービスは、検索結果を最新かつ包括的に保つことで、Google検索などの製品をサポートしており、Goで記述されています。
2015年、Googleの規模に対応するために、私たちのチームはインデックススタックをC++で記述された単一のモノリシックなバイナリから、マイクロサービスアーキテクチャの複数のコンポーネントに書き直す必要がありました。私たちは、多くのインデックスサービスをGoで書き直すことにしました。現在、アーキテクチャの大部分をGoで運用しています。
「Goの組み込み並行処理は、チームのエンジニアが並行処理と並列アルゴリズムを使用することが推奨されているため、まさにうってつけです。」
言語を選択する際、私たちのチームはGoのいくつかの機能が特に適していることを発見しました。たとえば、Goの組み込み並行処理は、チームのエンジニアが並行処理と並列アルゴリズムを使用することが推奨されているため、まさにうってつけです。エンジニアはまた、「Goのコードはより自然」であるため、メモリ管理やパフォーマンスの最適化ではなく、ビジネスロジックと分析に集中できると感じています。
Goでコードを書く方がはるかに簡単です。開発プロセス中の認知負荷を軽減するのに役立つからです。たとえば、C++で作業する場合、高度なIDEは「実際にはコンパイルエラーがある場合でも、ソースコードにコンパイルエラーがないことを示す」ことがありますが、「Goでは、[IDE]がコードにコンパイルエラーがないと表示されている場合、[コード]は常にコンパイルされます」と、コアデータソリューションチームのソフトウェアエンジニアであるミンジェ・ファンは述べています。コンパイルエラーの修正サイクルを短縮するなど、開発プロセスにおける小さな摩擦点を減らすことで、私たちのチームは最初の書き換え中に迅速に出荷することができ、メンテナンスコストを低く抑えることができました。
「C++でより多くのパッケージを使用したい場合、ヘッダーなどの部分を書く必要があります。Goで書いているときは、**組み込みツールのおかげでパッケージをより簡単に使用できます。開発速度がはるかに速くなります。**」とファンは also shared.
シンプルな言語構文とGoツールのサポートにより、チームの多くのメンバーはGoコードで書く方がはるかに簡単だと感じています。また、Goは静的型チェックに非常に優れており、godocコマンドなどの特定のGoの基礎が、ドキュメント作成に関するより規律ある文化をチームが構築するのに役立っていることもわかりました。
「…Googleのウェブインデックスは1年以内に再構築されました。さらに印象的なのは、チームのほとんどの開発者がGoを学びながらGoで書き直していたことです。」
世界中で非常に多く使用されている製品に取り組むことは簡単な作業ではなく、私たちのチームのGoを使用するという決定は簡単なものではありませんでしたが、Goを使用することでより迅速に作業を進めることができました。その結果、Googleのウェブインデックスは1年以内に再構築されました。さらに印象的なのは、チームのほとんどの開発者がGoを学びながらGoで書き直していたことです。
コアデータソリューションチームに加えて、Googleのエンジニアリングチームは開発プロセスにGoを採用しています。ChromeチームとFirebase Hostingチームが、Goを使用して大規模で高速、信頼性が高く、効率的なソフトウェアを構築する方法について読んでください。
コアデータについて
Googleは、世界の情報を整理し、世界中の人々がアクセスできて使えるようにすることを使命とするテクノロジー企業です。
このケーススタディでは、Googleのコアデータソリューションチームが、Goでのウェブインデックスサービスの書き換えの決定、Goの組み込み並行処理の活用、Goが開発プロセスの改善にどのように役立つかなど、Goを使った道のりを共有しています。