騰訊Node.js基礎設施TSW正式開源

通過六年的迭代與沉澱,騰訊Tencent Server Web (如下簡稱TSW)這一公司級運維組件於今日正式開源。TSW是面向WEB前端開發者,以提高問題定位效率爲初衷,提供雲抓包、全息日誌和異常發現的Node.js基礎設施。TSW天天爲百億次請求提供穩定服務,普遍應用在QQ空間、微視、微雲、QQ音樂、全民K歌、騰訊雲等三十多個重要業務當中。前端

官方網站:https://tswjs.orggit

Github 開源地址:https://github.com/Tencent/TSWgithub

雲抓包瀏覽器

TSW 支持用戶維度的抓包cookie

  • 對於染色的用戶
  • 對請求生命週期內的抓包進行收集
  • 提供抓包查看、下載等功能
  • 抓包格式支持Fiddler和Charles,以及HAR

全息日誌網絡

TSW 提供用戶維度的全息日誌幫助開發者快速定位問題運維

  • 對請求生命週期內的日誌,採用全息的方式記錄,造成流水
  • 流水按用戶維度聚合
  • 提供查看功能,快速定位問題緣由

異常發現dom

  • 內置指標實時監控
  • 代碼異常推送告警

誰都在用?優化

輸入圖片說明

源於直出網站

2012年10月,TSW初版上線織雲(一體化自動運維平臺),Node.js版本爲0.6.20。當時的功能十分簡陋,只實現了服務端JS直出頁面,能夠說毫無運維可言,惟一的價值是可讓首屏體驗更快。爲了強化這個惟一的價值,實現了gzip+chunked,邊壓縮邊傳輸,可讓頁面內容有節奏的回包,精確控制流式回包,對Node.js來講很是簡單。

在瀏覽器裏,想要cookie的時候經過上下文window變量就取到了,歷來沒有以爲取cookie是一件特別費勁的事。但到Node.js裏就不一樣了,對於取cookie這麼簡單的需求,須要特別關注request對象在哪裏。由於request對象是局部變量,沒法全局得到,這就是問題的本質。

直到2014年,一種實現上下文的方法被發現,window對象誕生。利用process.domain老是指向當前包裹本身的domain對象這一個特性來完成上下文自動切換。window對象的本質是與request對象生命週期綁定的全局變量。你能夠在任什麼時候候經過window獲取request對象,進而取得cookie等其它信息。

window的出現,打通了不一樣維度間的聯繫,把這些聯繫落地,就能夠產生新的價值。好比在DNS解析API中,是沒有用戶概念的,用戶存在於更高維度中,高維對低維不可見,經過window對象,低維度裏能夠知道正在爲哪一個用戶作解析服務。當解析結果有問題時,知道影響了哪一個用戶,經過用戶也能回朔到解析過程。維度之間不是單純的依賴關係,而是密切配合的關係。這就致使了TSW的代碼在組織方式上,須要無條件高內聚,不能以模塊的方式單獨存在。爲了收集這些聯繫,須要有配套的存儲、查看系統。這些系統最終演進爲TSW開放平臺(tswjs.org)。

興於抓包

有個問題一直困擾着咱們:爲了解決某個問題,抓包一小時,代碼一分鐘,抓包效率嚴重影響着定位問題的效率。在這樣的背景下,TSW提出服務端雲抓包的解決方案。與用戶端抓包相比,不用再關注用戶端網絡環境、位置、接入層協議等問題。

只抓請求包和響應包遠遠不夠,使用上下文對象,對其強化。在請求處理過程當中,利用上下文,將衍生請求進行關聯抓包,構成全息抓包;將衍生日誌進行關聯,構成全息日誌。對於一次請求,能看到全部維度的日誌和抓包,是一件很天然的事。最後把日誌和抓包落地供查看。對於不符合預期的請求,可精確給出問題緣由。從結果看,團隊總體的研發效率獲得了質的提高。 輸入圖片說明

久於運維

公司內頂尖的前端開發,分佈在各類類型的產品中,想讓他們成爲用戶,先要突破部門牆。運維這個維度是有機會破牆的。A業務和B業務的運維很大多是同一波人。就像引力波,可跨越空間維度,直接抄近道,不用繞着本維空間跑。所以TSW選擇在運維上發力,而不是在代碼如何編寫上,與開源庫飈車。

安裝1臺Node.js是技能,安裝1000臺是運維。安裝和升級,應該當作一個運維問題來解決掉。Node.js版本,你們都知道迭代很快,若是每一個版本都有業務在用,就有多個運維對象。提供多個版本供業務選擇看起來很民主,可是,好的運維是減小運維對象。

能不能統一升級只維護一個版本?統一升級又遇到新的挑戰:CPP擴展是和Node.js版本強相關的,只升Node.js還不夠,擴展也須要統一維護。爲了找出來全部的CPP擴展,TSW動用了監控,對業務私有擴展郵件告警,而後歸入TSW統一維護。統一維護加速了TSW的迭代速度,版本強一致規避了迭代帶來的代碼腐化問題。

前端開發之間交流JS毫無問題,但對運維同窗來講,是方言,這時就須要能講普通話。拿啓動邏輯來講,一個Node.js程序炫技式啓動,掛了的時候,只有開發知道怎麼拉起來,這就十分尷尬。再拿擴縮容舉例,運維擴縮容後,須要動代碼才能上下線,那就是有問題的。織雲通過多年積累,運維自動化程度達到了自助級別,TSW在標準化上,選擇入駐織雲。當須要安裝、重啓、升級TSW時,到織雲點一下按鈕就行了。

盛於開源

TSW已經具備很強的穩定性和業務通用性。Node.js在前端界目前已經具備至關的熱度和歡迎度,TSW做爲Node.js基礎設施,在公司內部已經獲得了開發團隊以及運維團隊的承認,本次將TSW開源,在業界進一步加強TSW的技術影響力,同時也進一步完善和優化TSW。

相關文章
相關標籤/搜索