Bazel Build:Bazel是一把雙刃劍

Bazel是一個支持多語言、跨平臺的構(gòu)建工具。Bazel支持任意大小的構(gòu)建目標,并支持跨多個倉庫的構(gòu)建悲幅,是Google主推的一種構(gòu)建工具套鹅。

優(yōu)勢

Bazel存在如下方面的優(yōu)勢。

  • 易理解:Bazel對外提供聲明式表達的構(gòu)建DSL汰具,可讀性好卓鹿,降低了構(gòu)建系統(tǒng)的實現(xiàn)復(fù)雜度;
  • 速度快:得益于Bazel優(yōu)異的編譯緩存和依賴分析技術(shù)留荔,更好地支持并行和增量編譯吟孙,甚至增量測試;
  • 跨平臺:一套構(gòu)建系統(tǒng)聚蝶,支持多平臺杰妓,異構(gòu)系統(tǒng)的構(gòu)建;
  • 可擴展:使用類Python語言(Starlark)擴展規(guī)則碘勉,支持多語言構(gòu)建巷挥;
  • 大規(guī)模:支持100k+源文件規(guī)模的構(gòu)建,支持多倉的依賴管理恰聘;
  • 云構(gòu)建:天然地支持云構(gòu)建句各,復(fù)用既有的計算資源。

舉個例子晴叨,使用Bazel,工程中如果需要自動生成Protobuf代碼矾屯,配置CUDA編程環(huán)境兼蕊,管理多倉代碼的依賴等,Bazel相對具有明顯的優(yōu)勢件蚕。

劣勢

但是孙技,Bazel也存在一些與生俱來的缺陷。

Bazel運行于JRE

也就是說排作,安裝Bazel需要額外安裝JRE牵啦,即使Bazel二進制包內(nèi)嵌了一個最小化的JRE;此外妄痪,Bazel啟動速度遲鈍哈雏,內(nèi)存消耗很厲害。

業(yè)界存在其他構(gòu)建工具衫生,例如Scons裳瘪,它使用Python。但是罪针,在幾乎所有的Unix開發(fā)環(huán)境中彭羹,Python是預(yù)裝的,這給開發(fā)者減少了很大麻煩泪酱。

所以派殷,Native風(fēng)格的構(gòu)建工具具有很大的競爭優(yōu)勢还最。一方面,安裝極簡毡惜,用戶心智負擔不大拓轻;另一方面,用戶不需要額外安裝依賴虱黄,整個工具鏈的安裝是完備的悦即、閉包的。

Bazel與Unix社區(qū)文化存在沖突

在Unix社區(qū)橱乱,開發(fā)者已然非常熟悉./configure, make, make install的構(gòu)建工作流辜梳,及其相關(guān)的工具鏈。而且泳叠,開發(fā)者一致遵循FHS(文件系統(tǒng)層次標準)的約定作瞄。

但是,Bazel改變了Unix一貫的風(fēng)格和文化危纫,與社區(qū)文化產(chǎn)生了劇烈的矛盾宗挥。如果你使用Bazel發(fā)布一個庫,對不起种蝶,你的用戶也得用Bazel契耿,才能引用到你的庫。Bazel不支持類似于bazel install命令螃征,你的用戶只能使用Bazel搪桂,然后創(chuàng)建新的規(guī)則去依賴你的庫。使用Bazel盯滚,你強奸了你的用戶群踢械。

反過來,如果Bazel要想依賴于一個非Bazel的庫魄藕,得做適配才能使用内列,用戶不能復(fù)用既有存在的CMake或Make的構(gòu)建系統(tǒng)。眾所周知背率,有的構(gòu)建系統(tǒng)異常復(fù)雜话瞧,適配過程并非易事,你得對庫的架構(gòu)退渗,依賴關(guān)系把握非常準確才行移稳。Bazel開發(fā)團隊也沒有提供相關(guān)工具鏈,翻譯既有存在構(gòu)建腳本会油,這個過程留待給用戶自行解決个粱。

總結(jié)起來,Bazel到Make翻翩,不支持都许;從Make到Bazel稻薇,得出血;從Bazel到Bazel胶征,零成本塞椎,但可能招致用戶的強制性。這對社區(qū)文化是一種傷害睛低,這也是Bazel最大的硬傷案狠。如果沒有背后有錢的老爹Google,估計Bazel早死了钱雷。

這可能與Bazel的定位和架構(gòu)有關(guān)系骂铁,大家也不能罵爹罵娘罵Google傻逼。Bazel定位在于支持多語言罩抗,而不僅僅只包括C/C++拉庵,C/C++的一些慣用法和工具鏈,在其他語言可能不成立套蒂。

此外钞支,/usr/include, /usr/lib是系統(tǒng)目錄。如果你存在兩個工程操刀,分別依賴于相同的烁挟、當版本不同的庫。它們都安裝到系統(tǒng)目錄骨坑,必然存在版本沖突信夫。幸運的是,容器時代這個問題得到了緩解卡啰。相反地,在每個Bazel項目中警没,將其依賴控制在自己的工作區(qū)(Workspace)內(nèi)匈辱,避免了類似的版本沖突問題。

另外杀迹,Bazel的霸道亡脸,也復(fù)合Google一貫高傲的風(fēng)格。通過Bazel的黏性树酪,Google在多語言多語言編程領(lǐng)域浅碾,尤其在云構(gòu)建領(lǐng)域糕非,正在積極構(gòu)建強大的生態(tài)系統(tǒng)和技術(shù)壁壘舞痰。

Bazel的生態(tài)系統(tǒng)不夠成熟

在C/C++領(lǐng)域,CMake牍陌,Make占據(jù)主流疮茄。Bazel作為后起之秀滥朱,能否在生態(tài)中站穩(wěn)腳跟根暑,還得靠時間證明。此外徙邻,上文提及Bazel與社區(qū)文化存在沖突和矛盾排嫌,Bazel的生態(tài)建設(shè)還是不夠樂觀。

目前缰犁,整個Bazel的生態(tài)淳地,基本由TensorFlow社區(qū)挑大梁。但是帅容,TensorFlow的最佳實踐颇象,也很難在社區(qū)中得到有效的傳播和復(fù)制。而且丰嘉,TensorFlow在實踐Bazel也遇到了一些挑戰(zhàn)夯到,包括復(fù)雜度(構(gòu)建腳本代碼行,及其依賴的復(fù)雜度)饮亏。

一方面耍贾,TensorFlow的系統(tǒng)架構(gòu)和實現(xiàn)存在固有的復(fù)雜度;因為TensorFlow是多語言路幸、異構(gòu)的系統(tǒng)實現(xiàn)荐开,常見的工程的構(gòu)建過程不見得擁有TensorFlow那么復(fù)雜,而且大部分公司的工程也不見得擁有Google的復(fù)雜度简肴。在Google玩得轉(zhuǎn)的技術(shù)實踐晃听,在其他公司并不一定有效。

另一方面砰识,搶占既有存在的生態(tài)系統(tǒng)能扒,本身門檻極高。猶如在Java領(lǐng)域辫狼,個人認為Gradle比Maven優(yōu)秀初斑,但Gradle的生態(tài)依然沒有Maven健全和完善。從社區(qū)活躍度看膨处,目前只有Google相關(guān)的項目在推進Bazel见秤,其他項目幾乎沒什么動靜,由此可見一斑真椿。

Monorepo并非是萬能的

Bazel的架構(gòu)思維是Monorepo哲學(xué)的技術(shù)延伸鹃答。但是,Monorepo是否有效突硝,要取決于公司的文化测摔,團隊協(xié)助方式,項目特點等眾多因素狞换,在日常的項目中避咆,并非一定是靈丹妙藥舟肉。采用Monorepo組織項目,Git庫變得越來越大查库,甚至對IDE也提出了挑戰(zhàn)路媚;更有甚者,Monorepo往往導(dǎo)致模塊之間的依賴隱式化樊销,不能得到及時的顯性暴露整慎,增加了系統(tǒng)架構(gòu)的耦合度。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末围苫,一起剝皮案震驚了整個濱河市裤园,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剂府,老刑警劉巖拧揽,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腺占,居然都是意外死亡淤袜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門衰伯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铡羡,“玉大人,你說我怎么就攤上這事意鲸》持埽” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵怎顾,是天一觀的道長读慎。 經(jīng)常有香客問我,道長槐雾,這世上最難降的妖魔是什么贪壳? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蚜退,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘彪笼。我一直安慰自己钻注,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布配猫。 她就那樣靜靜地躺著幅恋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泵肄。 梳的紋絲不亂的頭發(fā)上捆交,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天淑翼,我揣著相機與錄音,去河邊找鬼品追。 笑死玄括,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的肉瓦。 我是一名探鬼主播遭京,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泞莉!你這毒婦竟也來了哪雕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤鲫趁,失蹤者是張志新(化名)和其女友劉穎斯嚎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挨厚,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡堡僻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了幽崩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苦始。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖慌申,靈堂內(nèi)的尸體忽然破棺而出陌选,到底是詐尸還是另有隱情,我是刑警寧澤蹄溉,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布咨油,位于F島的核電站,受9級特大地震影響柒爵,放射性物質(zhì)發(fā)生泄漏役电。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一棉胀、第九天 我趴在偏房一處隱蔽的房頂上張望法瑟。 院中可真熱鬧,春花似錦唁奢、人聲如沸霎挟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酥夭。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熬北,已是汗流浹背疙描。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留讶隐,地道東北人起胰。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像整份,于是被迫代替她去往敵國和親待错。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345