Github開源地址:https://github.com/Tencent/TSW
TSW支援使用者維度的抓包
- 對於染色的使用者
- 對請求生命週期內的抓包進行收集
- 提供抓包檢視、下載等功能
- 抓包格式支援Fiddler和Charles,以及HAR
全息日誌
TSW提供使用者維度的全息日誌幫助開發者快速定位問題
- 對請求生命週期內的日誌,採用全息的方式記錄,形成流水
- 流水按使用者維度聚合
- 提供檢視功能,快速定位問題原因
異常發現
- 內建指標實時監控
- 程式碼異常推送告警
2012年10月,TSW第一版上線織雲(一體化自動運維平臺),Node.js版本為0.6.20。當時的功能十分簡陋,只實現了服務端JS直出頁面,可以說毫無運維可言,唯一的價值是可以讓首屏體驗更快。為了強化這個唯一的價值,實現了gzip+chunked,邊壓縮邊傳輸,可以讓頁面內容有節奏的回包,精確控制流式回包,對Node.js來說非常簡單。
window的出現,打通了不同維度間的聯絡,把這些聯絡落地,就可以產生新的價值。比如在DNS解析API中,是沒有使用者概念的,使用者存在於更高維度中,高維對低維不可見,通過window物件,低維度裡可以知道正在為哪個使用者做解析服務。當解析結果有問題時,知道影響了哪個使用者,通過使用者也能回朔到解析過程。維度之間不是單純的依賴關係,而是密切配合的關係。這就導致了TSW的程式碼在組織方式上,需要無條件高內聚,不能以模組的方式單獨存在。為了收集這些聯絡,需要有配套的儲存、檢視系統。這些系統最終演進為TSW開放平臺(tswjs.org)。
興於抓包
只抓請求包和響應包遠遠不夠,使用上下文物件,對其強化。在請求處理過程中,利用上下文,將衍生請求進行關聯抓包,構成全息抓包;將衍生日誌進行關聯,構成全息日誌。對於一次請求,能看到所有維度的日誌和抓包,是一件很自然的事。最後把日誌和抓包落地供檢視。對於不符合預期的請求,可精確給出問題原因。從結果看,團隊整體的研發效率得到了質的提升。
能不能統一升級只維護一個版本?統一升級又遇到新的挑戰:CPP擴充套件是和Node.js版本強相關的,只升Node.js還不夠,擴充套件也需要統一維護。為了找出來所有的CPP擴充套件,TSW動用了監控,對業務私有擴充套件郵件告警,然後納入TSW統一維護。統一維護加速了TSW的迭代速度,版本強一致規避了迭代帶來的程式碼腐化問題。
盛於開源
TSW已經具有很強的穩定性和業務通用性。Node.js在前端界目前已經具有相當的熱度和歡迎度,TSW作為Node.js基礎設施,在公司內部已經得到了開發團隊以及運維團隊的認可,本次將TSW開源,在業界進一步增強TSW的技術影響力,同時也進一步完善和優化TSW。