網(wǎng)站性能檢測評分
注:本網(wǎng)站頁面html檢測工具掃描網(wǎng)站中存在的基本問題,僅供參考。
案例格式
騰訊貢獻大規(guī)模 Node.js 微服務(wù)框架 Tars.js 推廣視頻課程
隨著互聯(lián)網(wǎng)的發(fā)展,越來越多的業(yè)務(wù)不僅僅由單一節(jié)點(或是單一語言)就可承載,而是趨向多語言分布式協(xié)同開發(fā)(如接入層由Node.js完成,邏輯(數(shù)據(jù))層由C++/GO/Python實現(xiàn))并由此組成大型異構(gòu)系統(tǒng)。我們(現(xiàn)SuperTeam)基于 Tars 體系研發(fā)出 Tars.js 以便用戶在不改變異構(gòu)系統(tǒng)整體架構(gòu)的情況下快速搭建(遷移)Node.js服務(wù),并可非常方便的將原來的單一服務(wù)拆分為多個(邏輯)子服務(wù)。Tars.js在騰訊內(nèi)部經(jīng)過5年多的沉淀與迭代(Node.js@0.10版本即提供支持),廣泛運用于騰訊QQ瀏覽器、騰訊桌面瀏覽器、騰訊地圖、應(yīng)用寶、騰訊手機管家、互聯(lián)網(wǎng)+、騰訊醫(yī)療、騰訊覓影、保險、彩票等幾十個重要業(yè)務(wù)中,日承擔了上百億流量。Tars.js包含下述特性:l 100%由JavaScript編寫,不包含任何C/C++代碼。l 多進程負載均衡與管理。l 代碼異常監(jiān)控與重啟。l 服務(wù)日志搜集與處理。l HTTP(s)服務(wù)監(jiān)控與用量自動上報,并支持用戶自定義維度上報(PP監(jiān)控)。l 符合 Tars(IDL)規(guī)范的編解碼模塊。l 支持 TarsRPC調(diào)用與染色(模調(diào)自動上報)。l 支持在線發(fā)送管理命令、拉取服務(wù)配置。l 獨創(chuàng) LongStackTrace?異常跟蹤機制。l …… 更多特性可訪問 @tars/node-agent 了解設(shè)計理念:?A.高自由度:l 兼容所有(≥0.10)官方Node.js版本。l 對 Node.js源碼無侵入無修改。l 底層對上層完全透明,支持各種上層框架,無需變更。也就是說:您可以使用任何您熟悉的框架(如 Express.js/Koa.js等,包括但不僅限于Web框架),也無需對框架進行任何修改(無需引入任何中間件)。即可通過Tars.js運行,享受平臺提供的各種監(jiān)控與管理特性。與此同時,Tars.js所提供的模塊,也可以根據(jù)您的需求引入(如未使用到則可不引入)。?B.高性能:Tars.js為高性能與大并發(fā)量而設(shè)計,使用了大量的前端(V8)優(yōu)化技巧(如FlattenString/FastProperties等)盡量降低所提供的能力對于業(yè)務(wù)性能的影響。經(jīng)過我們測試(WebServer),默認的旁路上報與監(jiān)控對服務(wù)性能的影響≤5%,常用模塊(RPC、日志等)性能位于業(yè)界前列。?C.差異化:Tars.js根據(jù)不同的業(yè)務(wù)類型提供差異化運營方案:l 高流量業(yè)務(wù):盡力降低框架對業(yè)務(wù)性能的影響。l 低流量業(yè)務(wù):充分利用硬件資源提升開發(fā)體驗。HelloWorld我們來看Node.js官網(wǎng)的 例子 (如下),無需任何變更,直接通過Tars.js進行部署,它會擁有哪些特性?? 進程管理默認基于 cluster 模塊進行負載均衡,進程數(shù)可以配置為1~max(CPU核心數(shù))、還可配置為auto(物理核心數(shù)相同)以減小內(nèi)存壓力提升“性價比”。與此同時,進程僵死檢測也會同時啟動,實時監(jiān)控業(yè)務(wù)進程。?案例說明某服務(wù)在論壇UBB代碼轉(zhuǎn)HTML時,使用未優(yōu)化的正則表達式進行XSS攻擊過濾,但由于用戶發(fā)帖時圖片采用BASE64編碼,導(dǎo)致正則表達式計算時間過長,CPU使用率飆漲到100%:開啟僵死檢測后,Tars.js監(jiān)控到業(yè)務(wù)進程僵死時,自動重啟業(yè)務(wù)進程,從而縮短了業(yè)務(wù)無響應(yīng)時間:Tars.js雖然無法解決業(yè)務(wù)代碼的問題(BUG),但會盡最大努力保證業(yè)務(wù)的可用性。? 服務(wù)監(jiān)控以服務(wù)名、接口名(URL-PATH節(jié))為緯度,統(tǒng)計總流量、平均耗時、超時率、異常率:其中返回碼大于400(可配置)作為異常進行上報。?監(jiān)控說明Web服務(wù)一般由靜態(tài)與動態(tài)資源(接口)組成,由于靜態(tài)資源(本地文件)的請求耗時遠低于動態(tài)資源(業(yè)務(wù)邏輯),請求量往往又很高,拉低了服務(wù)整體耗時。基于此,Tars.js將請求URL中的PATH節(jié)作為接口,每個接口均可查看其總流量、平均耗時、異常率,便于用戶全面了解服務(wù)性能。? 特性監(jiān)控無論您服務(wù)的類型是什么,總是會上報下述特性,便于回溯問題與評估性能:l memUsage:內(nèi)存用量,將會上報rss、heapUsed、heapTotal這三個用量(單位為字節(jié))l cpuUsage:CPU用量,將會上報CPU使用率,數(shù)據(jù)匯總為邏輯單核(單位為百分比)l eventloopLag:(任務(wù))隊列延遲,每隔2秒采樣(單位為毫秒)l libuv:I/O用量,將會上報activeHandles、activeRequests這兩個用量各策略以平均值(Avg)、最大值(Max)、最小值(Min)分節(jié)點進行統(tǒng)計:? 日志輸出所有通過Console模塊(如console.log)輸出的日志,都會輸出到服務(wù)本地文件內(nèi)。并附加相關(guān)信息(如下),方便定位問題。日志格式:日期時間|進程PID|日志級別|輸出文件名與行號|日志內(nèi)容2018-07-0112:00:00|332|DEBUG|app.js:13|Serverrunningathttp://127.0.0.1:3000/? LongStackTrace?由于Node.js采用異步機制,在發(fā)生異常時堆棧不完整,導(dǎo)致定位問題復(fù)雜。鑒于此,我們提供了長鏈路跟蹤技術(shù)在產(chǎn)生異常時自動附加前序調(diào)用堆棧,同時還支持在異常堆棧中過濾出用戶代碼部分。由于開啟此特性時會造成性能損耗,故默認關(guān)閉,管理平臺等性能不敏感業(yè)務(wù)可直接通過配置開啟。?案例說明執(zhí)行上述代碼會拋出下述異常:ReferenceError:ThisMayThrowErrorisnotdefinedatTimeout.setTimeoutas_onTimeoutat_disibledevent="http://superzheng.com/">@SuperZheng 創(chuàng)立于2017年。團隊成員均為全棧架構(gòu)師(Super寓意Superman——無所不能),熟知Web(3D)、終端、后端與大數(shù)據(jù)計算,并由傳統(tǒng)前端向互聯(lián)網(wǎng)從業(yè)者方向發(fā)展。歡迎前端牛人加入,共創(chuàng)前端美好未來。