经过六年的迭代与沉淀,腾讯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。

腾讯Node.js基础设施TSW正式开源 1相关推荐

  1. 腾讯Node.js基础设施TSW正式开源

    经过六年的迭代与沉淀,腾讯Tencent Server Web (以下简称TSW)这一公司级运维组件于今日正式开源.TSW是面向WEB前端开发者,以提升问题定位效率为初衷,提供云抓包.全息日志和异常发 ...

  2. 腾讯 Node.js 基础设施 Tencent Server Web 正式开源

    开发四年只会写业务代码,分布式高并发都不会还做程序员? >>>   经过六年的迭代与沉淀,腾讯Tencent Server Web (以下简称TSW)这一公司级运维组件于今日正式开源 ...

  3. php围棋源码,腾讯围棋AI技术 PhoenixGo 正式开源,源码、模型全公开

    5 月 11 日,腾讯微信团队研发的 PhoenixGo 正式开源,这也是国内第一个开源的围棋 AI 项目. PhoenixGo 是腾讯微信翻译团队开发的人工智能围棋程序,旨在学习人工智能前沿技术.从 ...

  4. 腾讯围棋AI技术PhoenixGo正式开源 1

    5月11日,微信团队研发的PhoenixGo正式开源,这也是国内第一个开源的围棋AI项目. PhoenixGo是腾讯微信翻译团队开发的人工智能围棋程序,旨在学习人工智能前沿技术.从1月底开始,Phoe ...

  5. 腾讯可视化, 低代码生成器,正式开源!

    点关注公众号,回复"1024"获取2TB学习资源! 腾讯tmagic-editor是一个所见即所得的页面可视化编辑器,实现零代码/低代码生成页面,可以快速搭建可视化页面生产平台,让 ...

  6. 腾讯: 可视化, 低代码生成器,正式开源!

    欢迎关注方志朋的博客,回复"666"获面试宝典 腾讯tmagic-editor是一个所见即所得的页面可视化编辑器,实现零代码/低代码生成页面,可以快速搭建可视化页面生产平台,让非技 ...

  7. 小程序 node.js mysql_基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)...

    高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+Think ...

  8. node mysql商城开发_GitHub - Ssipon/nideshop: NideShop:基于Node.js+MySQL开发的开源免费商城(api服务器端)...

    NideShop商城(服务端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+ThinkJS+MySQL ...

  9. node 小程序 php,基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)...

    高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+Think ...

  10. 基于Node.js+MySQL开发的开源微信小程序商城(微信小程序)部署环境

    在网上搜到小程序设计的项目,下载前辈的代码到本地环境,接下来需要如何部署代码到本地,并能够看到完整的效果展示. 服务器端: https://github.com/tumobi/nideshop Nid ...

最新文章

  1. 我在学python-你们以为我在学C加加?其实我在学Python!人生苦短!
  2. 汉语转拼音pinyin4j
  3. 蒙特卡罗(Monte Carlo)方法
  4. matlab-高数 polar 极坐标系 绘制阿基米德线,心形线
  5. VMware虚拟机:桥接、NAT、Host-only(仅主机)上网方式的区别
  6. python批量导入MongoDB数据库
  7. HDU - 4757 Tree(LCA+可持久化trie树)
  8. 随记一个C的毫秒级群PING
  9. css-三种基本选择器
  10. Android 系统性能优化(45)---Android 多线程
  11. Java反序列化漏洞研究
  12. LeetCode 5382. HTML 实体解析器
  13. PHP实现手机归属地查询API接口
  14. PostgreSQL on Docker部署是的shm配置注意
  15. 西门子变频器G120选型、快速调试参数
  16. li标签中,img居中显示
  17. 使用vue3+vite+cesium,在地图上显示图标,并且点击实体弹出消息框
  18. 无法远程连接到计算机 凭证,远程连接凭据不工作如何处理_远程桌面连接提示凭据无法工作的解决教程-win7之家...
  19. 用java实现猜数字游戏程序:基础、偏移、三次机会、是否继续玩
  20. 云计算day04-Docker容器

热门文章

  1. 悉尼大学INFO1112Assignment1课业解析
  2. JavaScript 每日一题 #11
  3. 用计算机中的知识秀恩爱,用你的专业,说最美的情话......
  4. Real-Time Rendering——9.9.4 Rough-Surface Subsurface Models粗糙表面地下模型
  5. git 将本地master分支代码提到远程develop分支
  6. 为什么人人都爱油炸食物?
  7. 网页html教学反思,教学反思怎么写
  8. 使用selenium和chromedriver实现12306抢票
  9. c语言小蜜蜂编程题,C语言经典题目“小蜜蜂“代码.docx
  10. 圆角半角数据库_SQL SERVER 全角和半角的解决方法