大規模リポジトリの管理
GitLabも他のGitベースのシステムと同様に、ギガバイト単位の大きなリポジトリになるとパフォーマンスが制限されます。
以下のセクションでは、GitLabの大規模リポジトリでパフォーマンスを改善するためのベストプラクティスを紹介します。
大規模ファイルシステム(LFS)
Gitシステムでは、バイナリファイルやブロブファイル(パッケージ、オーディオ、ビデオ、グラフィックスなど)をLarge File Storage(LFS) オブジェクトとして保存することを強く推奨します。LFS を使えば、オブジェクトは Object Storage などの外部に保存され、リポジトリ内のオブジェクトの数やサイズを減らすことができます。オブジェクトを外部オブジェクトストレージに格納すると、パフォーマンスが向上します。
リポジトリに大きなオブジェクトがあるかどうかを分析するには、git-sizer
のような詳細分析ツールを使用できます。このツールは、リポジトリを構成するものの詳細を表示し、懸念のある領域を強調表示します。大きなオブジェクトが見つかった場合は、git filter-repo
のようなツールで削除できます。
詳しくはGit LFS ドキュメント を参照してください。
Gitalyパック・オブジェクト・キャッシュ
Gitaly は Git リポジトリのストレージを提供するサービスですが、Git フェッチレスポンスの短いローリングウィンドウをキャッシュするように設定することができます。これは大規模なリポジトリにおすすめです。大量のフェッチトラフィックを受け取ったときのサーバーの負荷を大幅に軽減することができます。
詳しくはGitaly Pack Objects Cache を参照ください。
リファレンスアーキテクチャ
大規模なリポジトリは、多くのユーザーを抱える大規模な組織で見られる傾向があります。GitLabの品質とサポートチームは、GitLabを大規模にデプロイするための推奨方法であるいくつかのリファレンスアーキテクチャを提供しています。
これらのタイプのセットアップでは、パフォーマンスを向上させるために、使用するGitLab環境がリファレンスアーキテクチャと一致することが推奨されます。
Gitalyクラスター
Gitaly Clusterは、複数のノードにリポジトリの複数のレプリカを保持するため、大規模なリポジトリのパフォーマンスを著しく向上させることができます。その結果、Gitaly Clusterはこれらのリポジトリに対する読み込み要求を負荷分散することができ、フォールトトレラントでもあります。
大規模なリポジトリに推奨されますが、Gitaly Clusterはセットアップや管理がさらに複雑になる大規模なソリューションです。詳細については、Gitaly Clusterのドキュメント、特に「Gitaly Clusterをデプロイする前に」を参照してください。
GitLabを最新の状態に保つ
GitLabではパフォーマンスの改善や修正が継続的に追加されています。これらの恩恵を受けるために、可能な限りGitLabを最新版にアップデートしておくことをお勧めします。
CI/CD における同時クローンの削減
大規模なリポジトリはモノレポになりがちです。これは通常、これらのリポジトリがユーザーだけでなくCI/CDからも多くのトラフィックを受けることを意味します。
CI/CD の負荷は、パイプラインが決まった時間帯にスケジュールされるため、同時に発生する傾向があります。その結果、リポジトリに対する Git リクエストがこれらの時間帯に著しく急増し、CI とユーザーの両方にとってパフォーマンスの低下につながります。
CI/CDパイプラインを設計するときは、異なる時間に実行するように時間をずらすことで同時実行を減らすことをお勧めします。例えば、ある時間に実行するセットと、その数分後に実行する別のセットなどです。
大規模なリポジトリでCI/CDのパフォーマンスを向上させるには、他にもいくつかのアクションがあります。詳細はRunnerのドキュメントを参照してください。