<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>

          30 個提升團(tuán)隊(duì)研發(fā)效能的錦囊,大廠機(jī)密!

          共 10367字,需瀏覽 21分鐘

           ·

          2020-12-06 02:12

          ↑ ? 萬字長文不想看,那就聽一聽叭 ↑

          互聯(lián)網(wǎng)大公司價值上億的項(xiàng)目背后,團(tuán)隊(duì)成員是怎么高效協(xié)作開發(fā)的?
          和我自己開發(fā)辣條項(xiàng)目時有什么區(qū)別?
          看完本文,保證讓你大開眼界!
          魚皮在學(xué)校的時候,做過很多項(xiàng)目,但大部分都是練手的 Demo。基本都是單兵作戰(zhàn),毫無章法。
          大二暑假,我第一次進(jìn)入企業(yè)實(shí)習(xí),要和同事合作開發(fā)一個大項(xiàng)目,對于企業(yè)中的條條框框和同事寫的爛代碼非常不適應(yīng),整天大呼同事不講碼德!
          大三來到字節(jié)跳動實(shí)習(xí),還是和同事一起開發(fā)一個新項(xiàng)目,那會兒仍然不適應(yīng)團(tuán)隊(duì)開發(fā),最煩的事就是每次寫完代碼,都要讓同事檢查幾遍,確認(rèn)沒問題后還要在他的監(jiān)護(hù)下才能發(fā)布上線。
          后來走出校園,來到騰訊,接觸到了更大的團(tuán)隊(duì)、更大的項(xiàng)目,但起初我還不能很好的適應(yīng)團(tuán)隊(duì)開發(fā),依舊保持個人開發(fā)時的野性,導(dǎo)致效率非常低。
          經(jīng)過在鵝廠一年多的摸爬滾打,如今的我,終于能夠熟練運(yùn)用企業(yè)的各種資源來提升自己和團(tuán)隊(duì)的研發(fā)效率了!
          我總結(jié)了 30 個提升團(tuán)隊(duì)研發(fā)效能的錦囊,完整覆蓋項(xiàng)目的各研發(fā)流程,分享給大家~
          項(xiàng)目研發(fā)流程

          1. 技術(shù)選型

          想要提升團(tuán)隊(duì)開發(fā)效率,在投入項(xiàng)目開發(fā)前,必須確認(rèn)項(xiàng)目的技術(shù)選型。比如項(xiàng)目選用哪種編程語言、選用哪個開發(fā)框架、選用哪些依賴庫、選用哪個測試框架、選用哪種數(shù)據(jù)庫、選用哪些中間件等等。
          技術(shù)選型是一門大學(xué)問,通常不是由一位技術(shù)大牛或架構(gòu)師一錘定音的,而是要大家開會討論,結(jié)合具體的業(yè)務(wù)場景進(jìn)行分析,并且對技術(shù)進(jìn)行充分的研究,最后共同確認(rèn)一個較為合適的選型方案。
          技術(shù)選型的考量要素非常多,比如:
          1. 團(tuán)隊(duì)成員對技術(shù)的熟悉程度。團(tuán)隊(duì)成員對技術(shù)越熟悉,培訓(xùn)成本越小,開發(fā)效率越高。在一個都是 ?Java 工程師的團(tuán)隊(duì)提出使用 C++ 簡直不講碼德!

          2. 團(tuán)隊(duì)對技術(shù)的掌控度。團(tuán)隊(duì)內(nèi)至少要有一個人非常了解該技術(shù),懂得最佳實(shí)踐,能夠指導(dǎo)團(tuán)隊(duì)正確運(yùn)用技術(shù),并解決疑難問題。

          3. 技術(shù)的主流程度和生態(tài)。技術(shù)越主流,文檔、實(shí)踐和解決方案就越多,而使用冷門技術(shù)可能出現(xiàn)無法解決的問題,整段垮掉!

          4. 技術(shù)和業(yè)務(wù)的貼合程度。技術(shù)是為業(yè)務(wù)服務(wù)的,因此必須結(jié)合具體的業(yè)務(wù)場景去選用技術(shù)。比如在只有幾個用戶使用的小網(wǎng)站中運(yùn)用微服務(wù)框架是一個愚蠢的選擇。

          2. 開發(fā)工具

          工欲善其事,必先利其器。
          在開發(fā)前,選擇一款優(yōu)秀的開發(fā)工具,并且學(xué)習(xí)如何高效地使用它吧!很多開發(fā)工具都自帶了代碼檢查、代碼格式化等功能,還有很多快捷鍵,這將大大提升我們的開發(fā)效率和開發(fā)體驗(yàn)。
          目前比較主流的開發(fā)工具有 JetBrains 全家桶VscodeSublime 等等,不必沉迷于某一款開發(fā)工具無法自拔,可以針對項(xiàng)目的類別和體積進(jìn)行選擇。
          除了本地的開發(fā)工具外,還可以使用云端的開發(fā)工具,比如 Cloud Studio,無需下載任何軟件,直接在瀏覽器中進(jìn)行開發(fā)和調(diào)試、實(shí)時瀏覽。對于小型項(xiàng)目的開發(fā)也許是一個不錯的選擇。
          Cloud Studio 在線開發(fā)

          3. 代碼規(guī)范

          在開發(fā)前,為團(tuán)隊(duì)或項(xiàng)目制定一套代碼規(guī)范太有必要了。
          好的代碼規(guī)范能夠幫助團(tuán)隊(duì)成員閱讀理解他人的代碼,提升協(xié)作開發(fā)效率和團(tuán)隊(duì)氛圍。
          試想,如果你習(xí)慣代碼縮進(jìn)兩格,而其他同學(xué)都縮進(jìn)四格,會不會感到很懊惱?

          4. 腳手架

          在開發(fā)一個新項(xiàng)目前,通常由架構(gòu)師或熟悉技術(shù)框架的同學(xué)來搭建項(xiàng)目的基本結(jié)構(gòu)、編寫 Demo,其他同學(xué)只需要在此基礎(chǔ)上遵循規(guī)范進(jìn)行開發(fā)(復(fù)制粘貼)就好。
          如今,項(xiàng)目結(jié)構(gòu)越來越復(fù)雜,我們不可能手動創(chuàng)建一個又一個文件。
          懶人推動世界,很多框架自帶了腳手架,能夠讓我們通過輸入一兩行命令,快速生成項(xiàng)目的基本結(jié)構(gòu)、默認(rèn)配置文件、甚至是可直接運(yùn)行的 Demo,避免了不必要的重復(fù)工作,大大提升開發(fā)效率!
          比如前端框架 Vue 的腳手架 Vue Cli 和前端框架 React 的腳手架 Create React App
          腳手架演示

          5. 低代碼構(gòu)建

          低代碼是指少寫代碼或不寫代碼。通過對應(yīng)用場景的極致抽象和模板化,將寫代碼的工作交給機(jī)器來自動生成。
          就像現(xiàn)在網(wǎng)上很多 App 和網(wǎng)站制作平臺,只需要在界面上選擇元素、點(diǎn)點(diǎn)拖拖,就能夠自動創(chuàng)建出應(yīng)用,根本不需要寫任何代碼,哪怕是不會編程的人也能輕松使用。
          低代碼構(gòu)建在企業(yè)中非常流行,是提升團(tuán)隊(duì)開發(fā)效率的神器,幾乎每個大公司都有自己的低代碼構(gòu)建平臺。業(yè)界比較知名的低代碼平臺有 Google 的 App Maker 和微軟的 Power Apps 等。
          Power Apps 畫布的圖像

          6. 內(nèi)部依賴倉庫

          在開發(fā)中,我們經(jīng)常需要下載大量的依賴包,還要將開發(fā)好的依賴包進(jìn)行上傳。
          但是,通常軟件依賴源都是國外的服務(wù)器,比如 Mavennpm 源,從國內(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àng)目!
          現(xiàn)在想想,效率實(shí)在是太低了。
          如今,本地開發(fā)熱更新是程序員開發(fā)提效必備的神器,啟動一個開發(fā)服務(wù)器,讓它自動監(jiān)聽代碼文件。當(dāng)代碼更新時,運(yùn)行中的項(xiàng)目也會自動更新,從而省去了無止盡的刷新和重啟。
          在前端,比較知名的熱更新工具有基于 HMR 技術(shù)(模塊熱替換 hot module replacement)的 Webpack Dev Server;在 Java 后端有 熱部署插件 JRebel
          JRebel 簡化流程

          8. Serverless

          Serverless 是最近幾年逐漸流行的概念,翻譯過來就是 “無服務(wù)器”。
          以前,我們要搭建網(wǎng)站的后臺,首先要買服務(wù)器,然后將一個大而全的項(xiàng)目包部署到服務(wù)器上,整體對外提供服務(wù),所有的系統(tǒng)資源和進(jìn)程都需要由我們自己來管理。
          單體架構(gòu)
          隨著云計(jì)算時代虛擬化、容器、微服務(wù)等技術(shù)的發(fā)展,人們將大項(xiàng)目的通用部分抽象成一個個細(xì)小的服務(wù),每個服務(wù)只提供一個或幾個功能,獨(dú)立部署在比服務(wù)器更輕量且無狀態(tài)的容器中,共同對外提供服務(wù),組成一個完整的系統(tǒng)。
          Serverless 架構(gòu)
          而 Serverless 不是指完全不需要服務(wù)器,而是讓開發(fā)者感受不到服務(wù)器的存在。
          什么意思呢?其實(shí)就是把對服務(wù)器的需求外包給廠商,我們只管寫代碼,讓他們負(fù)責(zé)部署和運(yùn)維。我們花錢,他們辦事!
          目前國內(nèi)有很多 Serverless 服務(wù)提供商,如阿里云、騰訊云、LeanCloud 等,使用這些 Serverless 服務(wù)后,我們無需再關(guān)心服務(wù)器的運(yùn)行,只需要專心寫業(yè)務(wù)邏輯就可以了,能夠大大提升開發(fā)和維護(hù)效率,省時省心。

          9. 代碼托管

          很多年前,我們的代碼幾乎都存在自己的電腦里,通過 U 盤或者網(wǎng)絡(luò)傳輸代碼文件來實(shí)現(xiàn)合作開發(fā)。
          而如今,代碼托管平臺已經(jīng)成為團(tuán)隊(duì)合作開發(fā)的靈魂。
          相信很多小伙伴都接觸過 GitHub,世界上最大的代碼開源托管平臺。每個人都可以把自己的代碼發(fā)布到 GitHub 上,作為一個代碼倉庫,隨時隨地遠(yuǎn)程管理。還可以搜索和瀏覽其他人發(fā)布的代碼倉庫,以此實(shí)現(xiàn)高效地合作開發(fā),促進(jìn)項(xiàng)目的完善。
          為了保證代碼的安全保密性,一般在公司或團(tuán)隊(duì)內(nèi)部都會自己搭建一個代碼托管平臺,比較知名的有 GitLab,可以針對不同的項(xiàng)目為成員分配權(quán)限,更好地管理團(tuán)隊(duì)的代碼。
          GitLab

          10. 本地代碼檢查

          在代碼提交之前,首先應(yīng)該在本地進(jìn)行代碼檢查,及時發(fā)現(xiàn)一些低級的語法錯誤,防止被團(tuán)隊(duì)的其他同學(xué)嘲笑。
          大多數(shù)集成開發(fā)工具自帶了代碼檢查功能,邊敲代碼邊檢查,非常爽。
          此外,我們還可以配置 Git Hooks,在代碼提交前自動執(zhí)行代碼檢查,npm 項(xiàng)目可以通過 Husky 插件實(shí)現(xiàn),還能配合 ESLint 實(shí)現(xiàn)代碼自動修復(fù)。
          ESLint

          11. 代碼提交規(guī)范

          團(tuán)隊(duì)越大,規(guī)范就越重要。
          只有代碼編寫規(guī)范還不夠,還要在團(tuán)隊(duì)內(nèi)制定一套代碼提交規(guī)范,通常是約定式提交規(guī)范,即讓成員在提交代碼時填寫指定格式的 Commit Message,比如下面的格式:
          <提交類型>[可選的作用域]:?<描述>

          [可選的正文]

          [可選的腳注]
          指定代碼提交規(guī)范不僅能夠幫助成員快速理解每次提交的改動點(diǎn),提升代碼審查效率;更大的作用是讓一些自動化工具理解提交信息以進(jìn)行一些有意義的工作,比如生成 Change Log(代碼改變?nèi)罩荆?/section>
          可以參考一些大公司的代碼提交規(guī)范,并通過 commitlintcommitizen 等插件實(shí)現(xiàn)自動修復(fù)不規(guī)范代碼。
          commitlint 代碼提交規(guī)范檢查

          12. 代碼審查

          在團(tuán)隊(duì)開發(fā)中,寫代碼可不能像自己練習(xí)編程時一樣肆無忌憚。
          在合作開發(fā)時,可以為每位開發(fā)者分配一個分支,在自己的分支編寫和提交代碼,也可以按照需求來建立分支。確認(rèn)開發(fā)測試完成后,發(fā)起一個 MR(Merge Request 合并請求),將小分支的代碼合并到公共的主線分支即可。
          分支合并
          主線分支的代碼通常是能夠直接發(fā)布上線、穩(wěn)定運(yùn)行的。因此,為了保證項(xiàng)目代碼的質(zhì)量,每次合并代碼到主線分支前,必須要進(jìn)行代碼審查(CR,即 Code Review),就是讓同事或上級閱讀和審批你的代碼,覺得沒有問題后,才能夠執(zhí)行代碼合并。
          通常,代碼變更越大、項(xiàng)目越重要,代碼審查所需人數(shù)越多,越能夠發(fā)現(xiàn)一些個人無法發(fā)現(xiàn)的風(fēng)險和問題。因此,代碼審查是大公司研發(fā)流程的關(guān)鍵一環(huán)和重要防線。雖然不能直接提升研發(fā)效能,但是能有效避免線上事故的發(fā)生,減少程序員不必要的工作量和心理壓力。
          代碼審查

          13. CI/CD 流水線

          CI/CD 即持續(xù)集成/持續(xù)交付。
          在敏捷開發(fā)時代,哪怕是一個小團(tuán)隊(duì),每天也會有幾次的代碼提交,如果長期不合并,可能就會出現(xiàn)代碼沖突。
          代碼沖突
          因此,持續(xù)集成的意義在于,通過每天定時將各個開發(fā)人員的代碼合并到同一個代碼倉庫中,以盡早發(fā)現(xiàn)代碼沖突和錯誤,幫助團(tuán)隊(duì)更緊密地開發(fā)協(xié)作。
          當(dāng)我們開發(fā)完項(xiàng)目,想要發(fā)布上線時,要先登錄服務(wù)器,然后在服務(wù)器上拉取代碼倉庫中的項(xiàng)目代碼,然后執(zhí)行打包命令,最后通過腳本運(yùn)行項(xiàng)目。
          如果只需要在一臺服務(wù)器上部署,其實(shí)還不算太麻煩,但是如果要在幾十臺機(jī)器上部署呢?要一臺一臺地登錄服務(wù)器然后重復(fù)著上述工作么?
          懶人推動世界,這時我們就需要持續(xù)交付,將構(gòu)建部署的每個步驟由人工轉(zhuǎn)變?yōu)闄C(jī)器自動操作,原理類似編寫了一個自動化構(gòu)建腳本,在代碼合并到倉庫時觸發(fā)腳本的執(zhí)行,在各機(jī)器上自動拉取新代碼并打包發(fā)布。
          目前主流的 CI/CD 平臺是 Jenkins 老爺爺,可以配合代碼托管平臺 GitLab 等實(shí)現(xiàn)完全自動化打包、構(gòu)建、發(fā)布,再也不用開發(fā)人員一臺臺登錄機(jī)器去執(zhí)行重復(fù)的命令了,不僅大大提升了團(tuán)隊(duì)研發(fā)效率,還保證了發(fā)布流程的規(guī)范和安全性。
          Jenkins 爺爺
          畢竟總有些內(nèi)鬼程序員借著發(fā)布的名義偷偷登錄服務(wù)器執(zhí)行 rm -rf *

          14. 監(jiān)控告警

          為了在第一時間發(fā)現(xiàn)線上項(xiàng)目存在的問題,我們通常會在代碼中添加告警邏輯,當(dāng)某段代碼執(zhí)行異常時通過郵件、短信、微信、電話等方式聯(lián)系項(xiàng)目負(fù)責(zé)人。
          但有時,我們可能會針對某些指標(biāo)在一段時間內(nèi)的統(tǒng)計(jì)值設(shè)置告警。比如當(dāng)機(jī)器內(nèi)存占用超過 80% 且持續(xù) 5 分鐘才告警。這些告警邏輯和業(yè)務(wù)本身關(guān)系不大,如果都寫死在代碼里,不僅耗時,而且難以維護(hù)。
          可以在團(tuán)隊(duì)內(nèi)搭建監(jiān)控告警平臺,通過在機(jī)器上部署代理或者在代碼中使用上報(bào) SDK 等方式來讓告警平臺統(tǒng)一收集項(xiàng)目運(yùn)行時的各個指標(biāo),比如機(jī)器負(fù)載、網(wǎng)絡(luò)負(fù)載、異常信息等。
          監(jiān)控告警平臺提供配置界面,可以靈活地配置告警規(guī)則,比如 1 分鐘內(nèi)收集到 2 個報(bào)錯就發(fā)郵件告警、收集到 5 個報(bào)錯就發(fā)短信等。
          完善的監(jiān)控告警平臺還能夠?qū)v史告警信息進(jìn)行管理和詳情查看,以及可視化展示各指標(biāo)圖表等。不僅減少了我們開發(fā)時的工作量,也能幫助我們更快地分析和排錯。
          Zabbix 是比較知名的開源監(jiān)控解決方案,幾乎能對任何 IT 基礎(chǔ)架構(gòu)、服務(wù)、應(yīng)用程序和資源進(jìn)行監(jiān)控和告警,全面且專業(yè)。
          Zabbix 監(jiān)控

          15. 日志平臺

          通常,已上線的項(xiàng)目出現(xiàn)問題時,我們會通過查看日志文件來定位和排查問題。
          如果項(xiàng)目比較小,僅僅在單臺服務(wù)器上部署,那么只需要登錄這臺服務(wù)器,輸入命令來查看日志即可。
          但團(tuán)隊(duì)的項(xiàng)目量級較大時,通常會部署到多臺機(jī)器上,而且每臺機(jī)器上的日志量都非常大,以人工的方式一臺臺登錄服務(wù)器,然后在數(shù)以萬計(jì)的日志中去找到自己想要的關(guān)鍵信息,是非常低效又惡心的!
          雜亂的日志
          日志不講武德,可以搭建一個統(tǒng)一的日志平臺來治治它們。將各臺機(jī)器上分散的日志收集到日志平臺,然后通過可視化的界面去集中管理和搜索日志,大大提升了查閱日志的效率和體驗(yàn)。
          目前比較主流的技術(shù)是 Elastic StackElasticsearch + Logstash + Kibana + Filebeat) ,使用它可以搭建一套企業(yè)級日志平臺,輕松管理上百萬甚至是上億的日志數(shù)據(jù)。
          Kibana 日志可視化

          16. 接口文檔平臺

          現(xiàn)在很多的項(xiàng)目都采用前后端分離的方式進(jìn)行開發(fā),前端同學(xué)寫界面,后端同學(xué)提供接口。如果沒有一個規(guī)范的接口文檔,聲明每個接口的協(xié)議、請求參數(shù)、響應(yīng)參數(shù)等,很容易導(dǎo)致前端請求錯誤。
          傳統(tǒng)的方式是由后端同學(xué)手動編寫接口文檔,接口改動時,文檔也要改動,非常低效且不利維護(hù)。
          其實(shí),我們可以將接口文檔平臺化,通過 Swagger 等工具自動生成精美的接口文檔網(wǎng)站,開發(fā)者還可以在網(wǎng)站上直接測試各個請求,告別了手動編寫文檔的低效繁瑣,提升了開發(fā)和協(xié)作效率。
          Swagger 接口文檔

          17. 接口測試平臺

          測試是對研發(fā)質(zhì)量的保障。
          我們寫完代碼后,不僅要在本地測試,還要在測試環(huán)境、預(yù)發(fā)布環(huán)境、線上環(huán)境都進(jìn)行測試驗(yàn)證。項(xiàng)目越大,對測試的要求越高,也就越麻煩。
          通常我們會使用 CurlPostman 等工具進(jìn)行接口測試,簡單易用。但是有些時候,本地網(wǎng)絡(luò)(公網(wǎng))和測試環(huán)境(內(nèi)網(wǎng))的網(wǎng)絡(luò)不互通怎么辦?
          可以在團(tuán)隊(duì)內(nèi)部搭建接口測試平臺。提供一個 web 界面,無需下載任何軟件,就可以輕松地創(chuàng)建各種接口測試,編寫各種測試用例,創(chuàng)建測試計(jì)劃。最棒的是還能切換不同的測試環(huán)境,以及多人共享測試等等。大大提高了測試效率和質(zhì)量。

          18. 即時協(xié)作

          天下武功,無快不破。為追求更高的協(xié)作效率,可以使用一些即時協(xié)作工具。
          比如在協(xié)作開發(fā)同一個項(xiàng)目時,可以使用開發(fā)工具 VscodeVS Live Share 插件,支持多人連線,團(tuán)隊(duì)成員可以同時對文件進(jìn)行編輯,甚至還能看到對方的光標(biāo)!
          Live Sharing with VS Code
          在多人編寫同一個文檔或表格時,可以使用騰訊文檔,實(shí)時看到其他成員的光標(biāo)位置和對文檔的改動,尤其是在開會時,這個功能將非常有用。
          騰訊文檔
          使用即時協(xié)作平臺不僅可以提升效率,還能以最快的速度發(fā)現(xiàn)沖突,發(fā)現(xiàn)有人正在寫爛代碼可以直接打字提示他。

          19. 團(tuán)隊(duì)知識庫

          團(tuán)隊(duì)在開發(fā)項(xiàng)目的過程中,肯定會產(chǎn)生很多有用的知識,比如技術(shù)選型過程、線上事故的分析處理過程、技術(shù)文檔、產(chǎn)品文檔、業(yè)務(wù)介紹等。這些知識是團(tuán)隊(duì)成員共同積累的財(cái)富,日后可能要給其他同學(xué)閱讀學(xué)習(xí),因此必須妥善保存。
          以前的做法是,大家把想共享的文件傳到一個公共的網(wǎng)盤中,需要時下載到自己的電腦上。當(dāng)網(wǎng)盤的文件更新時,還要再重復(fù)下載,非常地低效。
          現(xiàn)在的項(xiàng)目團(tuán)隊(duì),一般都有自己的團(tuán)隊(duì)知識庫,通常是云端網(wǎng)站的形式,所有的成員可以在知識庫中上傳想要保存和分享的文檔,也可以直接在知識庫中編寫文檔。想要學(xué)習(xí)知識的同學(xué)直接登錄知識庫網(wǎng)站,搜索文檔即可,還能夠?qū)?yōu)秀的文檔進(jìn)行收藏。
          團(tuán)隊(duì)知識庫不僅能夠更好地維護(hù)和沉淀團(tuán)隊(duì)的知識,還能提升大家編寫和閱讀文檔的效率,更好地進(jìn)行知識協(xié)作共享。
          比較不錯的在線團(tuán)隊(duì)知識庫有阿里語雀、騰訊樂享、Wiki、Confluence 等。
          語雀知識庫

          20. 進(jìn)程監(jiān)控

          有時,我們線上運(yùn)行的項(xiàng)目進(jìn)程可能因?yàn)槟承┮馔舛顺觯覜]有被任何人及時發(fā)現(xiàn),這可能會對團(tuán)隊(duì)造成巨大的損失。
          為了保證線上項(xiàng)目的高可用,可以開啟進(jìn)程監(jiān)控,當(dāng)項(xiàng)目進(jìn)程退出時,自動重啟該進(jìn)程并且向負(fù)責(zé)人發(fā)送告警,一定程度上減少了事故的影響,也省去了手動重啟進(jìn)程的操作。
          可以自己編寫進(jìn)程監(jiān)控腳本,也可以使用一些現(xiàn)成的監(jiān)控程序,比如 SupervisorMonit 等。
          Monit 監(jiān)控

          21. 前端監(jiān)控統(tǒng)計(jì)

          前端監(jiān)控主要包括對頁面的性能監(jiān)控、錯誤監(jiān)控和用戶行為監(jiān)控。對于 C 端項(xiàng)目而言,前端監(jiān)控非常重要。通過性能監(jiān)控,可以分析頁面性能的不足,優(yōu)化頁面,提升用戶體驗(yàn)。通過錯誤監(jiān)控,可以在用戶進(jìn)行某些誤操作時第一時間通知到項(xiàng)目負(fù)責(zé)人,并進(jìn)行相應(yīng)的處理。通過行為監(jiān)控,可以獲取 UV、PV、IP、點(diǎn)擊流等等,從而分析用戶的使用習(xí)慣,改進(jìn)產(chǎn)品。
          如果沒有前端監(jiān)控平臺,開發(fā)者要自己收集各用戶行為指標(biāo),且只能通過不斷地測試來分析頁面性能的不足,會產(chǎn)生很多額外的工作量。
          有很多現(xiàn)成的前端監(jiān)控平臺,比如百度統(tǒng)計(jì)、專注錯誤監(jiān)控的 Sentry、騰訊的 Aegis 等,直接申請賬號接入即可,省去了自己搭建的麻煩。
          百度統(tǒng)計(jì)

          22. 任務(wù)調(diào)度平臺

          在日常開發(fā)中,少不了執(zhí)行定時任務(wù),比如每天檢測數(shù)據(jù)是否正常、定時發(fā)送郵件、同步數(shù)據(jù)等。如果把這些任務(wù)都寫死在代碼中去執(zhí)行,即使用一些定時任務(wù)框架,當(dāng)任務(wù)多了,也會變得難以管理。而且無法控制任務(wù)的執(zhí)行狀態(tài),還有可能導(dǎo)致一些單次任務(wù)的重復(fù)執(zhí)行,造成風(fēng)險!
          因此,需要統(tǒng)一的任務(wù)調(diào)度平臺來管理任務(wù)。可以通過平臺界面實(shí)時查看各任務(wù)的執(zhí)行情況,還能夠靈活地控制任務(wù)的啟停、執(zhí)行參數(shù)、超時時間等。甚至可以將任務(wù)調(diào)度到多臺機(jī)器同時執(zhí)行。降低風(fēng)險的同時提升了管理定時任務(wù)的效率。
          有一些優(yōu)秀的開源任務(wù)調(diào)度平臺如 Elastic JobXXL-JOB,可以直接搭建使用。
          XXL 任務(wù)調(diào)度平臺

          23. 配置中心

          任何項(xiàng)目都離不開配置,比如數(shù)據(jù)庫連接密碼、第三方服務(wù)調(diào)用地址等。
          如果把配置都寫死在代碼中,或者是項(xiàng)目包里的配置文件中,當(dāng)配置需要修改時,我們就不得不修改項(xiàng)目文件,提交代碼,重新打包,再發(fā)布上線,非常麻煩。
          而且有些時候,由于多個項(xiàng)目使用了相同的配置,在改動一行配置時,可能要去修改多個項(xiàng)目,不僅麻煩,而且存在漏改的風(fēng)險。
          因此,我們需要一個配置中心來集中管理那些經(jīng)常變化的、同時被多個項(xiàng)目使用的配置。
          比較好用的配置中心有攜程的 Apollo、阿里的 Nacos 等,可以直接在界面上創(chuàng)建和發(fā)布配置,還能對配置進(jìn)行版本控制,靈活地升級和回退。使用配置中心能夠提升配置管理的效率,同時避免重復(fù)地改動項(xiàng)目的配置文件。
          攜程 Apollo 配置中心

          24. 鏈路追蹤

          假設(shè)我們的項(xiàng)目中有一個功能依賴多個第三方接口,該功能的平均執(zhí)行時間是 50ms。
          /**
          ?*?獲取用戶詳情(依賴三個接口)
          ?*/

          function?getUserDetail()?{
          ??let?user?=?getUserById();?//?得到用戶基本信息?10ms?
          ??user.account?=?getUserAccount();?//?得到賬戶信息?20ms
          ??user.idcard?=?getUserIdCard();?//?得到用戶身份證信息?20ms
          ??return?user;
          }
          結(jié)果有一天,這個功能執(zhí)行超過了 10 分鐘!那怎么排查出是哪個第三方接口出現(xiàn)了問題呢?
          當(dāng)出現(xiàn)復(fù)雜的調(diào)用關(guān)系時,我們可以使用鏈路追蹤系統(tǒng),通過給每個請求環(huán)節(jié)綁定唯一 id 并上報(bào)時間的方式串聯(lián)起整條調(diào)用鏈路。在鏈路追蹤系統(tǒng)提供的界面可以輕松地查看整個請求的調(diào)用過程,能夠幫助我們更快地定位請求中的問題,優(yōu)化接口的性能。
          SkyWalking 鏈路追蹤系統(tǒng)

          25. 容器管理平臺

          以前,團(tuán)隊(duì)的項(xiàng)目都是直接部署在服務(wù)器上,簡單粗暴。但是隨著時間的推移,項(xiàng)目會越來越大,最終成長為一個巨石應(yīng)用。
          滾雪球
          隨著云計(jì)算、容器、微服務(wù)等技術(shù)的發(fā)展,對于一些大型的巨石項(xiàng)目,我們可以將其拆分為獨(dú)立的微服務(wù),部署在一個個相互隔離的容器中。容器就像一位少女,輕量、優(yōu)雅而迅速。
          一個項(xiàng)目可能需要同時部署多個容器,我們需要對這些容器進(jìn)行管理和資源的分配。而容器比服務(wù)器的粒度更細(xì),數(shù)量可能是機(jī)器數(shù)的幾倍,手動去管理他們是很難的。
          Docker 容器
          因此我們需要容器管理平臺,統(tǒng)一管理容器,自動分配資源,并根據(jù)容器的資源占用情況進(jìn)行彈性伸縮,極大地提升運(yùn)維效率。
          K8S(Kubernetes)可以說是最知名的容器管理平臺了,很多大公司也都提供容器管理平臺的云服務(wù),可以直接接入。
          K8S

          26. 中臺

          問個問題,如果讓你連續(xù)開發(fā) 5 個電商系統(tǒng),當(dāng)你開發(fā)第 6 個電商系統(tǒng)的時候,你會怎么做呢?
          肯定要將前 5 個電商系統(tǒng)中能用上的代碼粘貼過來對吧!
          如果你意識到重復(fù)開發(fā)的麻煩,你就知道有一個中臺會多香了,說是提升百倍效率一點(diǎn)也不夸張!
          中臺的概念近幾年來在國內(nèi)十分火熱,可以簡單地理解為被很多系統(tǒng)共用的中間件的集合
          中臺又分為業(yè)務(wù)中臺、技術(shù)中臺、數(shù)據(jù)中臺、組織中臺等。就拿業(yè)務(wù)中臺來說,就是抽象傳統(tǒng)的業(yè)務(wù)場景,把后臺的火藥等資源整合成前臺打仗需要的炮彈,隨取隨用。
          回到上述問題,我們是不是可以將前 5 個電商系統(tǒng)中用到的技術(shù)和工具,抽象成一個中臺呢?
          中臺出現(xiàn)之前,由于團(tuán)隊(duì)的分散,我們總是在重復(fù)建設(shè)一個又一個的輪子。而如今,幾乎所有的互聯(lián)網(wǎng)巨頭都在建設(shè)自己的中臺,比如支付中臺、直播中臺、電商中臺等。如果要開發(fā)一個新的系統(tǒng),我們根本不用從零開始,直接使用中臺資源就能很方便地完成,很快啊!

          27. 腳本管理

          在開發(fā)中,我們經(jīng)常需要編寫一些腳本(可以將腳本理解為簡單的程序),來幫助我們更快捷地完成某項(xiàng)任務(wù)。
          比如我們要去重啟一個進(jìn)程,需要執(zhí)行關(guān)閉進(jìn)程、清理文件、啟動進(jìn)程三個步驟,可能要輸入很多行命令才能完成。
          do?stop
          do?clear
          do?start
          不妨直接將三個步驟的命令塞到一個 shell 腳本文件里,再次重啟進(jìn)程時,只需要一行命令就行了,很快啊!
          ./restart.sh
          但如果我們想在其他的系統(tǒng)上多次使用這個腳本,怎么辦呢?是把編寫好的腳本放在自己的電腦上,還是直接扔到服務(wù)器上呢?
          更好的方式是使用腳本管理平臺,團(tuán)隊(duì)成員可以將自己編寫的各種語言的腳本都發(fā)布到該平臺上,想在其他系統(tǒng)或服務(wù)器中使用該腳本時,直接請求腳本的在線鏈接,腳本將自動下載、執(zhí)行和清理。
          腳本管理平臺尤其適合運(yùn)維同學(xué)使用,某種程度上也是通過自動化提升了效率。

          28. 可視化數(shù)據(jù)管理

          團(tuán)隊(duì)開發(fā)肯定離不開數(shù)據(jù)庫,并發(fā)量高一點(diǎn)還需要使用緩存、消息隊(duì)列等中間件。
          無論是本地開發(fā),還是在測試、線上環(huán)境驗(yàn)證,我們都經(jīng)常需要查看數(shù)據(jù)庫或者緩存里的數(shù)據(jù)是否正確。最直接了當(dāng)?shù)姆椒ň褪谴蜷_小黑框,用官方提供的命令行連接數(shù)據(jù)庫,然后輸入查詢命令去查看,這也是很多高級工程師現(xiàn)在還在堅(jiān)持的做法,因?yàn)橛?B 格。
          但是,如果用了分庫分表技術(shù),一份完整的數(shù)據(jù)被分散到多個數(shù)據(jù)庫和數(shù)據(jù)表中,使用命令行來查看就比較麻煩。因此,我們需要可視化的數(shù)據(jù)管理平臺,比較常用的是本地軟件 NavicatJetBrains DataGrip 等。
          為了更方便地管理數(shù)據(jù),團(tuán)隊(duì)內(nèi)部還可以搭建在線的可視化數(shù)據(jù)管理平臺,比如面向 MySQL 數(shù)據(jù)庫的 phpMyAdmin,開發(fā)者無需在本地安裝任何軟件,直接打開網(wǎng)站,輸入密碼,就能夠?yàn)g覽和操控?cái)?shù)據(jù)啦!
          phpMyAdmin 數(shù)據(jù)庫管理

          29. 項(xiàng)目管理

          提到項(xiàng)目管理,大家可能覺得和技術(shù)研發(fā)同學(xué)沒什么關(guān)系,其實(shí)不然。
          通過項(xiàng)目管理平臺,我們能夠看到每個需求的優(yōu)先級和排期,可以合理規(guī)劃自己的研發(fā)安排,掌控進(jìn)度。有重要的信息,也可以貼到需求詳情下,相對正式,能夠及時同步到所有需求的參與者,規(guī)避一些風(fēng)險。
          而如果沒有項(xiàng)目管理平臺,對需求進(jìn)度沒有一個好的把握,說不定摸魚就摸過頭了。
          有很多開箱即用的項(xiàng)目管理平臺,比如 TAPDJira

          30. 企業(yè)通訊

          通訊軟件是團(tuán)隊(duì)溝通協(xié)作、高效辦公的靈魂,比如騰訊的企業(yè)微信、阿里的釘釘、字節(jié)跳動的飛書。
          這些企業(yè)通訊軟件早就不只是支持團(tuán)隊(duì)即時溝通的工具了,而是大而全的企業(yè)辦公門戶
          像騰訊的企業(yè)微信,集成了文檔、待辦、會議、通訊錄、工作臺、云盤、電話等辦公必備的工具,成員可以通過軟件快速地找到并使用這些功能,大大提高了辦公效率。還可以在通訊軟件中設(shè)置機(jī)器人,實(shí)現(xiàn)業(yè)務(wù)的自動告警。

          以上就是魚皮分享給大家的錦囊啦。
          其實(shí),大廠中還有很多提升研發(fā)效能的技術(shù),比如流量回放、壓測平臺、試驗(yàn)系統(tǒng)、故障演練系統(tǒng)等,這里就不一一介紹了。
          此外,每個團(tuán)隊(duì)負(fù)責(zé)的業(yè)務(wù)不同、情況不同,也都會有提升自己研發(fā)效能的獨(dú)門秘技,要根據(jù)實(shí)際的場景去選用技術(shù),否則可能適得其反。
          希望大家能利用好現(xiàn)有的技術(shù)、發(fā)掘新的技術(shù),不斷提升研發(fā)效能,感受技術(shù)帶來的美好。

          往期推薦


          實(shí)戰(zhàn) | 嘗鮮 Svelte 前端框架,開發(fā)讀書筆記


          實(shí)戰(zhàn) | 一不小心創(chuàng)造了新的編程語言!


          編程百曉生 | 世上竟有如此優(yōu)雅的代碼!


          小記 | 從 0 到 1,看我玩弄千萬日志于股掌


          小記 | 再次登上學(xué)生時代的個人博客,淚目


          覺得不錯,長按關(guān)注叭

          技術(shù)無限,抽獎也不停哦
          后臺回復(fù)“抽獎”即可

          點(diǎn)小花花,讓他們知道你?“在看”?

          瀏覽 45
          點(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>
                  中国一级毛片 | 嘛豆三级片电影 | 91cn.xx | 久久夜精品视频 | 日韩怕怕 |