前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >腾讯 Node.js 非侵入开发框架 Tars.js 2.0 正式发布

腾讯 Node.js 非侵入开发框架 Tars.js 2.0 正式发布

作者头像
腾讯开源
发布于 2018-08-14 10:53:15
发布于 2018-08-14 10:53:15
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

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

基于 Tars 体系研发出 Tars.js 以便用户在不改变异构系统整体架构的情况下快速搭建及迁移 Node.js 服务,并可非常方便的将原来的单一服务拆分为多个逻辑子服务,并在腾讯内支撑起了上百亿的流量。

Tars.js 在腾讯内部经过 5 年多的沉淀与迭代(Node.js@0.10版本即提供支持),广泛运用于腾讯QQ浏览器、腾讯桌面浏览器、腾讯地图、应用宝、腾讯手机管家、互联网+、腾讯医疗、腾讯觅影、保险、彩票等几十个重要业务中。


Tars.js 2.0 发布以下 9 大特性:

  • 100% 由 JavaScript 编写,不包含任何 C/C++ 代码。
  • 多进程负载均衡与管理。
  • 代码异常监控与重启。
  • 服务日志搜集与处理。
  • HTTP(s) 服务监控与用量自动上报,并支持用户自定义维度上报(PP 监控)。
  • 符合 Tars(IDL) 规范的编解码模块。
  • 支持 Tars RPC 调用与染色(模调自动上报)。
  • 支持在线发送管理命令、拉取服务配置。
  • 独创 LongStackTrace™ 异常跟踪机制。
  • …… 更多特性可访问 @tars/node-agent 了解

Tars.js 2.0 三大设计理念:

» A.高自由度:

  • 兼容所有(≥0.10)官方 Node.js 版本。
  • 对 Node.js 源码无侵入无修改。
  • 底层对上层完全透明,支持各种上层框架,无需变更。

也就是说:

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

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

» B.高性能:

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

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

» C.差异化:

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

  • 高流量业务:尽力降低框架对业务性能的影响。
  • 低流量业务:充分利用硬件资源提升开发体验。

“Hello World”

通过 Tars.js 来部署您的代码,可直接拥有下文所有特性,而无修修改任何代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

(甚至于 Node.js 官网 例子,都可以直接运行)

✓ 进程管理

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

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

» 案例说明

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

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

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

✓ 服务监控

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

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

» 监控说明

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

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

✓ 特性监控

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

  • memUsage:内存用量,将会上报 rss、heapUsed、heapTotal 这三个用量(单位为字节)
  • cpuUsage:CPU用量,将会上报CPU使用率,数据汇总为逻辑单核(单位为百分比)
  • eventloopLag:(任务)队列延迟,每隔2秒采样(单位为毫秒)
  • libuv:I/O用量,将会上报 activeHandles、activeRequests 这两个用量

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

✓ 日志输出

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

日志格式:日期时间 | 进程PID | 日志级别 | 输出文件名与行号 | 日志内容 2018-07-01 12:00:00|1332|DEBUG|app.js:13|Server running at http://127.0.0.1:3000/

✓ LongStackTrace™

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

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

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

» 案例说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Promise.resolve(1).then(val => {
    setTimeout(()=>{
        try {
            ThisMayThrowError;
        } catch(err) {
            console.error(err);
        };
    }, 1000);
});

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

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.js 的世界里,您只需要专注于业务代码,余下的交给 Tars.js。

Github 开源地址:

https://github.com/tars-node/Tars.js 

(点击文末阅读原文,直接访问源码) https://github.com/Tencent/Tars

作者介绍 @SuperZheng,腾讯 Tars 开源项目核心贡献者,主要负责 Node.js 语言在 Tars 框架内的基础运行架构开发,来自于腾讯 QQ 浏览器 [SuperTeam] 的全栈架构师,熟知 Web(3D) 、终端、后端与大数据计算。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯开源 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
9 条评论
热度
最新
我是初学者,里面很多公式的推导过程不清楚,要是能再分享点资料就好了,谢谢楼主
我是初学者,里面很多公式的推导过程不清楚,要是能再分享点资料就好了,谢谢楼主
44点赞举报
我的其他文章有一些推导和公式的。主要是feathstone的多体系统动力学的理论
我的其他文章有一些推导和公式的。主要是feathstone的多体系统动力学的理论
回复回复点赞举报
好的。roy的刚体算法书我也啃了很久,不过只看完了复合惯量算法,ABA的还没怎么看。
好的。roy的刚体算法书我也啃了很久,不过只看完了复合惯量算法,ABA的还没怎么看。
回复回复点赞举报
查看全部4条回复
关于算法实现和原理介绍是不是可以在再写一篇文章好好介绍给大家。期待
关于算法实现和原理介绍是不是可以在再写一篇文章好好介绍给大家。期待
回复回复点赞举报
我之前也研究过空间矢量的方法. 感觉你这篇写得很好很不错
我之前也研究过空间矢量的方法. 感觉你这篇写得很好很不错
11点赞举报
感谢支持,空间矢量的方法计算量小,编程简单,易于大家实现。递推多体动力学是趋势,能将复杂问题简单化。
感谢支持,空间矢量的方法计算量小,编程简单,易于大家实现。递推多体动力学是趋势,能将复杂问题简单化。
回复回复点赞举报
空间矢量应该是两个三维矢量的合成
空间矢量应该是两个三维矢量的合成
回复回复点赞举报
推荐阅读
机器人动力学建模:机械臂动力学
多体系统动力学形成了多种建模和分析的方法, 早期的动力学研究主要包括 Newton-Euler 矢量力学方法和基于 Lagrange 方程的分析力学方法。 这种方法对于解决自由度较少的简单刚体系统, 其方程数目比较少, 计算量也比较小, 比较容易, 但是, 对于复杂的刚体系统, 随着自由度的增加, 方程数目 会急剧增加, 计算量增大。 随着时代的发展, 计算机技术得到了突飞猛进的进步, 虽然可以利用计算机编程求解出动力学方程组, 但是, 对于求解下一时刻的关节角速度需要合适的数值积分方法, 而且需要编写程序, 虽然这种方法可以求解出方程的解, 但是, 由于这种编程方法不具有通用性, 针对每个具体问题, 都需要编程求解, 效率比较低, 因此, 如果能在动力学建模的同时就考虑其计算问题, 并且在建模过程中考虑其建模和求解的通用性, 就能较好的解决此问题。
ZC_Robot机器人技术
2020/10/15
8.7K1
机器人动力学建模:机械臂动力学
自由漂浮机器人运动学和动力学建模
随着空间技术的不断发展和人类对空间探索的不断深入,空间机器人在完成诸如空间站的建造与维护等任务中发挥着重要的作用。
ZC_Robot机器人技术
2020/10/17
4.1K2
自由漂浮机器人运动学和动力学建模
【Dynamics】机械臂动力学建模(牛顿-欧拉法)
(1)动力学用于机械臂的仿真,机械臂的动力学有助于进行机械臂完成特定任务比如目标捕获、操作、抓取以及分拣等操作;仿真可以得到机械臂在完成此类任务过程中的动态特性;
ZC_Robot机器人技术
2020/06/25
11.7K0
【Dynamics】机械臂动力学建模(牛顿-欧拉法)
Robot-adams机器人动力学仿真
机器人的动力学仿真软件有很多,在之前的文章中【Robot-走近机器人动力学建模与仿真】也有详细的分类介绍,在众多的机器人仿真软件中,Adams 是科学研究中关于动力学仿真求解最稳定的。这主要是由于adams 具有强大的动力学微分仿真求解器.本文旨在详细介绍adams在机器人研发领域内的应用。
ZC_Robot机器人技术
2020/06/16
7.9K9
Robot-adams机器人动力学仿真
Robot:七自由度机械臂动力学建模与控制研究(一)
冗余构型机械臂的动力学与控制存在着其特殊性。七自由机械臂的动力学算法一般计算量大,且其控制中存在“自运动”问题。针对上述问题,本文主要研究内容包括:基于铰接体算法的空间机械臂正向动力学,冗余机械臂位置控制,基于增强混合阻抗控制的空间冗余机械臂力控制研究。
ZC_Robot机器人技术
2021/01/21
5.1K3
Robot:七自由度机械臂动力学建模与控制研究(一)
3D矢量和6D矢量机器人建模的对比
基于6D矢量的机器人动力学是由学者Featherstone首先提出,并被机器人其他很多动力学建模软件广泛应用。包括开源机器人软件kdl.
ZC_Robot机器人技术
2020/10/24
3.3K3
3D矢量和6D矢量机器人建模的对比
机器人动力学:机械臂正向动力学与逆向动力学
正向动力学:已知机器人的关节驱动力矩和上一时刻的运动状态(角度和角速度),计算得到机器人下一时刻的运动加速度,再积分得到速度和角度;
ZC_Robot机器人技术
2020/10/16
22.9K1
机器人动力学:机械臂正向动力学与逆向动力学
固定基座机器人与漂浮基座动力学建模异同点
本章将重点介绍空间矢量描述的空间机械臂动力学建模,其克服了传统的动力学建模其计算量较大,计算效率低的问题。且结合空间固定基座机械臂的正向动力学建模方法,分析动力学建模的效率、计算量以及稳定性问题。动力学建模的基本原理很多,实现方法也很多,动力学量的表示方法也不尽相同,因此针对不同的建模对象,不同的动力学建模任务,需要选择不同的建模方法。本章结合动力学建模方法分析了固定基座机器人动力学建模与漂浮基座机器人动力学建模的异同点。
ZC_Robot机器人技术
2020/10/18
4.4K4
固定基座机器人与漂浮基座动力学建模异同点
Robot-走近机器人动力学建模与仿真
云机器人就是云计算与机器人学的结合。而机器人则是云机器人的主要终端,云可以为机器人提供数据监控以及分析服务,同时也可从远端遥操作机器人的动作。腾讯云社区为大家了解和使用腾讯云服务提供了优秀的平台。而对于机器人部分,下面给出关于机器人关键技术之一的动力学建模与仿真的介绍。
ZC_Robot机器人技术
2020/05/09
14.7K2
Robot-走近机器人动力学建模与仿真
浅谈机器人关节空间与笛卡尔空间控制
对于机械臂系统最简单的控制策略即在机械臂运动速度不大时,可以忽略其离心力、科氏力影响以及各连杆的耦合,进而将机械臂视为解耦的线性系统,对其控制采用基于 个独立关节的控制,对每个关节施加PD控制。其控制率如下:
ZC_Robot机器人技术
2020/09/24
9.8K2
浅谈机器人关节空间与笛卡尔空间控制
机器人运动学和动力学:机器人学究竟有什么不同
说到智能化设备,首先想到的是机器人与数控加工中心。至于二者,均是工业4.0时代的重要加工媒介和工具,是支撑工业智能化时代的重要组成设备。但是二者的具体区别到底在什么地方尼?
ZC_Robot机器人技术
2020/10/10
4K0
机器人运动学和动力学:机器人学究竟有什么不同
机器人刚柔耦合动力学建模与应用汇总
柔性机器人轻量节能, 对环境和目 标的变化具有适应性, 但也存在因 为结构刚度较低而导致的结构振动的问题.现有的绝大多数机器人结构设计是结构刚度最大化, 以减小机器人结构的振动而实现精确的运动定位. 但是, 这种最大化刚度结构的机器人用材多、 不经济, 结构笨重不节能, 惯量大而动态性能差, 生产效率低. 况且, 不存在绝对的刚性结构, 一定条件的输入会激励出 一定频率的振动, 即使设计成最大化刚度结构, 机器人在高速重载的工作条件下同 样面临着结构振动的问 题.
ZC_Robot机器人技术
2020/11/17
4.1K0
机器人刚柔耦合动力学建模与应用汇总
柔性机械臂:动力学建模原理
刚性机械臂建模方法已经可以有效地求解出机械臂各部分之间的耦合情况,但是对于柔性机械臂的动力学建模其侧重点在于基于刚性机械臂建模方法的基础上如何有效的处理机械臂关节柔性以及臂杆柔性的问题。由于机械臂的截面相对于其长度而言很小,可以将柔性杆作为Euler-Bernouli梁,柔性机械臂可以视为一个具有无限自由度的连续系统。相对于刚性机械臂杆件之间的耦合,柔性机械臂还需要考虑关节的柔性以及臂杆弹性变形的耦合。因而,柔性机械臂的运动方程具有高度非线性。
ZC_Robot机器人技术
2020/10/03
4.4K0
柔性机械臂:动力学建模原理
Robot:七自由度机械臂动力学建模与控制研究(二)
为了有效的进行冗余机械臂位置控制,本文采用基于运动学的构型控制策略,选择臂角为构型控制中的运动学函数,以此参数化其“自运动”。为了检验算法的正确性,本文建立了空间七自由度机械臂的数值仿真系统,仿真结果表明,基于该算法可以有效控制冗余机械臂的运动。
ZC_Robot机器人技术
2021/01/21
4.4K0
Robot:七自由度机械臂动力学建模与控制研究(二)
组合体惯量法B:原理—机械臂动力学建模
对于多自由度机械臂, 为了研究机械臂的运动特性, 因此需要建立多自由度机械臂的半实物仿真系统以及全数值仿真系统, 而对其动力学的研究又是其中必不可少的环节之一。考虑到实时系统下, 计算机的运算速度以及数据通讯速度, 用于模拟机械臂运动的正向动力学需满足实时性、 快速性以及稳定性。 为此,有必要研究一种针对多自由度冗余机械臂的实时动力学用于模拟机械臂的实际运动情况。
ZC_Robot机器人技术
2020/09/23
4K2
组合体惯量法B:原理—机械臂动力学建模
组合体惯量法A: matlab程序—机械臂动力学建模
机械臂为典型的多体系统,针对机械臂的动力学建模可以采用传统的多刚体系统建模原理,但是针对机械臂,由于其一般为串行链结构,针对其特殊性,可以采用有别于传统动力学建模原理的特殊方法。机械臂的实时动力学按照计算原则不同分为单处理器串行计算以及多处理器并行计算方法,本文研究的为单处理器串行计算的机械臂实时动力学。
ZC_Robot机器人技术
2020/09/22
4.2K0
组合体惯量法A: matlab程序—机械臂动力学建模
基于空间矢量的机器人动力学:铰接体惯量法matlab程序
与运动学建模不同的是,机械臂的刚体动力学建模首先需要建立其连体坐标系,该连体系可以不按D-H原则建立,然后在机械臂连体系下表示机械臂运动学量(位置、速度、加速度),最后根据动力学普遍方程建立多体系统模型。
ZC_Robot机器人技术
2020/09/24
2.5K3
基于空间矢量的机器人动力学:铰接体惯量法matlab程序
柔性机械臂:动力学建模具体方法
建立柔性机械臂动力学方程主要利用Newton-Euler和Lagrange方程这两个最具代表性的方程,另外比较常用的还有Kane方法等。为了建立动力学模型和控制的方便,柔性关节一般简化为弹簧。当连杆存在柔性时,常采用假设模态法、有限元法、有限段法等方法描述相应臂杆的柔性变形,然后再根据需要进行截断。柔性臂杆的变形常常简化为Euler-Bernulli梁来处理,即考虑到机械臂连杆的长度总比其截面尺寸大得多,运行过程中所产生的轴向变形和剪切变形相对于挠曲变形而言非常小,柔性臂杆只考虑挠曲变形,忽略轴向变形和剪切变形。因而从动力学角度看,每根柔性连杆都可视为一段梁。
ZC_Robot机器人技术
2020/10/03
4.7K22
柔性机械臂:动力学建模具体方法
七自由度冗余机械臂梯度投影逆运动学
冗余机械臂的微分逆运动学一般可以增加额外的优化任务。 最常用的是梯度投影算法 GPM (Gradient Project Method),文献 [1] 中第一次将梯度投影法应用于关节极限位置限位中。 该算法中设计基于关节极限位置的优化指标, 并在主任务的零空间中完成任务优化。 此种思想也用于机械臂的奇异等指标优化中。 Colome 等 对比分析了速度级微分逆向运动学中的关节极限位置指标优化问题, 但是其研究中的算法存在一定的累计误差, 因而系统的收敛性和算法的计算稳定性难以得到保证。 其他学者综合多种机器人逆向运动学方法, 衍生出二次计算方法、 梯度最小二乘以及模糊逻辑加权最小范数方法等算法。Flacco 等 针对七自 由度机械臂提出一种新的零空间任务饱和迭代算法, 当机械臂到达关节限位时, 关节空间利用主任务的冗余度进行构型调整, 从而使得机械臂回避极限位置。 近年来, 关于关节极限回避情况下的冗余机械臂运动规划成为了很多学者的研究方向, 相应的改进 策 略 也 很 多.
ZC_Robot机器人技术
2020/10/28
6.8K2
七自由度冗余机械臂梯度投影逆运动学
机器人运动学和动力学:概念区分
机械臂是典型的多体系统,研究机器人操作能力,机械臂是典型的研究对象之一。关于机械臂的基本理论知识主要涉及到机器人的路径规划、轨迹规划、运动学以及动力学。机器人的相关概念具体如下所示:
ZC_Robot机器人技术
2020/10/04
8K1
机器人运动学和动力学:概念区分
推荐阅读
相关推荐
机器人动力学建模:机械臂动力学
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档