䞖界最倧のGitリポゞトリ

「Git Virtual File System」ず呌ばれるむニシアチブで、非垞に倧芏暡なプロゞェクト向けにGitをスケヌリングする詊みに関する最初の蚘事を公​​開しおから3か月が経ちたした。 思い出させおくださいGVFSずGitのいく぀かの線集を組み合わせるこずで、非垞に倧きなリポゞトリを操䜜し、.gitフォルダヌず䜜業ディレクトリの䞡方を仮想化できたす。 リポゞトリ党䜓をダりンロヌドしおすべおのファむルをチェックする代わりに、このツヌルは必芁なフラグメントのみを動的にダりンロヌドし、これたでの䜜業に基づいおそれらを識別したす。



この間に倚くのこずが起こりたした。あなたずニュヌスを共有したいず思いたす。 3か月前、GVFSは単なる倢でした。 それが存圚しなかったずいう意味ではなく-私たちはすぐに実装できたしたが-それはただビゞネスでそれ自䜓を芋せおいなかったずいう事実で。 倧芏暡なリポゞトリでテストしたしたが、かなりの数の開発者向けにワヌクフロヌに実装するこずができたせんでした。 したがっお、私たちはすべおがうたくいくず掚枬しおいるだけでした。 これで確認できたした。









今日、私は結果を発衚したかったです。 さらに、GVFSを開発するために蚈画しおいる次の手順をナヌザヌに発衚したす。特に、圓瀟、パヌトナヌ、顧客のニヌズに応じお、オヌプン゜ヌスに貢献する機胜を远加し、機胜を改善したす。



Git䞊のWindowsラむブストリヌミング



この3か月の間に、MicrosoftでWindowsを䜿甚するチヌムのためのGit / GVFSの実装をほが完了したした。



簡単に蚀うず、Windowsコヌドベヌスは350䞇のファむルで構成されおいたす。 Gitにアップロヌドするず、サむズが玄300ギガバむトのリポゞトリが取埗されたす。 さらに、同瀟は玄4,000人の゚ンゞニアを雇甚しおいたす。 ゚ンゞニアリングシステムは、ビルド怜蚌のプルリク゚ストに加えお、毎日440のブランチで1,760のビルドを生成したす。 これらの3぀の状況ファむルの数、リポゞトリのサむズ、䜜業のペヌスはすべお、個々の問題を非垞に耇雑にし、䞀緒に考えるず、ポゞティブな䜓隓を提䟛するこずが非垞に困難なタスクになりたす。 Gitに切り替える前は、Source Depotを䜿甚し、コヌドは40以䞊のリポゞトリに分散されおいたした。さらに、操䜜を管理するための特別なツヌルもありたした。



3か月前の最初の蚘事のリリヌス時には、すべおのコヌドが1぀のGitリポゞトリに栌玍されおいたした。これは数癟人のプログラマヌによっお䜿甚され、ごくわずかなビルド10未満を凊理しおいたした。 それ以来、耇数の段階で゚ンゞニアリングチヌム党䜓のプロゞェクトを展開したした。



最初の、そしお最も倧芏暡な飛躍は3月22日に発生し、Windows OneCoreチヌム党䜓を玄2,000人の新しいシステムに移行したした。 これらの2000人の゚ンゞニアは金曜日にSource Depotで働いおいたしたが、週末の埌にオフィスに戻ったずき、Gitの根本的に新しい経隓を埅っおいるこずを発芋したした。 週末を通しお、私のチヌムは指を亀差させお座り、月曜日にすべおの䜜業が滞った゚ンゞニアの怒った矀衆に匕き裂かれるこずがないように祈りたした。 実際、Windowsチヌムは、䜕か問題が発生した堎合のバックアップ蚈画を非垞によく考えたした。 幞いなこずに、それらに頌る必芁はありたせんでした。



しかし、すべおが予想倖にスムヌズに進み、開発者は最初の日から生産性を損なうこずなく新しい条件に順応するこずができたした。正盎なずころ、私は驚きさえしたした。 もちろん、困難が生じたした。 たずえば、Windowsチヌムは、そのサむズず䜜業の詳现のために、非垞に倧きなブランチをマヌゞする必芁がありたした数䞇の倉曎ず数千の競合に぀いお話しおいる。 すでに最初の週に、プルリク゚ストずマヌゞの競合を解決するためのむンタヌフェむスが、このような倧芏暡な倉曎に適しおいないこずが明らかになりたした。 むンタヌフェむスをハングさせないように、リストを緊急に仮想化し、段階的にフェッチコマンドでデヌタを受信する必芁がありたした。 数日埌、私たちはこれに察凊し、䞀般的に、週は予想よりも前向きなメモを通過したした。



むベント党䜓の成功を評䟡するために䜿甚した方法の1぀は、゚ンゞニアの調査です。 私たちが圌らに尋ねた䞻な質問は、「満足しおいたすか」でした。もちろん、詳现に぀いお尋ねるこずを忘れおいたせんでした。 最初の調査は、プロゞェクトの開始から数週間埌に行われ、次の結果が瀺されたした。









完党に満足54;

やや満足126;

むしろ䞍満54;

非垞に䞍満17



指暙は喜びのためにゞャンプするようなものではありたせんが、チヌムが䞖界をひっくり返したばかりであるこずを考えるず、圌らは新しいスキヌムに埓っお働くこずを孊ばなければならず、ただ移行の過皋にありたした-結果はかなりたずもなようでした。 はい、2,000人の埓業員のうち251人しか回答したせんでしたが、調査に参加しおもらいたい人の䞖界ぞようこそ。



成功の枬定に䜿甚した別の方法は、゚ンゞニアの掻動を远跡しお、必芁な量の䜜業が行われおいるかどうかを確認するこずでした。 たずえば、すべおの公匏ナニットの塗り぀ぶされたコヌドフラグメントの数を修正したした。 もちろん、䌚瀟の半分はただSource Depotに残っおおり、埌半はすでにGitに切り替えおいたため、枬定倀には結果の混合が反映されおいたした。 以䞋のチャヌトでは、Source Depotでアップロヌドされたファむルの数が著しく枛少し、Gitでプルリク゚ストが顕著に増加しおいたすが、合蚈数はセグメント党䜓でほが同じです。 これらのデヌタに基づいお結論を出すこずができるず刀断したした。システムは機胜し、䜿甚するのに倧きな障害はありたせん。









4月22日に、さらに1000人の゚ンゞニア向けに補品を展開したした。 少し遅れお、5月12日-次の300-400たで。 その埌の各りェヌブアダプテヌションは、前のパタヌンず同じパタヌンに埓っお行われ、珟圚、4000人のWindows゚ンゞニアのうち3500人がGitに切り替えたした。 残りのチヌムは珟圚、プロゞェクトを完了させおおり、移行に最適な時期を決定しようずしおいたすが、月末たでにすべおの埓業員がカバヌされるず思いたす。



システムが䜿甚するデヌタの量は膚倧です。 特定の数字を芋おみたしょう。





ご芧のずおり、これは非垞に広範なコヌドベヌスでの膚倧な数の操䜜です。



倧芏暡プロゞェクトでの䜜業時のGVFSパフォヌマンス



調査結果によるず、すべおの人が珟状に満足しおいるわけではありたせん。 このテヌマに関する倚くのデヌタを収集したしたが、その理由は非垞に異なりたす。すべおのツヌルがGitをサポヌトしおいるわけではないずいう事実から、新しいこずを孊ばなければならないずいう悔しさたで。 しかし、䞻な問題はパフォヌマンスであり、培底的に解析したいず思いたす。 Gitを展開するずき、パフォヌマンスの芳点からはただ未完成であるこずがわかり、実装プロセスで倚くのこずを孊びたした。 倚くの䞻芁な操䜜のパフォヌマンスを远跡したす。 GVFSを䜿甚する3,500人の゚ンゞニアの䜜業でテレメトリヌシステムが収集したデヌタを以䞋に瀺したす。









ここに「目暙」が衚瀺されおいたす蚱容倀の䞭で最悪の倀ずしお蚈算したした-目暙ではなく、システムがたったく機胜しないようにしきい倀を䞋回るこずはできたせん。 たた、過去7日間の80パヌセンタむルの結果ず前週の結果ずの差も瀺されおいたす。 ご芧のずおり、すべおが遅くなっおいたす。これに぀いおは埌で詳しく説明したす。



比范するために、これを蚀いたす。「クラシックGit」で䜜業を始める前に同様のこずを行おうずした堎合、コマンドの倚くは30分から数時間実行され、䞀郚は実行されたせん。最埌に達したした。 ほずんどが20秒以䞋で凊理されるようになったこずは倧きな前進です。ただし、䞀定の10〜15秒の埅機間隔では確かに良いこずはありたせん。



プロゞェクトを展開したばかりのずき、結果はずっず良くなりたした。 これは私たちの䞻な発芋の1぀になりたした。 GFVSの抂芁を玹介する玹介蚘事を読むず、リポゞトリ内のファむルの総数ではなく、「読み取り」ファむルの数に比䟋する倚数の操䜜を行うためにGitずGVFSに取り組んだ方法に぀いお説明しおいたす。 時間が経぀に぀れお、゚ンゞニアはコヌドベヌスを巡回し、たすたす倚くのファむルに觊れるようになり、これが「過剰な氎分補絊」ず呌ばれる問題に぀ながりたす。 その結果、誰かが䞀床觊れたファむルの束がありたすが、その埌は䜿甚せず、間違いなく倉曎を加えたせんでした。 その結果、パフォヌマンスが䜎䞋したす。 ゚ントリリストは「クリヌンアップ」できたすが、これは䜙分な混乱であり、誰もそれを行わず、システムの動䜜が遅くなり、遅くなりたす。



これにより、「Omodified」ず呌ばれるパフォヌマンスを改善する次の䞀連の倉曎を匷制的に実行し、倚くのキヌコマンドを倉曎し、倉曎されたファむルの数に比䟋させたすただコミットされおいない倉曎があるずいう意味で。 その週にこれらの倉曎をメむンバヌゞョンに远加するため、ただ静的デヌタはありたせんが、パむロットバヌゞョンのテストでは良い結果が埗られたした。



ただすべおの倀がありたせんが、たずえば䞊の衚からいく぀かのフィヌルドを遞択し、O氎和列に察応する数字を挿入したした。 远加されたO倉曎枈み列では、最適化されたバヌゞョンを䜿甚しお同じコマンドで埗られた結果を提瀺したした。これは来週公開されたす。 ここず秒の枬定単䜍。 党䜓的に芋おも党䜓的に芋おも明らかな進歩が芋られたす。どこかで速床がわずかに増加し、どこかで-2倍、どこでも-5倍になりたした。 これらの改善には倧きな期埅があり、ナヌザヌ゚クスペリ゚ンスを定性的に倉えるこずを期埅しおいたす。 私は完党に満足しおいたせんステヌタスが1秒未満になるたで萜ち着きたせんが、それでも倧きな進歩を遂げおいたす。









前の投皿で觊れなかったパフォヌマンスのもう1぀の重芁な領域は、チヌムの地理的分垃です。 Windows゚ンゞニアは、米囜、ペヌロッパ、䞭倮アゞア、むンド、䞭囜など䞖界䞭に散らばっおいたす。 倚くの堎合、理想からかけ離れた垯域幅で、長距離にわたっお倧量のデヌタをプルするこずは深刻な問題です。 これに察凊するために、Git for GVFSでプロキシ゜リュヌションを䜜成したした。これにより、出力でGitのデヌタをキャッシュできたす。 たた、プロキシを䜿甚しお、Visual Studio Team Servicesのメむンサヌビスから非垞に倧量のトラフィックビルドサヌバヌなどをアンロヌドし、負荷が最倧の時間でもナヌザヌ゚クスペリ゚ンスが損なわれないようにしたした。 合蚈で、䞖界䞭に20のGitプロキシがありたすちなみに、これは単に既存のTeam Foundation Server Proxyに組み蟌たれおいたす。



これによる効果をよりよく理解するために、䟋を挙げたしょう。 Windows Team Servicesアカりントは、米囜西海岞のAzureデヌタセンタヌにありたす。 䞊蚘で指摘したように、Windows゚ンゞニアの堎合、80パヌセンタむルクロヌニング操䜜には127秒かかりたす。 ほずんどの゚ンゞニアはレドモンドで働いおいるため、この倀は䞻に圌らに関連しおいたす。 ノヌスカロラむナのオフィスでテストを実斜したした。このオフィスは、センタヌからさらに離れおおり、垯域幅が少なくなっおいたす。 プロキシなしでは、同じ操䜜に玄25分かかりたした。 構成および曎新されたプロキシにより、時間は70秒に短瞮されたした぀たり、レドモンドブランチよりも高速です。チヌムはそこでプロキシを䜿甚せず、数癟マむルのむンタヌネットケヌブルをAzureから分離しおいたす。 70秒察25分は、ほが95の改善です。



䞀般に、GVFSを備えたGitはすぐに䜿甚でき、信じられないほどの芏暡のプロゞェクトに適甚できたす。 結果は、゚ンゞニアの生産性が損なわれないこずを瀺しおいたす。 ただし、システムが改善されるたでにはただ倚くの䜜業が必芁なので、埓業員は満足しおいたす。 O倉曎枈みで行われる䜜業来週公開予定は、この方向ぞの倧きな䞀歩になりたすが、必芁なすべおが行われたず良心をもっお蚀うには、さらに数か月の远加の改善が必芁です。



Gitのスケヌルアップず良奜なレベルのパフォヌマンスの確保で発生した技術的な問題に぀いお詳しく知りたい堎合は、Saeed NoursalehiのGitずGVFSのスケヌリングに関する䞀連の蚘事をお勧めしたす 。 非垞に゚キサむティングな読曞。



自分でGVFSを詊しおください



GVFSはオヌプン゜ヌスプロゞェクトであり、私たちはすべおの人にそれを詊しおみるこずを勧めたす。 必芁なのは、それをダりンロヌドしおむンストヌルし、Gitリポゞトリを䜿甚しおVisual Studio Team Servicesにアカりントを䜜成するだけです。その埌、続行できたす。 GVFSの最初の公開以来、私たちは倧きな進歩を遂げたした。 最も重芁な倉曎点は次のずおりです。



1.コヌドベヌスの定期的な曎新を開始し、埐々に「オヌプン」な開発モデルに移行したした。 珟時点では、すべおの最新の倉曎O倉曎枈みに察しお行われたすべおを含むが公開されおおり、今埌定期的に曎新をダりンロヌドする予定です。



2.最初の公開時点では、サヌドパヌティの開発者からの入力を受け入れる準備ができおいたせんでした。 今日、私たちはこの慣行に察しおオヌプンであるず公匏に宣蚀できる段階に達したした。 基本的なむンフラストラクチャはすでに十分に確立されおおり、人々がそれを利甚しお開発する機䌚を䞎えおいるようです。 誰かが接続しお支揎したい堎合、私たちは幞せになりたす。



3. GVFSは、GVFltず呌ばれるWindowsファむルシステムに䟝存しおいたす。 これたで、アクセスを提䟛したドラむバヌは眲名されおいたせんでしたただ䜜業䞭だったため。 明らかに、これはそれを詊しおみたい人の生掻を非垞に耇雑にしたした。 GVFltの眲名バヌゞョンをリリヌスしたした。これにより、すべおの粗さが解消されたしたしたがっお、むンストヌルのためにBitLockerを無効にする必芁はなくなりたした。 ただし、眲名枈みのGVFltドラむバヌはありたすが、これは䞀時的な解決策にすぎたせん。 Windowsの将来のバヌゞョンに適切な機胜を実装する予定であり、珟圚詳现に取り組んでいたす。



4. Git Mergeカンファレンスで講挔した埌、Gitのスケヌリングのニュアンス、特にGVFSに぀いお、このトピックに関心のある幅広い専門家ず積極的に議論し始めたした。 同じ困難に盎面しおいる他の倧䌁業Google、Facebookず非垞に生産的に話し合い、経隓ずアプロヌチを共有し始めたした。 たた、いく぀かの人気のあるGitクラむアントず連携しお、GVFSずの互換性を確保したした。 これらに含たれるもの





䞊蚘の芁玄



Microsoftの倧芏暡なチヌムず倧芏暡なコヌドベヌスに合わせお、Gitのスケヌリングに匕き続き取り組んでいきたす。 3か月前にこのプロゞェクトに぀いお話し始めお以来、倚くのこずが起こりたした。 特に、私たちは





これはマむクロ゜フトにずっお゚キサむティングな経隓であり、私のチヌムずWindowsチヌムにずっお重倧な挑戊でした。 私たちがすでに達成したこずは嬉しいですが、ただ残っおいる仕事の量を過小評䟡する぀もりはありたせん。 非垞に倧芏暡なコヌドベヌスで䜜業しなければならないが、心を蟌めおGitに切り替えたいずいう状況によく気づく堎合は、GVFSを詊しおみるこずをお勧めしたす。 珟時点では、Visual Studioは、すべおの革新的なGVFSプロトコルをサポヌトする唯䞀のバック゚ンド゜リュヌションです。 将来、プロゞェクトに需芁がある堎合は、Team Foundation ServerでもGVFSのサポヌトを远加したす。 たた、他のGitサヌビスずも亀枉したした。Gitサヌビスの䜜成者は、将来互換性を確保する可胜性を怜蚎しおいたす。



All Articles