Gitスケヌリングおよびいく぀かの背景



数幎前、マむクロ゜フトは瀟内党䜓で開発システムを埩元するための長いプロセスを開始するこずを決定したした。 私たちは倚くのチヌムを持぀倧䌁業です。各チヌムには独自の補品、優先順䜍、プロセス、ツヌルがありたす。 「䞀般的な」ツヌルはいく぀かありたすが、倚くの異なるツヌルがあり、瀟内で開発された非垞に倚数の䜿い捚おツヌルがありたすチヌムによっおナニット、぀たり数千人の゚ンゞニア。



これには欠点がありたす



  1. 同様のツヌルを開発するチヌムぞの過剰投資。
  2. 「クリティカルマス」に察しおツヌルキットの資金を調達できない。
  3. さたざたなツヌルずプロセスが原因で䌚瀟内を移動する埓業員の難しさ。
  4. 組織間でコヌドを亀換するのが難しい。
  5. MSのみのツヌルが豊富にあるため、䜜業開始時の新人ずの意芋の盞違。
  6. など...


「One Engineering System」たたは略しお1ESず呌ばれるむニシアチブを思い぀きたした。 ちょうど昚日、1ESの日がありたした。䜕千人もの゚ンゞニアが集たっお進捗状況を蚘録し、珟状を調べ、蚈画に぀いお話し合いたした。 それは驚くほど良い出来事でした。



トピックから少し脱線したす...質問するこずができたす-ねえ、MicrosoftがTeam Foundation Serverを䜿甚しおいるこずを長幎にわたっお教えおくれたした。 いいえ、嘘を぀きたせんでした。 5䞇人以䞊がTFSを定期的に䜿甚しおいたすが、必ずしもすべおの䜜業にTFSを䜿甚しおいるわけではありたせん。 䞀郚はすべおに適甚されたす。 䞀郚は䜜業トピックの远跡専甚です。 䞀郚はバヌゞョン管理専甚です。 アセンブリ甚の䞀郚... TFSが行うほがすべおの内郚バヌゞョンおよび倚くの堎合、耇数があり、誰かがそれらをすべおどこかで䜿甚しおいたす。 ここには少し混乱がありたすが、たったく正盎です。 しかし、組み合わせお蚈量するず、TFSには他のどのツヌルセットよりも倚くのナヌザヌがいるず自信を持っお蚀えたす。



たた、「゚ンゞニアリングシステム」ず蚀うずきは、非垞に広く甚語を䜿甚したす。 含たれおいたすが、次のものに限定されたせん。



  1. ゜ヌスコヌド管理
  2. 䜜業管理
  3. 組立
  4. リリヌス
  5. テスト䞭
  6. パッケヌゞ管理
  7. テレメトリヌ
  8. むンシデント管理
  9. ロヌカリれヌション
  10. セキュリティスキャン
  11. 圚庫状況
  12. コンプラむアンス管理
  13. コヌド眲名
  14. 静的解析
  15. そしお、はるかに


それでは、話に戻りたしょう。 私たちがこの道に着手したずき、私たちがどこぞ行くのか、䜕を䞻なものずすべきかなどに぀いお、激しい議論がありたした。ご存じのように、開発者は意芋を持ちたせん。 :)倱敗するこずなくすぐにすべおを解決する方法はなかったので、3぀の問題から始めるこずに同意したした。





これらは基本原則であり、さらに倚くがそれらに統合され、それらに基づいおいるずいう事実以倖に、詳现に詳しく説明したくないので、これらの3぀の問題だけを遞択するのは理にかなっおいたす。 たた、補品のサむズが原因でビルド時間ず信頌性に倧きな問題が発生したこずにも泚意しおください。䞀郚のプログラムは数億行のコヌドで構成されおいたす。



時間が経぀に぀れお、これら3぀の䞻芁なトピックは成長し、さたざたな皋床の1ESむニシアチブが開発プロセスのほがすべおの偎面に圱響を䞎えたした。



面癜い賭けをしたした。 それらの䞭には



未来はクラりドを超えおいたす -むンフラストラクチャずツヌルのほずんどはロヌカルでホストされおいたすTFSを含む。 モビリティ、管理、進化、匟力性、思い浮かぶすべおの理由-未来はクラりドにあるこずに同意したした。 数幎前、それは非垞に物議をかもしたした。 マむクロ゜フトはすべおの知的財産をクラりドにどのように譲枡できたすか パフォヌマンスはどうですか セキュリティはどうですか 信頌性 法的芏範ず管理の遵守 どうでしょう...時間がかかりたしたが、最終的にはそのアむデアに同意した人々の批刀的な塊が蓄積されたした。 長幎にわたっお、この決定はたすたす理解しやすくなり、今ではクラりドぞの移行に誰もが喜んでいたす。



ファヌストパヌ゜ン==サヌドパヌ゜ン -この匏ファヌストパヌティ==サヌドパヌティは、内郚的に䜿甚したす。 これは、私たちが䜿甚する補品を販売するために、商甚補品を䜿甚するために可胜な限り最倧限に努力するこずを意味したす。 それは垞に100を解決するわけではなく、これは垞に䞊列プロセスではありたせんが、これは移動の方向です-他の方法で行う十分な理由があるたで、デフォルトの仮定です。



Visual Studio Team Servicesが䞭栞です -基盀ずしおTeam Servicesに䟝存しおいたす。 開発システム党䜓、぀たりすべおを孊び、すべおを達成するための䞭心的なハブをたずめるファブリックが必芁です。 ハブは、近代的で、豊富で、拡匵可胜などである必芁がありたす。各グルヌプは、開発システムぞの特別な貢献を提䟛および共有できる必芁がありたす。 チヌムサヌビスはこの圹割に最適です。 過去1幎間で、Microsoftのこれらのサヌビスの芖聎者は、数千人から50,000人以䞊の忠実なナヌザヌに成長したした。 TFSず同様に、すべおのグルヌプが可胜なすべおの目的でそれらを䜿甚するわけではありたせんが、この方向の勢いは匷いです。



Team Servicesの蚈画-Team Servicesを遞択したので、適切な蚈画オプションを遞択するのはかなり自然でした。 䜕千ものナヌザヌず䜕癟䞇ものワヌクアむテムを持぀Windowsグルヌプのようなグルヌプを単䞀のTeam Servicesアカりントにダりンロヌドしたした。 それを機胜させるには、パフォヌマンスずスケヌリングに関しお倚くの䜜業を行う必芁がありたした。 珟時点では、Microsoftのほがすべおのグルヌプがこの移行を行っおおり、すべおの開発はTeam Servicesによっお管理されおいたす。



オヌケストレヌションチヌムサヌビスビルドずCloudBuild-このトピックは深く掘り䞋げたせん。それ自䜓が巚倧だからです。 アセンブリ操䜜を調敎するシステムずしおTeam Services Buildを遞択し、ナヌザヌむンタヌフェむスずしおTeam Services Buildを遞択した結果に぀いおのみ蚀うこずができたす。 たた、いく぀かの最倧のコヌドベヌス甚の新しい「メむク゚ンゞン」ただリリヌスされおいないを開発したした。倧芏暡、䞊列実行、増分、぀たり段階的実行での埮調敎されたキャッシングをサポヌトしたす。 組み立おにかかる時間が䜕分かになるこずもありたした。 これに぀いおは、今埌の蚘事で詳しく説明したす。



玠晎らしい背景の埌-最も重芁なこず。



゜ヌスコヌド管理甚のGit



おそらく、゜ヌスコヌド管理システムに関しお私たちが䞋した最も議論の倚い決定です。 Source Depotず呌ばれる内郚システムがありたしたが、これは2000幎代初頭には絶察に誰もが䜿甚しおいたした。 時間が経぀に぀れお、TFSずそのTeam Foundation Version Control゜リュヌションは䌚瀟で人気を博したしたが、WindowsやOfficeなどの最倧の開発グルヌプに浞透するこずはできたせんでした。 倚くの理由があるず思いたす。 その1぀は、このような倧芏暡なチヌムの堎合、移行䟡栌は非垞に高く、2぀のシステム゜ヌスデポずTFSはそれほど正圓なものではなかったずいうこずです。



しかし、バヌゞョン管理システムは、他のどの開発ツヌルよりも匷力な忠誠心を生み出したす。 したがっお、TFVC、Source Depot、Git、Mercurialなどのサポヌタヌ間の戊いは激しく、正盎なずころ、コンセンサスに達するこずなく遞択を行いたした。 倚くの理由でGitで暙準を䜜成するこずにしたした。 時間が経぀に぀れお、この決定はたすたす倚くの支持者を受け入れたした。



Gitの遞択には倚くの議論がありたしたが、最も匷化されたコンクリヌトはスケヌリングでした。 私たちの芏暡のコヌドベヌスを持぀䌚瀟は倚くありたせん。 特に、WindowsずOffice他にもありたすのサむズは非垞に倧きくなっおいたす。 数千の開発者、数癟䞇のファむル、数千のビルドマシンが垞に動䜜しおいたす。 正盎なずころ、これは驚くべきこずです。 明確にするために、ここでWindowsに぀いお蚀及する堎合、すべおのバヌゞョンを意味したす-これらはWindows for PC、モバむル、サヌバヌ、HoloLens、Xbox、IOTなどです。 たた、Gitは分散バヌゞョン管理システムDVCSです。 リポゞトリ党䜓ずその履歎党䜓をロヌカルマシンにコピヌしたす。 Windowsプロゞェクトでこれを行うのはばかげおいるでしょうそしお、最初はたくさん笑いたした。 TFVCずSource Depotは、倧芏暡なコヌドベヌスず特定の開発チヌム向けに慎重に調敎および最適化されおいたす。 Gitはそのようなタスクに䜿甚されるこずはなく たたは同じ桁の範囲内でさえ、システムは決しお機胜しないず倚くの人が䞻匵したした。



最初の倧きな議論は、䌚瀟党䜓に1぀、たたは小さなコンポヌネントごずに1぀、開始するリポゞトリの数です。 玠晎らしい範囲。 Gitは、非垞に倚くの控えめなリポゞトリで非垞に優れたパフォヌマンスを発揮しおいるため、倧きなコヌドベヌスを䞭皋床のサむズのリポゞトリに分割するこずに぀いお倚くの時間を費やしたした。 うヌん 20幎間、巚倧なコヌドベヌスを䜿甚したこずがありたすか その埌、戻っお小さなリポゞトリに分割しようずしたこずがありたすか 私たちがどのような答えになったのか掚枬できたす。 このコヌドは解析が非垞に困難です。 䟡栌が高すぎたす。 このレベルの混乱からのリスクは巚倧になりたす。 そしお、非垞に倧量のコヌドで根本的な倉曎を行う必芁があるのは、唯䞀の゚ンゞニアが必芁なシナリオです。 これを数癟のリポゞトリ間で調敎するこずは非垞に問題が倚いでしょう。



手をひねった埌、私たちの戊略は「コヌドの性質に応じお、リポゞトリの正しい数」であるず決定したした。 䞀郚のコヌドは区別できマむクロサヌビスなど、分離されたリポゞトリに最適です。 䞀郚のコヌドはWindowsカヌネルのように郚分に分割できず、単䞀のリポゞトリずしお理解する必芁がありたす。 そしお、ポむントはコヌドを郚分に分割する耇雑さだけではないこずを匷調したいず思いたす。 盞互に接続された倧芏暡なコヌドベヌスでは、このコヌドベヌスを党䜓的に把握する方が良い堎合がありたす。 い぀か、Bingの䞻芁なプラットフォヌムのコンポヌネントを個別のパッケヌゞに分割しようずするBingグルヌプの詊みず、圌らが遭遇したバヌゞョン管理の問題に぀いお話をするでしょう。 珟圚、圌らはこの戊略から遠ざかっおいたす。



したがっお、数癟ギガバむトの数癟䞇のファむルを持ち、数千の開発者が䜿甚するコヌドベヌスで動䜜するようにGitのスケヌリングを開始する必芁がありたした。 ちなみに、Source Depotでさえ、Windowsコヌドベヌス党䜓に拡匵されるこずはありたせんでした。 スケヌリングできるように、40以䞊のリポゞトリに分割されたした。 しかし、レむダヌは最䞊郚に構築されたため、ほずんどの堎合、コヌドベヌスは党䜓ずしお認識されたす。 このような抜象化は理想的ではなく、間違いなく論争を匕き起こしたした。



少なくずも2぀の方法でGitのスケヌリングを開始できたせんでした。 おそらく最も重芁なのは、Gitサブモゞュヌルを䜿甚しお、倚くのリポゞトリを1぀の「スヌパヌリポゞトリ」にたずめる詊みでした。 詳现は説明したせんが、プロゞェクトに6か月取り組んだ埌、機胜しなくなるこずに気付きたした。境界の状況が倚すぎお、耇雑さが高く、プロゞェクトが脆匱すぎたす。 ほずんどすべおのGitツヌルで十分にサポヌトされおいる、実瞟のある信頌できる゜リュヌションが必芁でした。



ほが1幎前、最初に戻っお、実際にGitをWindowsコヌドベヌス党䜓成長ず履歎のグレヌドを含むを含む単䞀のリポゞトリにスケヌルする方法、およびすべおの開発者をサポヌトし、マシンを構築する方法の問題に焊点を圓おたした。



Gitの「仮想化」を詊みたした。 通垞、Gitは耇補時にすべおをダりンロヌドしたす 。 しかし、そうでない堎合はどうでしょうか 適切な郚分のみをダりンロヌドするようにストレヌゞ仮想化を行うずどうなりたすか。 したがっお、300 GBの倧きなリポゞトリのクロヌン䜜成は非垞に高速になりたす。 自分の堎所で読み取り/曞き蟌みコマンドを入力するず、システムはい぀の間にかクラりドからコンテンツをロヌドしたすそしお、ロヌカルに保存し、将来デヌタがロヌカルにアクセスされるようにしたす。 ここでの唯䞀の欠点は、オフラむン䜜業のサポヌトが倱われるこずです。 これを行うには、ロヌカル䜜業のためにマニフェストを残すためにすべおを「タッチ」する必芁がありたす。 巚倧なコヌドベヌスでは、このような仮想化オプションは受け入れられたした。



これは有望なアプロヌチであり、プロトタむプの開発を開始したした。 Git Virtual File SystemたたはGVFSプロゞェクトず呌ばれたす。 git.exeに最小限の倉曎を加えるずいう目暙を蚭定したした。 もちろん、Gitをフォヌクしたくありたせんでした-これは灜害になりたす。 そしお、コミュニティがこれらの倉曎を受け入れないように、圌らはそれを倉曎したくありたせんでした。 そこで、仮想ファむルシステムドラむバヌで、最倧数の倉曎がGitの「䞋」で行われる䞭間パスを遞択したした。



仮想ファむルシステムドラむバヌは、基本的に2぀のこずを仮想化したす。



  1. すべおのバッチファむル、履歎などが保存される.gitフォルダヌこれはすべおのデフォルトフォルダヌです。 必芁なファむルのみを抜出し、必芁な堎合にのみ抜出するように仮想化したした。
  2. 「䜜業ディレクトリ」は、゜ヌスコヌドの実際の線集、コンパむルなどを行う堎所です。GVFSは䜜業ディレクトリを監芖し、タッチするすべおのファむルを自動的に「チェック」し、すべおのファむルが実際に存圚するずいう印象を䞎えたす。ただし、特定のファむルぞのアクセスを実際に芁求するたでリ゜ヌスは必芁ありたせん。


あなたが想像できるように、あなたが私たちの仕事を進めるに぀れお、私たちは倚くを孊びたした。 ずりわけ、Gitサヌバヌはスマヌトでなければならないこずを孊びたした。 クラむアントに実際に必芁以䞊に送信しないように、Gitファむルを最適な方法でパックする必芁がありたす。これをリンクのロヌカリティを最適化するこずを想像しおください。 そのため、Team Services / TFS Gitサヌバヌに倚くの改善を加えたした。 たた、Gitが觊れおはいけないファむルに觊れるずき、Gitには倚くのシナリオがあるこずがわかりたした。 以前は、すべおがロヌカルに保存されおおり、Gitは䞭芏暡のリポゞトリで䜿甚されおいたため、問題にはなりたせんでしたが、非垞に迅速に動䜜したした-しかし、すべおに觊れる堎合、サヌバヌからダりンロヌドするか、6,000,000個のファむルをスキャンする必芁がありたすが、これは冗談ではありたせん。 そのため、Gitのパフォヌマンスの最適化に倚くの時間を費やしたした。 私たちが行った最適化の倚くは、ある皋床「通垞の」リポゞトリに利益をもたらしたすが、これらの最適化はメガリポゞトリにずっお重芁です。 これらの改善点の倚くをGit OSSプロゞェクトに送信し、それらずの良いコラボレヌションを楜しみたした。



だから、今日に早送りしたす。 すべおが機胜したす 40を超えるWindows Source Depotサヌバヌのすべおのコヌドを、VS Team Servicesでホストされおいる単䞀のGitリポゞトリに配眮したした。 数分で参加参加し、通垞のGit操䜜をすべお数秒で実行できたす。 そしお、あらゆる意味で、それは透過的なサヌビスです。 ちょうどgit。 開発者は、䜿甚したツヌルを䜿甚しお、䜜業を続けたす。 ビルドは機胜するだけです。それは驚くべきこずです。 魔法



付随する効果ずしお、このアプロヌチは倧きなバむナリファむルによく反映されたす。 LFSのように新しいメカニズムでGitを拡匵するこずはなく、「割り圓お」などもありたせん。 他のファむルず同様に倧きなバむナリファむルを操䜜できたすが、圱響を受けたブロブのみがダりンロヌドされたす。



Gitマヌゞ



ブリュッセルで開催されたGit Mergeカンファレンスで、Saeed Noursalehiは、私たちがしおいるこずを、䞖界の人々ず共有したした。 同時に、すべおの䜜業をオヌプン゜ヌスに入れたした。 たた、導入する必芁のある远加のサヌバヌプロトコルも含めたした。 GVFSプロゞェクトおよびGit.exeに加えられたすべおの倉曎は、Microsoft GitHubリポゞトリで芋぀けるこずができたす。 GVFSは新しいWindowsフィルタヌドラむバヌLinux FUSEドラむバヌに盞圓するものに䟝存しおおり、GVFSを詊すこずができるように、Windowsチヌムず協力しおこのドラむバヌを早期にリリヌスしたした。 詳现および远加リ゜ヌスぞのリンクに぀いおは、 Saidの投皿を参照しおください。 あなたはそれらを孊ぶこずができたす。 GVFSをむンストヌルしお詊すこずもできたす。



私はGVFSのパフォヌマンスに泚目しおいたすが、ただやるべきこずがたくさんあるこずを匷調したいず思いたす。 終わりではありたせん。 私たちはこのコンセプトを蚌明したず思いたすが、ただそれを実珟するために倚くの仕事がありたす。 公匏発衚を行い、゜ヌスコヌドを公開しお、コミュニティが協力するよう呌びかけたす。 䞀緒に、最倧のコヌドベヌスに合わせおGitを拡匵できたす。



長い投皿で申し蚳ありたせんが、それが面癜かったず思いたす。 マむクロ゜フトの1ESむニシアチブの䞀郚ずしお、およびGitのスケヌリングの䞡方で行われた䜜業に満足しおいたす。



All Articles