Googleスケールでソースからコードベース全体を構築するにはどうすればよいですか?


8

最初の答え古い、最近アクティブに質問にリンクされている動画、Googleのリポジトリがどのように行われるかについて語っています。

言及された興味深いことの1つは、バイナリに依存することなく、すべてがソースからビルドされるという事実ですこれは、依存関係が古くなって他のプロジェクトでまだ使用されているという問題を回避するのに役立ちます。

技術的にどのように可能ですか?私の会社で同じことを試してみると、会社のコードベースの規模とGoogleのコードベースの規模の大きなギャップを考慮しても、2つの理由で不可能です。

  • IDE(Visual Studio)は、たとえば50のプロジェクトを含む小さなソリューションでさえ大きな影響を受けるため、すぐに応答しなくなります。

  • 静的分析は、コードベース全体のサイズによって処理されます。たとえば、コードメトリックスまたはコードコントラクトの静的チェックはほとんど不可能です(コードコントラクトはおそらく数日または数週間かかります)。

  • 継続的インテグレーションでは、コンパイルにも非常に時間がかかり、多くの依存関係を持つプロジェクトが変更されるとすぐにサーバーがクランチされ、プロジェクトの大きなツリーを再コンパイルする必要があります。

中小企業はこれらの問題をどのようにして回避し、次のことができるのでしょうか。

  1. パフォーマンスの低下に影響されずにIDEを使用します。

  2. 変更の結果、大量のコードベースを再コンパイルする必要がある場合でも、サーバーをクランチせずにコミットするたびにコードをコンパイルしますか?


YouTubeでのGoogleの取り組み
Patrick

回答:


11

あなたは伝統的な構築プロセスを想定しており、Googleのプロセスは伝統的ではありません。エンジニアリングツールのブログに一連の記事があり、2010年のプレゼンテーション「Googleスケールでの継続的インテグレーションのためのツール」について詳しく説明し、プロセスを詳細に説明しています。

  1. クラウドで構築:ソースコードにアクセスする
  2. クラウドでビルド:ビルドシステムの仕組み
  3. クラウドでビルド:ビルドステップの配布
  4. クラウドで構築:ソースコードにアクセスする
  5. Googleの速度と規模でのテスト

要約すると、既存のインフラストラクチャを最大限に活用して、非常に高度な並列処理と自動化を可能にするカスタム分散ビルドシステムを使用します。また、全体的なキャッシュヒット率が90%で、キャッシングに大きく依存しています。

しかし、どのようにしてこれらすべてを会社に適用できますか?最初のステップはコンパイルの配布であり、そのためには次のものが必要です。

  • 分散コンパイラ
  • コンパイラキャッシュ

gcc開発環境では、コンパイルファームの設定は比較的簡単です。distccが配布を処理し、ccacheがキャッシングを処理します。これらは連携して美しく機能します。Microsoftのエコシステム用の同様のツールは知りません(IDEの選択に基づいてMicrosoft言語を使用していると想定しています)が、MSBuildがマルチコアCPUを利用してビルドを並行して実行できることを知っています。実際にはコンパイルファームではありませんが、確かに正しい方向への一歩です。


2
  1. 必要なプロジェクトだけを使用するために2000プロジェクトすべてをビルドする必要はありません。
  2. Go言語は、コンパイル時間を非常に速くすることでこの問題を軽減するように特別に設計されました。それは彼らが言語を発明した理由の一つでした。

そうは言っても、会社全体に展開されているコードが(多かれ少なかれ)正式なリリースサイクルの一部として検証されており、単なるランダムではない場合を除いて、「ジャストインタイムビルド」には注意が必要です。毎晩ビルドします。H

5000人の開発者が2000年のプロジェクトにアクセスし、すべてが流動的な状態にあると、災害のレシピのように聞こえます。Googleは非常に賢い人材を採用しているので、実際に起こっていることではありません。


1.もちろん、それが私が他の多くのプロジェクトに影響を与えるプロジェクトで変更が行われた場合について話した理由です。これは頻繁には起こりませんが、起こります。2.ビデオで、Ashish Kumarは、コードベースのほとんどがCおよびJavaであると述べています。囲碁についての言及はありませんでした。
Arseni Mourzenko 2013年

次に、おそらくGoの作成は、彼らが抱えている困難への対応です。
ロバートハーベイ2013年

本当ですが、それでも、Googleは何年もの間それを機能させることができました。どうやって?
Arseni Mourzenko 2013年

非常に慎重に?以前ほど大きくなかったことを覚えておいてください。パトリックがリンクしたビデオを見ましか?
ロバートハーベイ

1
私は、Googleのコードベースがごくわずかだった時代にも、Googleが魔法のように移行した/コードベース全体をGoに移行した時代にも、あまり興味がありません。私は2010年について話している(Ashish Kumarがコードベースについて話している瞬間、それは2010年だと思う)。2010年、Ashish Kumarのビデオによると、(1)コードベースが巨大である、(2)プライマリCおよびJavaが含まれている、(3)すべてがソースからコンパイルされている、(4)Google開発者がIDEでコードを開くことができるサーバーはコードをコンパイルできます。注:いいえ、パトリックがリンクしたビデオはまだ見ていません。明日見ます。
Arseni Mourzenko 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.