閱讀指南
開發(fā)環(huán)境的追求
部署方案的要求
大廠環(huán)境因素
整合環(huán)境因素,導(dǎo)出方案
展望未來
QA
首先我們強調(diào)一點,任何公司的技術(shù)基建都是隨時間推移去不斷改進(jìn)和建設(shè)的,任何純技術(shù)輸出都必然存在它的邊界。而業(yè)務(wù)拓展、組織架構(gòu)變遷、新興技術(shù)迭代等都是不斷發(fā)生的,這意味著技術(shù)基建必然也是不斷改進(jìn)的。
拿整個互聯(lián)網(wǎng)來說,也是由“石器時代”不斷演變而來。
而一切解決方案都是為了針對某類需求。
開發(fā)環(huán)境的追求
作為團隊中的開發(fā)者一員,無疑要追求美好的開發(fā)體驗,具體可以列舉為:
高效的編譯速度
屏蔽環(huán)境搭建與配置,專注內(nèi)容開發(fā)
團隊編碼規(guī)范的顯式約束
編碼質(zhì)量的保障
各種運行環(huán)境的快速切換
與對應(yīng)需求的綁定與關(guān)聯(lián)
部署方案的要求
部署成果的質(zhì)量與穩(wěn)定性保障
部署流程的快捷
高時效性的容災(zāi)處理
整合環(huán)境因素,導(dǎo)出方案
除開以上普遍意義的需求,大廠本身的環(huán)境更是決定了解決方案的重要因素。 如阿里:
人員方面: 項目組眾多(開發(fā)者數(shù)量多)、分內(nèi)勤和外包(開發(fā)成員之間代碼力差距相對較大);
技術(shù)方面:技術(shù)棧相對統(tǒng)一(主要是業(yè)務(wù)方面: JAVA-SpringCloud,JS-react,veex… ), 技術(shù)輸出明確劃分內(nèi)網(wǎng)和開源。
資源方面:有錢任性,相對寬松。
結(jié)合以上,我們將需求映射成需要解決的問題:
在云IDE之前的年代里(包括現(xiàn)在大多項目組還是使用本地編譯器), 如何統(tǒng)一開發(fā)者的開發(fā)環(huán)境和規(guī)范?如何統(tǒng)一生產(chǎn)變量?(即如何確保本地打包環(huán)境統(tǒng)一,不會出現(xiàn)不同版本依賴或者丟包等打出預(yù)期之外的包)
說白了,這個問題可以簡化為: 如何抹平不同開發(fā)、生產(chǎn)環(huán)境的差異。
做部署流程的整合,提效。
來自阿里的答案
拿阿里的DEF工具舉例:
1、“研發(fā)套件”集成式腳手架
無論哪個項目組的業(yè)務(wù)開發(fā),他們對于環(huán)境本身的配置其實大都是無感知的,以下圖為例
阿里的DEF工具,是通過對本地研發(fā)過程中進(jìn)行總結(jié)收斂,抽象出初始化、編譯預(yù)覽、構(gòu)建、測試、發(fā)布 這五個本地工具的通用功能節(jié)點。將原有的插件能力根據(jù)項目研發(fā)類型進(jìn)行分類后,總結(jié)沉淀出每一類研發(fā)類型的標(biāo)準(zhǔn)本地工具 --研發(fā)套件。
借助套件概念的封裝,用戶在不同項目之間研發(fā)的時候直接通過統(tǒng)一的命令,就能完成項目研發(fā)對應(yīng)工具服務(wù)的啟動使用。
門神
在DEF中集成門神(相當(dāng)于提交代碼前后的鉤子,可類比git-hooks的功能),負(fù)責(zé)團隊開發(fā)規(guī)范的約束(lint,cr,其他插件任務(wù)等)。
云端IDE
而在這兩年里,云IDE開始嶄露頭角,整個開發(fā)環(huán)境遷移至云端,更是直接從根本上解決了開發(fā)環(huán)境差異的問題。
2、統(tǒng)一的研發(fā)部署平臺
說白了就是對于不同的項目,基于它們的技術(shù)選型進(jìn)行宏觀的分類,枚舉出每一種類型的最佳部署體驗,集成到一個平臺。
讓用戶可以體驗“一鍵發(fā)布”的功能,而不用關(guān)心具體的部署細(xì)節(jié)配置。
3、DEVOPS平臺
比如上圖云效平臺,打通自產(chǎn)品需求-設(shè)計-開發(fā)-測試-發(fā)布-運維一條鏈路的流程管理平臺,高效提升效率。 關(guān)于DEVOPS的介紹這里就不再做其他贅述,不太了解的同學(xué)可以自行搜索一下。
4、展望未來
近年來,上云成了一種潮流,以云服務(wù)為核心擴展出的解決方案比比皆是。目前來看,云依然面向未來。 而隨著對AI領(lǐng)域的不斷探索,各大廠也大多有相關(guān)建樹。
但無論如何,基建方案與規(guī)模的決定因素,永遠(yuǎn)在于業(yè)務(wù)與環(huán)境。
5、QA
Q: 大廠開發(fā)時和部署時類庫的引用和存放是一致還是不同?
A: 一般而言,我們要保障開發(fā)和生產(chǎn)環(huán)境的統(tǒng)一,以確保產(chǎn)出與預(yù)期一致。當(dāng)然也有其他情況,這個要看項目本身有沒有不同的需求。 一句話,不要脫離業(yè)務(wù)講技術(shù),更不要蓋棺定論。
Q: 模塊是放在項目中還是放在CDN之類的服務(wù)器?
A: 這個問題中“模塊”這個概念可能不太清晰。這里指的是前端吧,前后端分離的模式下,前端生產(chǎn)出的包都是靜態(tài)資源包,一般都是扔到CDN里嘛。
Q: 渲染網(wǎng)頁用的是nginx還是其他動態(tài)web服務(wù)器?
A: 還是那句話,不要脫離業(yè)務(wù)講技術(shù),更不要蓋棺定論。舉個例子,某項目純node服務(wù)+SSR輸出網(wǎng)頁,本身就是一個web服務(wù)的項目何必再需要web服務(wù)器?
Q: 會選擇自己寫模塊還是在社區(qū)里找模塊?
A: 理論上來講,要盡可能的避免重復(fù)造輪子。在已有可信任的滿足當(dāng)前需求的輪子的條件下,盡量不要自己造嘛,因為大家的工時都是很珍貴的。在保障不耽誤生產(chǎn)并且保障產(chǎn)品質(zhì)量的情況下,為了能優(yōu)化項目本身,也可以自己做嘛。
提倡做有意義的事,而不是多做事。
PASS: 對于以上所有問題哈————無論什么技術(shù)方案,其本身都不是絕對的,技術(shù)是為了服務(wù)業(yè)務(wù)的。
更多關(guān)于html5培訓(xùn)的問題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項目實操的話可以點擊咨詢課程顧問,獲取試聽資格來試聽我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。