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