腾讯开源大规模 Node.js 微服务框架 Tars.js

栏目: IT资讯 · 发布时间: 5年前

内容简介:随着互联网的发展,越来越多的业务不仅仅由单一节点(或是单一语言)就可承载,而是趋向多语言分布式协同开发(如接入层由 Node.js 完成,逻辑(数据)层由 C++/GO/Python 实现)并由此组成大型异构系统。 我们(...

随着互联网的发展,越来越多的业务不仅仅由单一节点(或是单一语言)就可承载,而是趋向多语言分布式协同开发(如接入层由 Node.js 完成,逻辑(数据)层由 C++/GO/Python 实现)并由此组成大型异构系统。

我们(现 SuperTeam)基于 Tars 体系研发出 Tars.js 以便用户在不改变异构系统整体架构的情况下快速搭建(迁移) Node.js 服务,并可非常方便的将原来的单一服务拆分为多个(逻辑)子服务。

腾讯开源大规模 Node.js 微服务框架 Tars.js

Tars.js 包含下述特性:

  • 100% 由 JavaScript 编写,不包含任何 C/C++ 代码。

  • 多进程负载均衡与管理。

  • 代码异常监控与重启。

  • 服务日志搜集与处理。

  • HTTP(s) 服务监控与用量自动上报,并支持用户自定义维度上报(PP 监控)。

  • 符合 Tars(IDL) 规范的编解码模块。

  • 支持 Tars RPC 调用与染色(模调自动上报)。

  • 支持在线发送管理命令、拉取服务配置。

  • 独创 LongStackTrace™ 异常跟踪机制。

  • …… 更多特性可访问 @tars/node-agent 了解

设计理念

高自由度

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

  • 对 Node.js 源码无侵入无修改。

  • 底层对上层完全透明,支持各种上层框架,无需变更。

也就是说:

您可以使用任何您熟悉的框架(如 Express.js / Koa.js 等,包括但不仅限于 Web 框架),也无需对框架进行任何修改(无需引入任何中间件)。 即可通过 Tars.js 运行,享受平台提供的各种监控与管理特性。

与此同时,Tars.js 所提供的模块,也可以根据您的需求引入(如未使用到则可不引入)。

高性能

Tars.js 为高性能与大并发量而设计,使用了大量的前端(V8)优化技巧(如 FlattenString/FastProperties 等)尽量降低所提供的能力对于业务性能的影响。

经过我们测试(Web Server),默认的旁路上报与监控对服务性能的影响≤ 5%,常用模块(RPC、日志等)性能位于业界前列。

差异化

Tars.js 根据不同的业务类型提供差异化运营方案:

  • 高流量业务:尽力降低框架对业务性能的影响。

  • 低流量业务:充分利用硬件资源提升开发体验。

Hello World

我们来看 Node.js 官网的 例子 (如下),无需任何变更,直接通过 Tars.js 进行部署,它会拥有哪些特性?

腾讯开源大规模 Node.js 微服务框架 Tars.js

 进程管理

默认基于 cluster 模块进行负载均衡,进程数可以配置为1~max(CPU核心数)、还可配置为 auto(物理核心数相同)以减小内存压力提升“性价比”。

腾讯开源大规模 Node.js 微服务框架 Tars.js

与此同时,进程僵死检测也会同时启动,实时监控业务进程。

» 案例说明

某服务在论坛 UBB 代码转 HTML 时,使用未优化的正则表达式进行 XSS 攻击过滤,但由于用户发帖时图片采用 BASE64 编码,导致正则表达式计算时间过长,CPU 使用率飙涨到100%:

腾讯开源大规模 Node.js 微服务框架 Tars.js

开启僵死检测后,Tars.js 监控到业务进程僵死时,自动重启业务进程,从而缩短了业务无响应时间:

腾讯开源大规模 Node.js 微服务框架 Tars.js

Tars.js 虽然无法解决业务代码的问题(BUG),但会尽最大努力保证业务的可用性。

 服务监控

以服务名、接口名(URL-PATH 节)为纬度,统计总流量、平均耗时、超时率、异常率:

腾讯开源大规模 Node.js 微服务框架 Tars.js

其中返回码大于 400 (可配置)作为异常进行上报。

» 监控说明

Web 服务一般由静态与动态资源(接口)组成,由于静态资源(本地文件)的请求耗时远低于动态资源(业务逻辑),请求量往往又很高,拉低了服务整体耗时。

基于此,Tars.js 将请求 URL 中的 PATH 节作为接口,每个接口均可查看其总流量、平均耗时、异常率,便于用户全面了解服务性能。

 特性监控

无论您服务的类型是什么,总是会上报下述特性,便于回溯问题与评估性能:

  • memUsage:内存用量,将会上报 rss、heapUsed、heapTotal 这三个用量(单位为字节)

  • cpuUsage:CPU用量,将会上报CPU使用率,数据汇总为逻辑单核(单位为百分比)

  • eventloopLag:(任务)队列延迟,每隔2秒采样(单位为毫秒)

  • libuv:I/O用量,将会上报 activeHandles、activeRequests 这两个用量

腾讯开源大规模 Node.js 微服务框架 Tars.js

各策略以平均值(Avg)、最大值(Max)、最小值(Min)分节点进行统计:

腾讯开源大规模 Node.js 微服务框架 Tars.js

 日志输出

所有通过 Console 模块(如 console.log)输出的日志,都会输出到服务本地文件内。并附加相关信息(如下),方便定位问题。

日志格式:日期时间|进程PID|日志级别|输出文件名与行号|日志内容

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

 LongStackTrace

由于 Node.js 采用异步机制,在发生异常时堆栈不完整,导致定位问题复杂。

鉴于此,我们提供了长链路跟踪技术在产生异常时自动附加前序调用堆栈,同时还支持在异常堆栈中过滤出用户代码部分。

由于开启此特性时会造成性能损耗,故默认关闭,管理平台等性能不敏感业务可直接通过配置开启。

» 案例说明

腾讯开源大规模 Node.js 微服务框架 Tars.js

执行上述代码会抛出下述异常:

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 的前序堆栈都丢失了,导致问题难以追溯。

开启此特性(且过滤出用户代码)后,上述代码(不做修改)抛出的异常就会自动附加前序调用堆栈(如下):

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)

以便于用户定位问题,这也体现了 Tars.js 差异化运营理念。

可用模块列表

由于篇幅有限未能展示所有能力,如果您有更多需求(如 RPC 调用等)可使用 Tars.js 所提供的模块(如下)实现:

  • @tars/rpc : Tars RPC 调用模块。

  • @tars/stream : Tars(Tup) 协议编解码模块。

  • @tars/logs:日志组件,包含(按大小、时间)滚动与远程日志。

  • @tars/config:用于在线获取服务配置文件。

  • @tars/monitor:提供服务监控、特性监控与PP监控上报支持。

  • @tars/notify:用于服务(告警)消息上报。

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

  • @tars/dyeing:Tars RPC 染色定义模块。

  • @tars/registry:用于 Tars 名字服务查询(Servant ===> Endpoint)。

每个模块(点击名称跳转)均有极为详细的文档(README)方便您在任何时候查阅。

总之在 Tars.js 的世界里,您只需要专注于业务代码,余下的交给 Tars.js。

Github 开源地址:

github.com/tars-node/Tars.js

公有云地址:

tars.tencent.com/

github.com/Tencent/Tars

请给 Tars/Tars.js 一个 Star/Watch !

并提出你的 Issue 与 PR。

团队介绍

SuperTeam 来自于腾讯 QQ 浏览器前端团队,由 @SuperZheng 创立于 2017 年。 团队成员均为全栈架构师(Super 寓意 Superman —— 无所不能),熟知 Web(3D) 、终端、后端与大数据计算,并由传统前端向互联网从业者方向发展。 欢迎前端牛人加入,共创前端美好未来。


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Just My Type

Just My Type

Simon Garfield / Profile Books / 2010-10-21 / GBP 14.99

What's your type? Suddenly everyone's obsessed with fonts. Whether you're enraged by Ikea's Verdanagate, want to know what the Beach Boys have in common with easy Jet or why it's okay to like Comic Sa......一起来看看 《Just My Type》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具