大厂机密!30 个提升团队研发效能的锦囊
互聯(lián)網(wǎng)大公司那些價值上億的項目背后,團隊成員是怎么高效協(xié)作開發(fā)的?和我自己開發(fā)辣條項目時有什么區(qū)別?
看完本文,保證讓你大開眼界!
魚皮在學(xué)校的時候,做過很多項目,但大部分都是練手的 Demo。基本都是單兵作戰(zhàn),毫無章法。
大二暑假,我第一次進入企業(yè)實習(xí),要和同事合作開發(fā)一個大項目,對于企業(yè)中的條條框框和同事寫的爛代碼非常不適應(yīng),整天大呼同事不講碼德!
大三來到字節(jié)跳動實習(xí),還是和同事一起開發(fā)一個新項目,那會兒仍然不適應(yīng)團隊開發(fā),最煩的事就是每次寫完代碼,都要讓同事檢查幾遍,確認沒問題后還要在他的監(jiān)護下才能發(fā)布上線。
后來走出校園,來到騰訊,接觸到了更大的團隊、更大的項目,但起初我還不能很好的適應(yīng)團隊開發(fā),依舊保持個人開發(fā)時的野性,導(dǎo)致效率非常低。
經(jīng)過在鵝廠一年多的摸爬滾打,如今的我,終于能夠熟練運用企業(yè)的各種資源來提升自己和團隊的研發(fā)效率了!
我總結(jié)了 30 個提升團隊研發(fā)效能的錦囊,完整覆蓋項目的各研發(fā)流程,分享給大家~
項目研發(fā)流程1. 技術(shù)選型
想要提升團隊開發(fā)效率,在投入項目開發(fā)前,必須確認項目的技術(shù)選型。比如項目選用哪種編程語言、選用哪個開發(fā)框架、選用哪些依賴庫、選用哪個測試框架、選用哪種數(shù)據(jù)庫、選用哪些中間件等等。
技術(shù)選型是一門大學(xué)問,通常不是由一位技術(shù)大牛或架構(gòu)師一錘定音的,而是要大家開會討論,結(jié)合具體的業(yè)務(wù)場景進行分析,并且對技術(shù)進行充分的研究,最后共同確認一個較為合適的選型方案。
技術(shù)選型的考量要素非常多,比如:
團隊成員對技術(shù)的熟悉程度。團隊成員對技術(shù)越熟悉,培訓(xùn)成本越小,開發(fā)效率越高。在一個都是 Java 工程師的團隊提出使用 C++ 簡直不講碼德!
團隊對技術(shù)的掌控度。團隊內(nèi)至少要有一個人非常了解該技術(shù),懂得最佳實踐,能夠指導(dǎo)團隊正確運用技術(shù),并解決疑難問題。
技術(shù)的主流程度和生態(tài)。技術(shù)越主流,文檔、實踐和解決方案就越多,而使用冷門技術(shù)可能出現(xiàn)無法解決的問題,整段垮掉!
技術(shù)和業(yè)務(wù)的貼合程度。技術(shù)是為業(yè)務(wù)服務(wù)的,因此必須結(jié)合具體的業(yè)務(wù)場景去選用技術(shù)。比如在只有幾個用戶使用的小網(wǎng)站中運用微服務(wù)框架是一個愚蠢的選擇。
2. 開發(fā)工具
工欲善其事,必先利其器。
在開發(fā)前,選擇一款優(yōu)秀的開發(fā)工具,并且學(xué)習(xí)如何高效地使用它吧!很多開發(fā)工具都自帶了代碼檢查、代碼格式化等功能,還有很多快捷鍵,這將大大提升我們的開發(fā)效率和開發(fā)體驗。
目前比較主流的開發(fā)工具有 JetBrains 全家桶、Vscode、Sublime 等等,不必沉迷于某一款開發(fā)工具無法自拔,可以針對項目的類別和體積進行選擇。
除了本地的開發(fā)工具外,還可以使用云端的開發(fā)工具,比如 Cloud Studio,無需下載任何軟件,直接在瀏覽器中進行開發(fā)和調(diào)試、實時瀏覽。對于小型項目的開發(fā)也許是一個不錯的選擇。
Cloud Studio 在線開發(fā)3. 代碼規(guī)范
在開發(fā)前,為團隊或項目制定一套代碼規(guī)范太有必要了。
好的代碼規(guī)范能夠幫助團隊成員閱讀理解他人的代碼,提升協(xié)作開發(fā)效率和團隊氛圍。
試想,如果你習(xí)慣代碼縮進兩格,而其他同學(xué)都縮進四格,會不會感到很懊惱?
4. 腳手架
在開發(fā)一個新項目前,通常由架構(gòu)師或熟悉技術(shù)框架的同學(xué)來搭建項目的基本結(jié)構(gòu)、編寫 Demo,其他同學(xué)只需要在此基礎(chǔ)上遵循規(guī)范進行開發(fā)(復(fù)制粘貼)就好。
如今,項目結(jié)構(gòu)越來越復(fù)雜,我們不可能手動創(chuàng)建一個又一個文件。
懶人推動世界,很多框架自帶了腳手架,能夠讓我們通過輸入一兩行命令,快速生成項目的基本結(jié)構(gòu)、默認配置文件、甚至是可直接運行的 Demo,避免了不必要的重復(fù)工作,大大提升開發(fā)效率!
比如前端框架 Vue 的腳手架 Vue Cli 和前端框架 React 的腳手架 Create React App。
腳手架演示5. 低代碼構(gòu)建
低代碼是指少寫代碼或不寫代碼。通過對應(yīng)用場景的極致抽象和模板化,將寫代碼的工作交給機器來自動生成。
就像現(xiàn)在網(wǎng)上很多 App 和網(wǎng)站制作平臺,只需要在界面上選擇元素、點點拖拖,就能夠自動創(chuàng)建出應(yīng)用,根本不需要寫任何代碼,哪怕是不會編程的人也能輕松使用。
低代碼構(gòu)建在企業(yè)中非常流行,是提升團隊開發(fā)效率的神器,幾乎每個大公司都有自己的低代碼構(gòu)建平臺。業(yè)界比較知名的低代碼平臺有 Google 的 App Maker 和微軟的 Power Apps 等。
Power Apps 畫布的圖像6. 內(nèi)部依賴倉庫
在開發(fā)中,我們經(jīng)常需要下載大量的依賴包,還要將開發(fā)好的依賴包進行上傳。
但是,通常軟件依賴源都是國外的服務(wù)器,比如 Maven 和 npm 源,從國內(nèi)下載依賴的速度非常慢。雖然下載慢的問題可以通過配置國內(nèi)鏡像源得到一定程度的解決,但是無法直接在公有軟件源上傳私有包。
因此,通常企業(yè)都會在內(nèi)網(wǎng)搭建私有軟件源,即內(nèi)部依賴倉庫,便于內(nèi)部依賴管理,大大提升拉取效率。
目前最常用的內(nèi)部依賴倉庫是 Nexus。
Nexus 倉庫7. 本地開發(fā)熱更新
很多年前,在我還有一雙清澈的雙眼的時候,我在本地開發(fā)網(wǎng)站都是改一行代碼,然后切換到瀏覽器里刷新看效果,然后再改代碼,再刷新,如此往復(fù),非常難受。尤其是開發(fā)后臺應(yīng)用時,哪怕在代碼中改了一個字母,都要去重啟項目!
現(xiàn)在想想,效率實在是太低了。
如今,本地開發(fā)熱更新是程序員開發(fā)提效必備的神器,啟動一個開發(fā)服務(wù)器,讓它自動監(jiān)聽代碼文件。當代碼更新時,運行中的項目也會自動更新,從而省去了無止盡的刷新和重啟。
在前端,比較知名的熱更新工具有基于 HMR 技術(shù)(模塊熱替換 hot module replacement)的 Webpack Dev Server;在 Java 后端有 熱部署插件 JRebel。
JRebel 簡化流程8. Serverless
Serverless 是最近幾年逐漸流行的概念,翻譯過來就是 “無服務(wù)器”。
以前,我們要搭建網(wǎng)站的后臺,首先要買服務(wù)器,然后將一個大而全的項目包部署到服務(wù)器上,整體對外提供服務(wù),所有的系統(tǒng)資源和進程都需要由我們自己來管理。
單體架構(gòu)隨著云計算時代虛擬化、容器、微服務(wù)等技術(shù)的發(fā)展,人們將大項目的通用部分抽象成一個個細小的服務(wù),每個服務(wù)只提供一個或幾個功能,獨立部署在比服務(wù)器更輕量且無狀態(tài)的容器中,共同對外提供服務(wù),組成一個完整的系統(tǒng)。
Serverless 架構(gòu)而 Serverless 不是指完全不需要服務(wù)器,而是讓開發(fā)者感受不到服務(wù)器的存在。
什么意思呢?其實就是把對服務(wù)器的需求外包給廠商,我們只管寫代碼,讓他們負責部署和運維。我們花錢,他們辦事!
目前國內(nèi)有很多 Serverless 服務(wù)提供商,如阿里云、騰訊云、LeanCloud 等,使用這些 Serverless 服務(wù)后,我們無需再關(guān)心服務(wù)器的運行,只需要專心寫業(yè)務(wù)邏輯就可以了,能夠大大提升開發(fā)和維護效率,省時省心。
9. 代碼托管
很多年前,我們的代碼幾乎都存在自己的電腦里,通過 U 盤或者網(wǎng)絡(luò)傳輸代碼文件來實現(xiàn)合作開發(fā)。
而如今,代碼托管平臺已經(jīng)成為團隊合作開發(fā)的靈魂。
相信很多小伙伴都接觸過 GitHub,世界上最大的代碼開源托管平臺。每個人都可以把自己的代碼發(fā)布到 GitHub 上,作為一個代碼倉庫,隨時隨地遠程管理。還可以搜索和瀏覽其他人發(fā)布的代碼倉庫,以此實現(xiàn)高效地合作開發(fā),促進項目的完善。
為了保證代碼的安全保密性,一般在公司或團隊內(nèi)部都會自己搭建一個代碼托管平臺,比較知名的有 GitLab,可以針對不同的項目為成員分配權(quán)限,更好地管理團隊的代碼。
GitLab10. 本地代碼檢查
在代碼提交之前,首先應(yīng)該在本地進行代碼檢查,及時發(fā)現(xiàn)一些低級的語法錯誤,防止被團隊的其他同學(xué)嘲笑。
大多數(shù)集成開發(fā)工具自帶了代碼檢查功能,邊敲代碼邊檢查,非常爽。
此外,我們還可以配置 Git Hooks,在代碼提交前自動執(zhí)行代碼檢查,npm 項目可以通過 Husky 插件實現(xiàn),還能配合 ESLint 實現(xiàn)代碼自動修復(fù)。
ESLint11. 代碼提交規(guī)范
團隊越大,規(guī)范就越重要。
只有代碼編寫規(guī)范還不夠,還要在團隊內(nèi)制定一套代碼提交規(guī)范,通常是約定式提交規(guī)范,即讓成員在提交代碼時填寫指定格式的 Commit Message,比如下面的格式:
<提交類型>[可選的作用域]:?<描述>[可選的正文]
[可選的腳注]
指定代碼提交規(guī)范不僅能夠幫助成員快速理解每次提交的改動點,提升代碼審查效率;更大的作用是讓一些自動化工具理解提交信息以進行一些有意義的工作,比如生成 Change Log(代碼改變?nèi)罩?#xff09;。
可以參考一些大公司的代碼提交規(guī)范,并通過 commitlint 和 commitizen 等插件實現(xiàn)自動修復(fù)不規(guī)范代碼。
commitlint 代碼提交規(guī)范檢查12. 代碼審查
在團隊開發(fā)中,寫代碼可不能像自己練習(xí)編程時一樣肆無忌憚。
在合作開發(fā)時,可以為每位開發(fā)者分配一個分支,在自己的分支編寫和提交代碼,也可以按照需求來建立分支。確認開發(fā)測試完成后,發(fā)起一個 MR(Merge Request 合并請求),將小分支的代碼合并到公共的主線分支即可。
分支合并主線分支的代碼通常是能夠直接發(fā)布上線、穩(wěn)定運行的。因此,為了保證項目代碼的質(zhì)量,每次合并代碼到主線分支前,必須要進行代碼審查(CR,即 Code Review),就是讓同事或上級閱讀和審批你的代碼,覺得沒有問題后,才能夠執(zhí)行代碼合并。
通常,代碼變更越大、項目越重要,代碼審查所需人數(shù)越多,越能夠發(fā)現(xiàn)一些個人無法發(fā)現(xiàn)的風險和問題。因此,代碼審查是大公司研發(fā)流程的關(guān)鍵一環(huán)和重要防線。雖然不能直接提升研發(fā)效能,但是能有效避免線上事故的發(fā)生,減少程序員不必要的工作量和心理壓力。
代碼審查13. CI/CD 流水線
CI/CD 即持續(xù)集成/持續(xù)交付。
在敏捷開發(fā)時代,哪怕是一個小團隊,每天也會有幾次的代碼提交,如果長期不合并,可能就會出現(xiàn)代碼沖突。
代碼沖突因此,持續(xù)集成的意義在于,通過每天定時將各個開發(fā)人員的代碼合并到同一個代碼倉庫中,以盡早發(fā)現(xiàn)代碼沖突和錯誤,幫助團隊更緊密地開發(fā)協(xié)作。
當我們開發(fā)完項目,想要發(fā)布上線時,要先登錄服務(wù)器,然后在服務(wù)器上拉取代碼倉庫中的項目代碼,然后執(zhí)行打包命令,最后通過腳本運行項目。
如果只需要在一臺服務(wù)器上部署,其實還不算太麻煩,但是如果要在幾十臺機器上部署呢?要一臺一臺地登錄服務(wù)器然后重復(fù)著上述工作么?
懶人推動世界,這時我們就需要持續(xù)交付,將構(gòu)建部署的每個步驟由人工轉(zhuǎn)變?yōu)闄C器自動操作,原理類似編寫了一個自動化構(gòu)建腳本,在代碼合并到倉庫時觸發(fā)腳本的執(zhí)行,在各機器上自動拉取新代碼并打包發(fā)布。
目前主流的 CI/CD 平臺是 Jenkins 老爺爺,可以配合代碼托管平臺 GitLab 等實現(xiàn)完全自動化打包、構(gòu)建、發(fā)布,再也不用開發(fā)人員一臺臺登錄機器去執(zhí)行重復(fù)的命令了,不僅大大提升了團隊研發(fā)效率,還保證了發(fā)布流程的規(guī)范和安全性。
Jenkins 爺爺畢竟總有些內(nèi)鬼程序員借著發(fā)布的名義偷偷登錄服務(wù)器執(zhí)行 rm -rf *。
14. 監(jiān)控告警
為了在第一時間發(fā)現(xiàn)線上項目存在的問題,我們通常會在代碼中添加告警邏輯,當某段代碼執(zhí)行異常時通過郵件、短信、微信、電話等方式聯(lián)系項目負責人。
但有時,我們可能會針對某些指標在一段時間內(nèi)的統(tǒng)計值設(shè)置告警。比如當機器內(nèi)存占用超過 80% 且持續(xù) 5 分鐘才告警。這些告警邏輯和業(yè)務(wù)本身關(guān)系不大,如果都寫死在代碼里,不僅耗時,而且難以維護。
可以在團隊內(nèi)搭建監(jiān)控告警平臺,通過在機器上部署代理或者在代碼中使用上報 SDK 等方式來讓告警平臺統(tǒng)一收集項目運行時的各個指標,比如機器負載、網(wǎng)絡(luò)負載、異常信息等。
監(jiān)控告警平臺提供配置界面,可以靈活地配置告警規(guī)則,比如 1 分鐘內(nèi)收集到 2 個報錯就發(fā)郵件告警、收集到 5 個報錯就發(fā)短信等。
完善的監(jiān)控告警平臺還能夠?qū)v史告警信息進行管理和詳情查看,以及可視化展示各指標圖表等。不僅減少了我們開發(fā)時的工作量,也能幫助我們更快地分析和排錯。
Zabbix 是比較知名的開源監(jiān)控解決方案,幾乎能對任何 IT 基礎(chǔ)架構(gòu)、服務(wù)、應(yīng)用程序和資源進行監(jiān)控和告警,全面且專業(yè)。
Zabbix 監(jiān)控15. 日志平臺
通常,已上線的項目出現(xiàn)問題時,我們會通過查看日志文件來定位和排查問題。
如果項目比較小,僅僅在單臺服務(wù)器上部署,那么只需要登錄這臺服務(wù)器,輸入命令來查看日志即可。
但團隊的項目量級較大時,通常會部署到多臺機器上,而且每臺機器上的日志量都非常大,以人工的方式一臺臺登錄服務(wù)器,然后在數(shù)以萬計的日志中去找到自己想要的關(guān)鍵信息,是非常低效又惡心的!
雜亂的日志日志不講武德,可以搭建一個統(tǒng)一的日志平臺來治治它們。將各臺機器上分散的日志收集到日志平臺,然后通過可視化的界面去集中管理和搜索日志,大大提升了查閱日志的效率和體驗。
目前比較主流的技術(shù)是 Elastic Stack(Elasticsearch + Logstash + Kibana + Filebeat) ,使用它可以搭建一套企業(yè)級日志平臺,輕松管理上百萬甚至是上億的日志數(shù)據(jù)。
Kibana 日志可視化16. 接口文檔平臺
現(xiàn)在很多的項目都采用前后端分離的方式進行開發(fā),前端同學(xué)寫界面,后端同學(xué)提供接口。如果沒有一個規(guī)范的接口文檔,聲明每個接口的協(xié)議、請求參數(shù)、響應(yīng)參數(shù)等,很容易導(dǎo)致前端請求錯誤。
傳統(tǒng)的方式是由后端同學(xué)手動編寫接口文檔,接口改動時,文檔也要改動,非常低效且不利維護。
其實,我們可以將接口文檔平臺化,通過 Swagger 等工具自動生成精美的接口文檔網(wǎng)站,開發(fā)者還可以在網(wǎng)站上直接測試各個請求,告別了手動編寫文檔的低效繁瑣,提升了開發(fā)和協(xié)作效率。
Swagger 接口文檔17. 接口測試平臺
測試是對研發(fā)質(zhì)量的保障。
我們寫完代碼后,不僅要在本地測試,還要在測試環(huán)境、預(yù)發(fā)布環(huán)境、線上環(huán)境都進行測試驗證。項目越大,對測試的要求越高,也就越麻煩。
通常我們會使用 Curl、Postman 等工具進行接口測試,簡單易用。但是有些時候,本地網(wǎng)絡(luò)(公網(wǎng))和測試環(huán)境(內(nèi)網(wǎng))的網(wǎng)絡(luò)不互通怎么辦?
可以在團隊內(nèi)部搭建接口測試平臺。提供一個 web 界面,無需下載任何軟件,就可以輕松地創(chuàng)建各種接口測試,編寫各種測試用例,創(chuàng)建測試計劃。最棒的是還能切換不同的測試環(huán)境,以及多人共享測試等等。大大提高了測試效率和質(zhì)量。
18. 即時協(xié)作
天下武功,無快不破。為追求更高的協(xié)作效率,可以使用一些即時協(xié)作工具。
比如在協(xié)作開發(fā)同一個項目時,可以使用開發(fā)工具 Vscode 的 VS Live Share 插件,支持多人連線,團隊成員可以同時對文件進行編輯,甚至還能看到對方的光標!
Live Sharing with VS Code在多人編寫同一個文檔或表格時,可以使用騰訊文檔,實時看到其他成員的光標位置和對文檔的改動,尤其是在開會時,這個功能將非常有用。
騰訊文檔使用即時協(xié)作平臺不僅可以提升效率,還能以最快的速度發(fā)現(xiàn)沖突,發(fā)現(xiàn)有人正在寫爛代碼可以直接打字提示他。
19. 團隊知識庫
團隊在開發(fā)項目的過程中,肯定會產(chǎn)生很多有用的知識,比如技術(shù)選型過程、線上事故的分析處理過程、技術(shù)文檔、產(chǎn)品文檔、業(yè)務(wù)介紹等。這些知識是團隊成員共同積累的財富,日后可能要給其他同學(xué)閱讀學(xué)習(xí),因此必須妥善保存。
以前的做法是,大家把想共享的文件傳到一個公共的網(wǎng)盤中,需要時下載到自己的電腦上。當網(wǎng)盤的文件更新時,還要再重復(fù)下載,非常地低效。
現(xiàn)在的項目團隊,一般都有自己的團隊知識庫,通常是云端網(wǎng)站的形式,所有的成員可以在知識庫中上傳想要保存和分享的文檔,也可以直接在知識庫中編寫文檔。想要學(xué)習(xí)知識的同學(xué)直接登錄知識庫網(wǎng)站,搜索文檔即可,還能夠?qū)?yōu)秀的文檔進行收藏。
團隊知識庫不僅能夠更好地維護和沉淀團隊的知識,還能提升大家編寫和閱讀文檔的效率,更好地進行知識協(xié)作共享。
比較不錯的在線團隊知識庫有阿里語雀、騰訊樂享、Wiki、Confluence 等。
語雀知識庫20. 進程監(jiān)控
有時,我們線上運行的項目進程可能因為某些意外而退出,而且沒有被任何人及時發(fā)現(xiàn),這可能會對團隊造成巨大的損失。
為了保證線上項目的高可用,可以開啟進程監(jiān)控,當項目進程退出時,自動重啟該進程并且向負責人發(fā)送告警,一定程度上減少了事故的影響,也省去了手動重啟進程的操作。
可以自己編寫進程監(jiān)控腳本,也可以使用一些現(xiàn)成的監(jiān)控程序,比如 Supervisor 和 Monit 等。
Monit 監(jiān)控21. 前端監(jiān)控統(tǒng)計
前端監(jiān)控主要包括對頁面的性能監(jiān)控、錯誤監(jiān)控和用戶行為監(jiān)控。對于 C 端項目而言,前端監(jiān)控非常重要。通過性能監(jiān)控,可以分析頁面性能的不足,優(yōu)化頁面,提升用戶體驗。通過錯誤監(jiān)控,可以在用戶進行某些誤操作時第一時間通知到項目負責人,并進行相應(yīng)的處理。通過行為監(jiān)控,可以獲取 UV、PV、IP、點擊流等等,從而分析用戶的使用習(xí)慣,改進產(chǎn)品。
如果沒有前端監(jiān)控平臺,開發(fā)者要自己收集各用戶行為指標,且只能通過不斷地測試來分析頁面性能的不足,會產(chǎn)生很多額外的工作量。
有很多現(xiàn)成的前端監(jiān)控平臺,比如百度統(tǒng)計、專注錯誤監(jiān)控的 Sentry、騰訊的 Aegis 等,直接申請賬號接入即可,省去了自己搭建的麻煩。
百度統(tǒng)計22. 任務(wù)調(diào)度平臺
在日常開發(fā)中,少不了執(zhí)行定時任務(wù),比如每天檢測數(shù)據(jù)是否正常、定時發(fā)送郵件、同步數(shù)據(jù)等。如果把這些任務(wù)都寫死在代碼中去執(zhí)行,即使用一些定時任務(wù)框架,當任務(wù)多了,也會變得難以管理。而且無法控制任務(wù)的執(zhí)行狀態(tài),還有可能導(dǎo)致一些單次任務(wù)的重復(fù)執(zhí)行,造成風險!
因此,需要統(tǒng)一的任務(wù)調(diào)度平臺來管理任務(wù)。可以通過平臺界面實時查看各任務(wù)的執(zhí)行情況,還能夠靈活地控制任務(wù)的啟停、執(zhí)行參數(shù)、超時時間等。甚至可以將任務(wù)調(diào)度到多臺機器同時執(zhí)行。降低風險的同時提升了管理定時任務(wù)的效率。
有一些優(yōu)秀的開源任務(wù)調(diào)度平臺如 Elastic Job 和 XXL-JOB,可以直接搭建使用。
XXL 任務(wù)調(diào)度平臺23. 配置中心
任何項目都離不開配置,比如數(shù)據(jù)庫連接密碼、第三方服務(wù)調(diào)用地址等。
如果把配置都寫死在代碼中,或者是項目包里的配置文件中,當配置需要修改時,我們就不得不修改項目文件,提交代碼,重新打包,再發(fā)布上線,非常麻煩。
而且有些時候,由于多個項目使用了相同的配置,在改動一行配置時,可能要去修改多個項目,不僅麻煩,而且存在漏改的風險。
因此,我們需要一個配置中心來集中管理那些經(jīng)常變化的、同時被多個項目使用的配置。
比較好用的配置中心有攜程的 Apollo、阿里的 Nacos 等,可以直接在界面上創(chuàng)建和發(fā)布配置,還能對配置進行版本控制,靈活地升級和回退。使用配置中心能夠提升配置管理的效率,同時避免重復(fù)地改動項目的配置文件。
攜程 Apollo 配置中心24. 鏈路追蹤
假設(shè)我們的項目中有一個功能依賴多個第三方接口,該功能的平均執(zhí)行時間是 50ms。
/**?*?獲取用戶詳情(依賴三個接口)
?*/
function?getUserDetail()?{
??let?user?=?getUserById();?//?得到用戶基本信息?10ms?
??user.account?=?getUserAccount();?//?得到賬戶信息?20ms
??user.idcard?=?getUserIdCard();?//?得到用戶身份證信息?20ms
??return?user;
}
結(jié)果有一天,這個功能執(zhí)行超過了 10 分鐘!那怎么排查出是哪個第三方接口出現(xiàn)了問題呢?
當出現(xiàn)復(fù)雜的調(diào)用關(guān)系時,我們可以使用鏈路追蹤系統(tǒng),通過給每個請求環(huán)節(jié)綁定唯一 id 并上報時間的方式串聯(lián)起整條調(diào)用鏈路。在鏈路追蹤系統(tǒng)提供的界面可以輕松地查看整個請求的調(diào)用過程,能夠幫助我們更快地定位請求中的問題,優(yōu)化接口的性能。
SkyWalking 鏈路追蹤系統(tǒng)25. 容器管理平臺
以前,團隊的項目都是直接部署在服務(wù)器上,簡單粗暴。但是隨著時間的推移,項目會越來越大,最終成長為一個巨石應(yīng)用。
滾雪球隨著云計算、容器、微服務(wù)等技術(shù)的發(fā)展,對于一些大型的巨石項目,我們可以將其拆分為獨立的微服務(wù),部署在一個個相互隔離的容器中。容器就像一位少女,輕量、優(yōu)雅而迅速。
一個項目可能需要同時部署多個容器,我們需要對這些容器進行管理和資源的分配。而容器比服務(wù)器的粒度更細,數(shù)量可能是機器數(shù)的幾倍,手動去管理他們是很難的。
Docker 容器因此我們需要容器管理平臺,統(tǒng)一管理容器,自動分配資源,并根據(jù)容器的資源占用情況進行彈性伸縮,極大地提升運維效率。
K8S(Kubernetes)可以說是最知名的容器管理平臺了,很多大公司也都提供容器管理平臺的云服務(wù),可以直接接入。
K8S26. 中臺
問個問題,如果讓你連續(xù)開發(fā) 5 個電商系統(tǒng),當你開發(fā)第 6 個電商系統(tǒng)的時候,你會怎么做呢?
肯定要將前 5 個電商系統(tǒng)中能用上的代碼粘貼過來對吧!
如果你意識到重復(fù)開發(fā)的麻煩,你就知道有一個中臺會多香了,說是提升百倍效率一點也不夸張!
中臺的概念近幾年來在國內(nèi)十分火熱,可以簡單地理解為被很多系統(tǒng)共用的中間件的集合。
中臺又分為業(yè)務(wù)中臺、技術(shù)中臺、數(shù)據(jù)中臺、組織中臺等。就拿業(yè)務(wù)中臺來說,就是抽象傳統(tǒng)的業(yè)務(wù)場景,把后臺的火藥等資源整合成前臺打仗需要的炮彈,隨取隨用。
回到上述問題,我們是不是可以將前 5 個電商系統(tǒng)中用到的技術(shù)和工具,抽象成一個中臺呢?
中臺出現(xiàn)之前,由于團隊的分散,我們總是在重復(fù)建設(shè)一個又一個的輪子。而如今,幾乎所有的互聯(lián)網(wǎng)巨頭都在建設(shè)自己的中臺,比如支付中臺、直播中臺、電商中臺等。如果要開發(fā)一個新的系統(tǒng),我們根本不用從零開始,直接使用中臺資源就能很方便地完成,很快啊!
27. 腳本管理
在開發(fā)中,我們經(jīng)常需要編寫一些腳本(可以將腳本理解為簡單的程序),來幫助我們更快捷地完成某項任務(wù)。
比如我們要去重啟一個進程,需要執(zhí)行關(guān)閉進程、清理文件、啟動進程三個步驟,可能要輸入很多行命令才能完成。
do?stopdo?clear
do?start
不妨直接將三個步驟的命令塞到一個 shell 腳本文件里,再次重啟進程時,只需要一行命令就行了,很快啊!
./restart.sh但如果我們想在其他的系統(tǒng)上多次使用這個腳本,怎么辦呢?是把編寫好的腳本放在自己的電腦上,還是直接扔到服務(wù)器上呢?
更好的方式是使用腳本管理平臺,團隊成員可以將自己編寫的各種語言的腳本都發(fā)布到該平臺上,想在其他系統(tǒng)或服務(wù)器中使用該腳本時,直接請求腳本的在線鏈接,腳本將自動下載、執(zhí)行和清理。
腳本管理平臺尤其適合運維同學(xué)使用,某種程度上也是通過自動化提升了效率。
28. 可視化數(shù)據(jù)管理
團隊開發(fā)肯定離不開數(shù)據(jù)庫,并發(fā)量高一點還需要使用緩存、消息隊列等中間件。
無論是本地開發(fā),還是在測試、線上環(huán)境驗證,我們都經(jīng)常需要查看數(shù)據(jù)庫或者緩存里的數(shù)據(jù)是否正確。最直接了當?shù)姆椒ň褪谴蜷_小黑框,用官方提供的命令行連接數(shù)據(jù)庫,然后輸入查詢命令去查看,這也是很多高級工程師現(xiàn)在還在堅持的做法,因為有 B 格。
但是,如果用了分庫分表技術(shù),一份完整的數(shù)據(jù)被分散到多個數(shù)據(jù)庫和數(shù)據(jù)表中,使用命令行來查看就比較麻煩。因此,我們需要可視化的數(shù)據(jù)管理平臺,比較常用的是本地軟件 Navicat、JetBrains DataGrip 等。
為了更方便地管理數(shù)據(jù),團隊內(nèi)部還可以搭建在線的可視化數(shù)據(jù)管理平臺,比如面向 MySQL 數(shù)據(jù)庫的 phpMyAdmin,開發(fā)者無需在本地安裝任何軟件,直接打開網(wǎng)站,輸入密碼,就能夠瀏覽和操控數(shù)據(jù)啦!
phpMyAdmin 數(shù)據(jù)庫管理29. 項目管理
提到項目管理,大家可能覺得和技術(shù)研發(fā)同學(xué)沒什么關(guān)系,其實不然。
通過項目管理平臺,我們能夠看到每個需求的優(yōu)先級和排期,可以合理規(guī)劃自己的研發(fā)安排,掌控進度。有重要的信息,也可以貼到需求詳情下,相對正式,能夠及時同步到所有需求的參與者,規(guī)避一些風險。
而如果沒有項目管理平臺,對需求進度沒有一個好的把握,說不定摸魚就摸過頭了。
有很多開箱即用的項目管理平臺,比如 TAPD 和 Jira。
30. 企業(yè)通訊
通訊軟件是團隊溝通協(xié)作、高效辦公的靈魂,比如騰訊的企業(yè)微信、阿里的釘釘、字節(jié)跳動的飛書。
這些企業(yè)通訊軟件早就不只是支持團隊即時溝通的工具了,而是大而全的企業(yè)辦公門戶。
像騰訊的企業(yè)微信,集成了文檔、待辦、會議、通訊錄、工作臺、云盤、電話等辦公必備的工具,成員可以通過軟件快速地找到并使用這些功能,大大提高了辦公效率。還可以在通訊軟件中設(shè)置機器人,實現(xiàn)業(yè)務(wù)的自動告警。
以上就是魚皮分享給大家的錦囊啦。
其實,大廠中還有很多提升研發(fā)效能的技術(shù),比如流量回放、壓測平臺、試驗系統(tǒng)、故障演練系統(tǒng)等,這里就不一一介紹了。
此外,每個團隊負責的業(yè)務(wù)不同、情況不同,也都會有提升自己研發(fā)效能的獨門秘技,要根據(jù)實際的場景去選用技術(shù),否則可能適得其反。
希望大家能利用好現(xiàn)有的技術(shù)、發(fā)掘新的技術(shù),不斷提升研發(fā)效能,感受技術(shù)帶來的美好。
總結(jié)
以上是生活随笔為你收集整理的大厂机密!30 个提升团队研发效能的锦囊的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/C++编程知识分享:C++ 手把手教
- 下一篇: 程序员提高编程技术最有效的一件事?了解一