<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          互聯(lián)網(wǎng)巨頭決定拋棄Git......

          共 4243字,需瀏覽 9分鐘

           ·

          2024-07-30 17:00

          1
          兩個(gè)軟件同時(shí)誕生


          2005年4月,Larry發(fā)現(xiàn)有Linux內(nèi)核開發(fā)者違反了協(xié)議,正在對自己的寶貝軟件BitKeeper做逆向工程,他怒不可遏,撤銷了Linux的使用許可。


          (詳情參見:被Linux之父力挺的軟件,開源后倒下了...


          Linux一下子面臨著沒有源碼管理系統(tǒng)的窘境!


          這件事情影響很大,第一,Linus Torvalds不得不停下內(nèi)核的開發(fā)和管理工作,開始開發(fā)Git。


          第二,它促使Olivia Mackall發(fā)布了幾周前開發(fā)的Mercurial v0.1 ,和Git一樣,這也是一個(gè)可擴(kuò)展的分布式版本控制系統(tǒng)。



          兩個(gè)分布式版本控制系統(tǒng)可以說是同時(shí)起步。


          很明顯,頂著Linux光環(huán)的Git(當(dāng)然它自身非常優(yōu)秀)受到了更多人的歡迎,很多公司選擇了Git,其中就包括互聯(lián)網(wǎng)巨頭Facebook。


          隨著業(yè)務(wù)的飛速發(fā)展,F(xiàn)acebook的代碼庫也開始以驚人的速度增長。


          單單是2013年,F(xiàn)acebook的Git代碼倉庫就提交了4.4萬個(gè)文件,1700萬行代碼,甚至比Linux內(nèi)核的規(guī)模更龐大,更復(fù)雜。


          更要命的是,Facebook和另外一個(gè)巨頭Google一樣,把公司的所有項(xiàng)目代碼都“塞”到了一個(gè)代碼庫中!


          為什么要單一代碼庫的策略呢?這么做有很多好處:


          (1) 統(tǒng)一的版本化管理,不需要fork 共享庫,沒有跨代碼庫merge復(fù)制代碼的痛苦


          (2) 廣泛的代碼共享和復(fù)用


          (3) 簡化的依賴管理


          (4) 跨團(tuán)隊(duì)的合作很方便



          2
          Facebook決定拋棄Git


          可是,隨著單一代碼庫的飛速增長,Git操作變得越來越慢。


          Facebook的工程師對未來幾年的代碼庫規(guī)模做了估計(jì),創(chuàng)建了一個(gè)虛擬倉庫做一個(gè)模擬,結(jié)果讓人震驚,基本的Git命令都需要45分鐘才能完成!


          必須得尋找解決方案了!


          Facebook組建了一個(gè)團(tuán)隊(duì),專門來解決這個(gè)問題。


          他們先是聯(lián)系了Git維護(hù)者,但是要想解決Facebook的問題,Git內(nèi)部必須得做一些深度的代碼修改不可。


          所以Git維護(hù)者的回復(fù)是:你們的代碼庫太大了,應(yīng)該分拆代碼庫......


          Git社區(qū)對于提升單一超大代碼庫的性能并不是十分積極,因?yàn)楹苌偃诉@么用啊!


          Git這條路走不通,F(xiàn)acebook又考慮了閉源的Perforce,這也是一個(gè)老牌的版本控制系統(tǒng),成立于1995年。


          Salesforce、Netflix、SAP、迪士尼、Intuit和紐約證券交易所都是它的客戶,Google也曾經(jīng)用過,Perforce在游戲領(lǐng)域是領(lǐng)導(dǎo)者,游戲廠商前20強(qiáng)有18家在用Perforce做版本控制。


          在和Perforce的銷售工程師接觸的時(shí)候,F(xiàn)acebook發(fā)現(xiàn)Perforce在“讀取和寫入節(jié)點(diǎn)的本地一致性存在缺陷。” 不過Perforce并不認(rèn)為這是一個(gè)大問題,也沒有計(jì)劃來解決它。


          放棄了Perforce以后,一個(gè)有豐富Mercurial使用經(jīng)驗(yàn)的工程師建議考慮一下Mercurial。


          Mercurial用Python寫成,采用了面向?qū)ο蟮母鞣N模式,架構(gòu)更簡潔,更容易擴(kuò)展。


          比如對于Facebook這樣大規(guī)模的存儲(chǔ)庫,一個(gè)主要的瓶頸就是找出哪些文件發(fā)生了變化。Git的辦法是檢查每個(gè)文件,隨著文件數(shù)量的增加,就會(huì)變得越來越慢。


          Facebook內(nèi)部有個(gè)工具叫做watchman,可以檢測文件的狀態(tài)變化,Mercurial 良好設(shè)計(jì)使得和watchman的集成非常簡單,最終集成了watchman的Mercurial在查看文件狀態(tài)時(shí),比Git快了5倍以上



          Mercurial還有幾個(gè)很好的抽象,例如filelog,這個(gè)數(shù)據(jù)結(jié)構(gòu)表示每個(gè)文件的每次修訂,F(xiàn)acebook通過remotefilelog擴(kuò)展了這個(gè)接口,使得超大存儲(chǔ)庫的pull和clone速度提升了10倍以上,從幾分鐘縮短到幾秒鐘



          Mercurial社區(qū)也非常開放,愿意和Facebook合作,為了解決Facebook遇到的問題,可以對Mercurial做出重大變革。


          雙方合作相當(dāng)良好,F(xiàn)acebook從Git向Mercurial遷移的時(shí)候,在一年半的時(shí)間內(nèi)貢獻(xiàn)了500多個(gè)補(bǔ)丁,包括新的圖算法,用C語言重寫性能關(guān)鍵的部分等等。


          Mercurial則認(rèn)真地審閱這些補(bǔ)丁,主動(dòng)幫助Facebook解決擴(kuò)展性問題,在設(shè)計(jì)新功能的時(shí)候也會(huì)把Facebook的問題考慮在內(nèi)。


          這和當(dāng)時(shí)的Git社區(qū)形成了鮮明的對比。


          十年后,Git也做出了重大改進(jìn),可以很好地處理非常大的單一存儲(chǔ)庫,但

          Facebook不會(huì)再遷移回來了。



          3
          Google 發(fā)明新輪子


          說完了Facebook,再來說說Google。


          Google的代碼庫更大,更加嚇人。


          截止到2015年,這個(gè)代碼庫一共有20億行代碼,占據(jù)了86T的空間。 


          數(shù)字沒有直觀感覺,看個(gè)圖吧:Windows,Office等常見軟件在中間,Google代碼庫是最下方的綠色方塊。



          除了Chrome和Android之外,大部分Google產(chǎn)品的代碼都保存在一個(gè)代碼庫中


          Google最早用的版本控制系統(tǒng)是閉源的Perforce,可見在創(chuàng)業(yè)初期,像版本管理這樣的工具,大家都是拿來就用的,不考慮什么開源不開源的。


          為了支撐自己業(yè)務(wù)的發(fā)展,Google不斷地想辦法擴(kuò)展Perforce,但是擴(kuò)展也是到了盡頭:CPU超負(fù)荷運(yùn)轉(zhuǎn),時(shí)不時(shí)出現(xiàn)TCP連接失敗。


          Google也考慮了Git,但當(dāng)時(shí)Git的主流觀點(diǎn)是:應(yīng)該使用更多更小的代碼庫。這和Google單一代碼庫的理念是完全相反。


          就像2005年Linus被迫發(fā)明Git一樣,Google也被迫發(fā)明了自己新的版本管理系統(tǒng):Piper


          新工具開發(fā)起來很容易,但是把數(shù)據(jù)從Perforce遷移到Piper非常難。


          在過去的11年間,Perforce已經(jīng)深深地融入了Google的生態(tài)系統(tǒng),基于Perforce Google已經(jīng)開發(fā)了300多種工具。


          2010年,Oracle狀告Google,指控它在Android中使用了未經(jīng)授權(quán)的Java API,這給Google敲響了警鐘,千萬不用復(fù)制Perforce的API。


          最后Google工程師不得不采用了“潔凈室”的技術(shù),由獨(dú)立的,對Perforce API一無所知的工程師來進(jìn)行設(shè)計(jì)


          向Piper的遷移花費(fèi)了4年的時(shí)候,才大功告成。



          4
          總結(jié)


          Facebook和Google都是標(biāo)準(zhǔn)的互聯(lián)網(wǎng)巨頭,在他們代碼庫的發(fā)展過程中,一直堅(jiān)持單一代碼庫的策略,都“拋棄”了Git。


          Facebook選擇現(xiàn)成開源軟件Mercurial,瘋狂魔改,使其滿足自己的要求。


          Google則選擇發(fā)明一個(gè)新輪子Piper,花費(fèi)巨大經(jīng)歷進(jìn)行遷移。


          他們所做的事情,不是一般公司能干的,對絕大多數(shù)公司來說,選擇Git就足夠了。


          全文完,覺得不錯(cuò)的話點(diǎn)個(gè)或者看吧!


          本文作者劉欣,著有暢銷書《碼農(nóng)翻身》,《半小時(shí)漫畫計(jì)算機(jī)》,前IBM架構(gòu)師,領(lǐng)導(dǎo)過多個(gè)企業(yè)應(yīng)用架構(gòu)設(shè)計(jì)和開發(fā)工作;洞察技術(shù)本質(zhì),擅長用故事去講解復(fù)雜技術(shù)。

          往期回顧

          1、毀offer還這么理直氣壯。。。
          2、WPS被微軟誤報(bào)為勒索軟件 真離譜!
          3、經(jīng)濟(jì)越差,越要瘋狂做這5件事
          4、苦撐多年,老爺子70多!這個(gè)軟件快要沒人維護(hù)了。。
          5、兩次全球藍(lán)屏,禍?zhǔn)拙故峭蝗耍?/a>
                


          點(diǎn)擊關(guān)注公眾號,閱讀更多精彩內(nèi)容

          瀏覽 498
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草在线观看视频 | 无码一区二区三区三 | 先锋男人资源 | 在线观看视频黄免费 | 亚洲一级免费视频 |