滴滴NodeX生態 ,讓開發更高效

桔妹導讀:滴滴NodeX是由滴滴普惠、金融、車服三個泛前端團隊合力共建,致力於打造滴滴集團級的專業、高效、穩定的Node研發生態。幫助開發者降低服務搭建門檻,提升壁壘和快速閉環賦能業務,目前生態已覆蓋滴滴大部分業務。



0. 

前言

能用 JavaScript 編寫的程序,都終將會以 JavaScript 編寫。”這句話曾經聽起來十分高傲,但是隨著 Node.js 的發展,我們漸漸地明白到這句話的遠見性──JavaScript 真的越來越強大了。


Node.js 是一個非常新興的開發工具,雖然它誕生自 2009 年,但是它確實有史以來發展最快的開發工具,沒有之一。在這短短的幾年間,我們看到了 Node.js 從當初的一無所有到如今的飛速發展,說明這背後的需求場景是巨大的。



1. 

背景

早在前幾年,滴滴前端技術團隊就在探索 Node.js 的實踐和落地,積極將傳統的前端推向大前端領域,並在生產環境中考驗自身以及 Node.js 的素質。無論是哪個團隊,Node.js 在團隊中都扮演了十分重要的角色,各個團隊也結合滴滴內部的場景各自沉澱了大量組件和相關生態。


爲了讓我們歷史沉澱的經驗能夠在滴滴內鑄就更大的價值,並且能夠輸出給外部社區,我們成立了NodeX 跨團隊FT,致力於打造滴滴集團級的專業、高效、穩定的Node研發體系。



2. 

什麼是NodeX

有些同學可能還不知道NodeX生態到底是什麼,接下來就爲大家介紹下我們的生態體系,若有疑問或想交流,歡迎評論留言。


一張圖瞭解NodeX



上面的圖簡要的概括了NodeX做的事情和願景,我們在生態內提供組件框架、研發支撐平臺以及通用服務能力,同時也有輔助開發的滴滴Node指南,貫穿整個開發週期。目標就是爲了讓我們的開發者能夠以更低門檻、更小成本、更高效率的開發Node服務,最終提升壁壘和閉環能力,快速高效的爲業務賦能。就像下面這張圖一樣,開發者更多的只需要關心業務代碼開發。



瞭解完宏觀層面的思考之後還是覺得對NodeX瞭解不夠清晰怎麼辦?那就看看下面這個架構圖吧,圖裏包含了各個核心的能力點和組成部分。


全局架構圖



從上面的架構圖可以看出來我們主要由幾塊組成,分別是上面提到的組件框架、研發支撐平臺、通用服務以及貫穿整個研發週期的文檔體系,各個模塊都是相輔相成,下面我們就將各個核心模塊一一給大家介紹一下。

【 文章推薦:車載硬件的感知能力是有侷限的,Lidar的可靠感知範圍不過百米,貨車等大型交通參與者也會造成視角遮擋等問題…回覆「自動駕駛」閱讀】



3. 
組件

NodeX Components提供常用的 Node.js 基礎組件模塊,同時這些常用組件和滴滴各個服務進行打通,減少了很多不必要的重複底層聯調對接工作。優質的組件往往需要經過大量的歷史經驗沉澱,以及流量的考驗。


NodeX Component中的組件都在經歷過真實的生產環境的鞭策,在歷史的翻車和事故中沉澱了不少經驗。大部分組件的解決方案都在線上跑了兩年、甚至三年左右,持續不斷的踩坑和維護,才錘鍊出目前的穩定,同時我們也會持續優化迭代現有組件性能穩定性和拓展新的能力。目前已覆蓋絕大部分場景約20餘種組件,詳情可以查看下面這張圖:



整個組件工程是通過lerna來統一管理各個組件的開發、單測、發佈等生命週期,同時提交代碼也會有嚴格的規範,這塊是通過commitizen來管理,代碼格式則是通過Eslint+Prettier校驗,感興趣的可以瞭解下相關能力。




4. 
框架

在組件之上,得益於egg靈活的lorder機制,我們基於它封裝了一套適合滴滴生態的企業級框架。框架集成了常用的開發插件及中間件,打通了滴滴內基礎設施、Node基礎設施,並支持了服務滴滴部署環境的個性化配置的開發的應用框架。具備易用,快速部署,健壯,生態豐富等特點,是構建企業級應用的不二之選。


與之配套的則是我們提供的sls-cli腳手架,可以一鍵初始化標準工程,工程內提供了符合滴滴規範的編譯構建腳本,無需改任何代碼即可部署線下線上環境,同時集成了基礎代碼規範配置。開發者可以把更多重心放在業務開發上,而不需要關心更多基礎和底層的問題,如果有需求也可以對基礎配置和能力進行改造,大大降低了搭建服務門檻。具體架構可以詳見下圖:




5. 
研發支撐

除了提供基礎組件框架幫助開發者快速搭建服務外,我們還提供了一系列研發支撐的工具和平臺,腳手架上面已經有講到到,下面只介紹兩個比較常用的。


性能分析平臺


JS Runtime 對於絕大部分的開發者來說是處於黑盒狀態的,開發者無法感知其運行狀態,出現一些性能、內存問題時也沒有很好的工具鏈進行更深入的支持。所以我們搭建性能分析平臺正是爲了解決這個問題,幫助大家更方便的解決Node性能問題、提升服務性能瓶頸、並且提供進程級監控告警能力,能夠提前預知問題。


我們可以先通過性能平臺的業務架構圖瞭解它的基本能力:



從業務架構圖裏面可以看到,性能平臺主要提供了進程級細粒度監控、告警及性能文件採集分析的能力,能夠幫助開發者實時監控進程性能,及時發現並預警問題,讓開發者能夠前置處理性能問題,並且有很好的問題處理抓手點。



性能平臺在我們滴滴內部總共經歷了三個版本:第一個版本是基於PM2和V8 Profile的的採集監控版本,平臺也只是支持火焰圖分析;由於PM2的版本侷限性太高,不能夠很好的支撐各種Node工程,所以在今年我們重構了V1版本,底層換成XProfile(基於V8的能力,一個C++ addon)採集數據,這樣就可以支持PM2、egg-cluster等各種進程管理的項目工程,只要是基於node8以上的版本都可以兼容。


目前是第三版,基於社區EZM的版本構建的,來自一君大神的佳作(XProfile也出自他手),後面主要會通過深度共建回饋社區和定製能力自研增強的方式雙工迭代。


Markdown文檔平臺


文檔平臺的最開始是爲了解決NodeX體系複雜的文檔架構而生,在建設的過程中進行了通用化處理,爲了能夠給更多團隊解決文檔部署難、同步難的問題,提升構建文檔效率,降低團隊間溝通成本,同時也能形成沉澱文檔的好習慣。


文檔平臺提供在線實時預覽保存及本地編輯markdown能力,一鍵同步線上,無需編譯,支持豐富的文檔配置能力,既能滿足輕量的文檔編輯發佈能力,又能滿足複雜的混合文檔能力,整體文檔發佈流程圖如下:



而查看文檔就比較簡單了,整體實時渲染能力是基於開源的docsify的能力,基於它之上我們做了鑑權、樣式升級、埋點等更多能力,具體查看文檔流程如下:



6. 
通用服務
除了基礎能力之外,我們在生態內還提供了一系列的通用服務,這些通用服務都是用NodeX體系搭建,在大多數常見場景中抽離出來通用化,開發者可以通過接口直接調用通用服務能力,大大減少了不必要的重複建設,具體架構圖這裏就不詳細展開了。



7. 
滴滴Node指南

除了實質的基礎生態之外,在提升認知和體系化能力方面,我們建設了滴滴Node指南,結合FT各團隊多年的歷史沉澱和內外部的一些最佳實踐,形成一套覆蓋開發前、中、後的各大核心知識體系。目的就是爲了讓開發者能夠更輕鬆的從0到1搭建一個服務,並且體系性的瞭解一個服務的各個生命週期都應該幹什麼,如何學習Node、如何搭建服務、如何編譯部署服務、如何運維服務、各種類別最佳實踐以及如何保障服務的性能和穩定性等,從而爲業務提供穩健的服務能力。目前這套指南正在完善中。



8. 
落地情況

在我們的NodeX生態不斷建設和推廣傳播下,令人感到興奮的是,滴滴內越來越多的團隊都在用node做着各種提效降本和業務賦能的嘗試,其中不乏有C端業務諸如短域名服務、動態配置服務、埋點服務等,還有一系列中後臺服務。未來我們也會將基礎能力沉澱到Serverless,提供夯實的基礎能力,同時也會沉澱各種類別使用場景解決方案,諸如BFF、SSR、微前端等,幫助開發者快速解決問題。


目前NodeX生態在滴滴內部安裝量已突破20W+,服務接入量也達200+,覆蓋了滴滴內絕大部分部門。當然上面統計的只是組件和框架的數據,體系內還有通用服務和研發支撐平臺接入量也非常可觀。整個生態大大提升了研發效率和自閉環能力,幫助越來越複雜的業務快速發展。




9. 
總結

我們建立 NodeX 體系,是希望能夠匯聚滴滴更多的泛前端團隊,能夠聯動起來學習、沉澱、探索、建設、和分享大家歷史沉澱的解決方案,服務滴滴的同時也能回饋外部社區,共同建設一個好的Node生態。



本文作者



團隊招聘


NodeX FT致力於建設滴滴Node生態,同時我們也有豐富的業務場景(兩輪車、代駕、貨運等)和其他技術建設(Dokit、Hummer、 Chameleon等),涵蓋了跨終端、跨服務端、動效、可視化搭建、serverless等各個場景,歡迎感興趣的同學加入我們,簡歷投遞至

[email protected]om。


掃碼瞭解更多崗位


延伸閱讀



內容編輯 | Mango

聯繫我們 | [email protected]


   
   
   

本文分享自微信公衆號 - 滴滴技術(didi_tech)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章