中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

騰訊開源大規(guī)模 Node.js 微服務(wù)框架 Tars.js

2018-07-25    來源:oschina

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

隨著互聯(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ù)拆分為多個(邏輯)子服務(wù)。


Tars.js 包含下述特性:

  • 100% 由 JavaScript 編寫,不包含任何 C/C++ 代碼。

  • 多進(jìn)程負(fù)載均衡與管理。

  • 代碼異常監(jiān)控與重啟。

  • 服務(wù)日志搜集與處理。

  • HTTP(s) 服務(wù)監(jiān)控與用量自動上報,并支持用戶自定義維度上報(PP 監(jiān)控)。

  • 符合 Tars(IDL) 規(guī)范的編解碼模塊。

  • 支持 Tars RPC 調(diào)用與染色(模調(diào)自動上報)。

  • 支持在線發(fā)送管理命令、拉取服務(wù)配置。

  • 獨(dú)創(chuàng) LongStackTrace? 異常跟蹤機(jī)制。

  • …… 更多特性可訪問 @tars/node-agent 了解

設(shè)計理念

高自由度

  • 兼容所有(≥0.10)官方 Node.js 版本。

  • 對 Node.js 源碼無侵入無修改。

  • 底層對上層完全透明,支持各種上層框架,無需變更。

也就是說:

您可以使用任何您熟悉的框架(如 Express.js / Koa.js 等,包括但不僅限于 Web 框架),也無需對框架進(jìn)行任何修改(無需引入任何中間件)。 即可通過 Tars.js 運(yùn)行,享受平臺提供的各種監(jiān)控與管理特性。

與此同時,Tars.js 所提供的模塊,也可以根據(jù)您的需求引入(如未使用到則可不引入)。

高性能

Tars.js 為高性能與大并發(fā)量而設(shè)計,使用了大量的前端(V8)優(yōu)化技巧(如 FlattenString/FastProperties 等)盡量降低所提供的能力對于業(yè)務(wù)性能的影響。

經(jīng)過我們測試(Web Server),默認(rèn)的旁路上報與監(jiān)控對服務(wù)性能的影響≤ 5%,常用模塊(RPC、日志等)性能位于業(yè)界前列。

差異化

Tars.js 根據(jù)不同的業(yè)務(wù)類型提供差異化運(yùn)營方案:

  • 高流量業(yè)務(wù):盡力降低框架對業(yè)務(wù)性能的影響。

  • 低流量業(yè)務(wù):充分利用硬件資源提升開發(fā)體驗(yàn)。

Hello World

我們來看 Node.js 官網(wǎng)的 例子 (如下),無需任何變更,直接通過 Tars.js 進(jìn)行部署,它會擁有哪些特性?

? 進(jìn)程管理

默認(rèn)基于 cluster 模塊進(jìn)行負(fù)載均衡,進(jìn)程數(shù)可以配置為1~max(CPU核心數(shù))、還可配置為%20auto(物理核心數(shù)相同)以減小內(nèi)存壓力提升“性價比”。

與此同時,進(jìn)程僵死檢測也會同時啟動,實(shí)時監(jiān)控業(yè)務(wù)進(jìn)程。

案例說明

某服務(wù)在論壇%20UBB%20代碼轉(zhuǎn)%20HTML%20時,使用未優(yōu)化的正則表達(dá)式進(jìn)行%20XSS%20攻擊過濾,但由于用戶發(fā)帖時圖片采用%20BASE64%20編碼,導(dǎo)致正則表達(dá)式計算時間過長,CPU%20使用率飆漲到100%:

開啟僵死檢測后,Tars.js%20監(jiān)控到業(yè)務(wù)進(jìn)程僵死時,自動重啟業(yè)務(wù)進(jìn)程,從而縮短了業(yè)務(wù)無響應(yīng)時間:

Tars.js 雖然無法解決業(yè)務(wù)代碼的問題(BUG),但會盡最大努力保證業(yè)務(wù)的可用性。

? 服務(wù)監(jiān)控

以服務(wù)名、接口名(URL-PATH%20節(jié))為緯度,統(tǒng)計總流量、平均耗時、超時率、異常率:

其中返回碼大于%20400%20(可配置)作為異常進(jìn)行上報。

監(jiān)控說明

Web%20服務(wù)一般由靜態(tài)與動態(tài)資源(接口)組成,由于靜態(tài)資源(本地文件)的請求耗時遠(yuǎn)低于動態(tài)資源(業(yè)務(wù)邏輯),請求量往往又很高,拉低了服務(wù)整體耗時。

基于此,Tars.js%20將請求%20URL%20中的%20PATH%20節(jié)作為接口,每個接口均可查看其總流量、平均耗時、異常率,便于用戶全面了解服務(wù)性能。

? 特性監(jiān)控

無論您服務(wù)的類型是什么,總是會上報下述特性,便于回溯問題與評估性能:

  • memUsage:內(nèi)存用量,將會上報%20rss、heapUsed、heapTotal%20這三個用量(單位為字節(jié))

  • cpuUsage:CPU用量,將會上報CPU使用率,數(shù)據(jù)匯總為邏輯單核(單位為百分比)

  • eventloopLag:(任務(wù))隊列延遲,每隔2秒采樣(單位為毫秒)

  • libuv:I/O用量,將會上報%20activeHandles、activeRequests%20這兩個用量

  • 各策略以平均值(Avg)、最大值(Max)、最小值(Min)分節(jié)點(diǎn)進(jìn)行統(tǒng)計:


    ? 日志輸出

    所有通過%20Console%20模塊(如%20console.log)輸出的日志,都會輸出到服務(wù)本地文件內(nèi)。并附加相關(guān)信息(如下),方便定位問題。

    日志格式:日期時間|進(jìn)程PID|日志級別|輸出文件名與行號|日志內(nèi)容

    2018-07-01%2012:00:00|332|DEBUG|app.js:13|Server%20running%20at%20http://127.0.0.1:3000/

    ? LongStackTrace?

    由于%20Node.js%20采用異步機(jī)制,在發(fā)生異常時堆棧不完整,導(dǎo)致定位問題復(fù)雜。

    鑒于此,我們提供了長鏈路跟蹤技術(shù)在產(chǎn)生異常時自動附加前序調(diào)用堆棧,同時還支持在異常堆棧中過濾出用戶代碼部分。

    由于開啟此特性時會造成性能損耗,故默認(rèn)關(guān)閉,管理平臺等性能不敏感業(yè)務(wù)可直接通過配置開啟。

    案例說明

    執(zhí)行上述代碼會拋出下述異常:

    ReferenceError: ThisMayThrowError is not defined     at Timeout.setTimeout as _onTimeout     at ontimeout (timers.js:427:11)     at tryOnTimeout (timers.js:289:5)     at listOnTimeout (timers.js:252:5)     at Timer.processTimers (timers.js:212:10)

    setTimeout 的前序堆棧都丟失了,導(dǎo)致問題難以追溯。

    開啟此特性(且過濾出用戶代碼)后,上述代碼(不做修改)拋出的異常就會自動附加前序調(diào)用堆棧(如下):

    ReferenceError: ThisMayThrowError is not defined
    
        at Timeout.setTimeout [as _onTimeout] (test.js:4:13)
    
        at Promise.resolve.then.val (test.js:2:5)
    
        at Object.<anonymous> (test.js:1:82)

    以便于用戶定位問題,這也體現(xiàn)了 Tars.js 差異化運(yùn)營理念。

    可用模塊列表

    由于篇幅有限未能展示所有能力,如果您有更多需求(如 RPC 調(diào)用等)可使用 Tars.js 所提供的模塊(如下)實(shí)現(xiàn):

    • @tars/rpc : Tars RPC 調(diào)用模塊。

    • @tars/stream : Tars(Tup) 協(xié)議編解碼模塊。

    • @tars/logs:日志組件,包含(按大小、時間)滾動與遠(yuǎn)程日志。

    • @tars/config:用于在線獲取服務(wù)配置文件。

    • @tars/monitor:提供服務(wù)監(jiān)控、特性監(jiān)控與PP監(jiān)控上報支持。

    • @tars/notify:用于服務(wù)(告警)消息上報。

    • @tars/utils:輔助工具集合,包含 Tars 配置文件與 Tars RPC Endpoint 解析器。

    • @tars/dyeing:Tars RPC 染色定義模塊。

    • @tars/registry:用于 Tars 名字服務(wù)查詢(Servant ===> Endpoint)。

    每個模塊(點(diǎn)擊名稱跳轉(zhuǎn))均有極為詳細(xì)的文檔(README)方便您在任何時候查閱。

    總之在 Tars.js 的世界里,您只需要專注于業(yè)務(wù)代碼,余下的交給 Tars.js。

    Github 開源地址:

    github.com/tars-node/Tars.js

    公有云地址:

    tars.tencent.com/

    github.com/Tencent/Tars

    請給 Tars/Tars.js 一個 Star/Watch !

    并提出你的 Issue 與 PR。

    團(tuán)隊介紹

    SuperTeam 來自于騰訊 QQ 瀏覽器前端團(tuán)隊,由 @SuperZheng 創(chuàng)立于 2017 年。 團(tuán)隊成員均為全棧架構(gòu)師(Super 寓意 Superman —— 無所不能),熟知 Web(3D) 、終端、后端與大數(shù)據(jù)計算,并由傳統(tǒng)前端向互聯(lián)網(wǎng)從業(yè)者方向發(fā)展。 歡迎前端牛人加入,共創(chuàng)前端美好未來。

    標(biāo)簽: isp 大數(shù)據(jù) 代碼 公有云 互聯(lián)網(wǎng) 互聯(lián)網(wǎng)的發(fā)展

    版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
    特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
    本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

    上一篇:JDK 11 已處于特性凍結(jié)狀態(tài),看看 Java 11 API 變更提案

    下一篇:歐盟罰款風(fēng)波:Android 要收費(fèi)、閉源恐難于上青天