经过六年的迭代与沉淀,腾讯 Tencent Server Web (以下简称 TSW) 这一公司级运维组件于今日正式开源。TSW 是面向 WEB 前端开发者,以提升问题定位效率为初衷,提供云抓包、全息日志和异常发现的 Node.js 基础设施。TSW 每天为百亿次请求提供稳定服务,广泛应用在 QQ 空间、微视、微云、QQ 音乐、全民 K 歌、腾讯云等三十多个重要业务当中。
官方网站:https://tswjs.org
Github 开源地址:https://github.com/Tencent/TSW
云抓包
TSW 支持用户维度的抓包
- 对于染色的用户
- 对请求生命周期内的抓包进行收集
- 提供抓包查看、下载等功能
- 抓包格式支持 Fiddler 和 Charles,以及 HAR
全息日志
TSW 提供用户维度的全息日志帮助开发者快速定位问题
- 对请求生命周期内的日志,采用全息的方式记录,形成流水
- 流水按用户维度聚合
- 提供查看功能,快速定位问题原因
异常发现
- 内置指标实时监控
- 代码异常推送告警
谁都在用?
源于直出
2012 年 10 月,TSW 第一版上线织云(一体化自动运维平台),Node.js 版本为 0.6.20。当时的功能十分简陋,只实现了服务端 JS 直出页面,可以说毫无运维可言,唯一的价值是可以让首屏体验更快。为了强化这个唯一的价值,实现了 gzip+chunked,边压缩边传输,可以让页面内容有节奏的回包,精确控制流式回包,对 Node.js 来说非常简单。
在浏览器里,想要 cookie 的时候通过上下文 window 变量就取到了,从来没有觉得取 cookie 是一件特别费劲的事。但到 Node.js 里就不同了,对于取 cookie 这么简单的需求,需要特别关注 request 对象在哪里。因为 request 对象是局部变量,无法全局获得,这就是问题的本质。
直到 2014 年,一种实现上下文的方法被发现,window 对象诞生。利用 process.domain 总是指向当前包裹自己的 domain 对象这一个特性来完成上下文自动切换。window 对象的本质是与 request 对象生命周期绑定的全局变量。你可以在任何时候通过 window 获取 request 对象,进而取得 cookie 等其它信息。
window 的出现,打通了不同维度间的联系,把这些联系落地,就可以产生新的价值。比如在 DNS 解析 API 中,是没有用户概念的,用户存在于更高维度中,高维对低维不可见,通过 window 对象,低维度里可以知道正在为哪个用户做解析服务。当解析结果有问题时,知道影响了哪个用户,通过用户也能回朔到解析过程。维度之间不是单纯的依赖关系,而是密切配合的关系。这就导致了 TSW 的代码在组织方式上,需要无条件高内聚,不能以模块的方式单独存在。为了收集这些联系,需要有配套的存储、查看系统。这些系统最终演进为 TSW 开放平台(tswjs.org)。
兴于抓包
有个问题一直困扰着我们:为了解决某个问题,抓包一小时,代码一分钟,抓包效率严重影响着定位问题的效率。在这样的背景下,TSW 提出服务端云抓包的解决方案。与用户端抓包相比,不用再关注用户端网络环境、位置、接入层协议等问题。
只抓请求包和响应包远远不够,使用上下文对象,对其强化。在请求处理过程中,利用上下文,将衍生请求进行关联抓包,构成全息抓包;将衍生日志进行关联,构成全息日志。对于一次请求,能看到所有维度的日志和抓包,是一件很自然的事。最后把日志和抓包落地供查看。对于不符合预期的请求,可精确给出问题原因。从结果看,团队整体的研发效率得到了质的提升。
久于运维
公司内顶尖的前端开发,分布在各种类型的产品中,想让他们成为用户,先要突破部门墙。运维这个维度是有机会破墙的。A 业务和 B 业务的运维很大可能是同一波人。就像引力波,可跨越空间维度,直接抄近道,不用绕着本维空间跑。因此 TSW 选择在运维上发力,而不是在代码如何编写上,与开源库飚车。
安装 1 台 Node.js 是技能,安装 1000 台是运维。安装和升级,应该看成一个运维问题来解决掉。Node.js 版本,大家都知道迭代很快,如果每个版本都有业务在用,就有多个运维对象。提供多个版本供业务选择看起来很民主,但是,好的运维是减少运维对象。
能不能统一升级只维护一个版本?统一升级又遇到新的挑战:CPP 扩展是和 Node.js 版本强相关的,只升 Node.js 还不够,扩展也需要统一维护。为了找出来所有的 CPP 扩展,TSW 动用了监控,对业务私有扩展邮件告警,然后纳入 TSW 统一维护。统一维护加速了 TSW 的迭代速度,版本强一致规避了迭代带来的代码腐化问题。
前端开发之间交流 JS 毫无问题,但对运维同学来说,是方言,这时就需要能讲普通话。拿启动逻辑来说,一个 Node.js 程序炫技式启动,挂了的时候,只有开发知道怎么拉起来,这就十分尴尬。再拿扩缩容举例,运维扩缩容后,需要动代码才能上下线,那就是有问题的。织云经过多年积累,运维自动化程度达到了自助级别,TSW 在标准化上,选择入驻织云。当需要安装、重启、升级 TSW 时,到织云点一下按钮就好了。
盛于开源
TSW 已经具有很强的稳定性和业务通用性。Node.js 在前端界目前已经具有相当的热度和欢迎度,TSW 作为 Node.js 基础设施,在公司内部已经得到了开发团队以及运维团队的认可,本次将 TSW 开源,在业界进一步增强 TSW 的技术影响力,同时也进一步完善和优化 TSW。
转自 https://ift.tt/2x1kUZi
The post 腾讯 Node.js 基础设施 Tencent Server Web 正式开源 appeared first on Linuxeden开源社区.
https://ift.tt/2kb3Qqs
没有评论:
发表评论