腾讯tsw server 框架初探
介绍
TSW 是一个支持抓包、全息日志、监控的基于 Node.js 的 web server。 说人话 就是一个内置了日志采集、请求上报能力的 http-server。
我们可以把 TSW 看作是 Nginx 这样的 Web-Server,也可以将其看作 Koa+一些内置基础逻辑来实现的一个小型服务器
为什么使用 TSW
大概是为了避免自己去处理日志存储、抓包相关的能力吧. TSW 提供了如下一些能力:
- 基于多核多进程的负载均衡
- 优雅重启
- 错误监控、性能监控; 告警推送
- 日志记录、存储;
- 染色抓包
TSW 的安装
目前 TSW 官方提供了三种方式,然而 npm 的方式显然不知道该如何操作, 从 tsw 代码组织来看,目前作为 npm 包来用是不太现实的。(官方文档中也没有给出 npm 安装方式如何配置和使用 纠正: 这里纠正已经可以 npm 安装,请期待官网更新)。因此我们暂且使用 git clone 的方式。
1 | git clone https://github.com/Tencent/TSW.git |
显然这是把 TSW 仓库的代码当做一个 webserver 代码来用。clone 之后,再安装其自身的依赖:
1 | cd TSW |
官方文档里这里使用的命令是 npm install --no-optional
。 但实际上,从 TSW 的 package.json 中可以看到 TSW 自身并没有任何 optionalDependencies,所以文档里的安装命令显然是多余的 (提醒: 这里官网会进行修复)。
目录结构
我这里只介绍几个对我们来说有用的
– conf 这是 TSW 的配置目录
– bin 这是 TSW 的主要核心程序
– index.js 负责引用和启动 TSW 核心程序
– examples 这是业务站点的目录
大概可以了解了:
- conf 目录是配置 TSW 的(如端口、监听 IP 等信息)
- examples 目录下是我们的业务逻辑,里面有个 framework 目录,可以支持独立的 koa 或 express 等类型的框架
启动入口
通过 TSW/conf/config.js 可以发现,其直接把 examples/framework/config.js
导出,因此我们可以直接在 framework/config.js
中配置站点。
另外注意到 framework/config.js
中有引用路由的一段代码:
1 | // 路由 |
1 | // router.js |
因此,TSW 启动后,其实是加载了 router.js 中定义的路由,从而启动到对应的 framework 业务框架。
而对于业务框架来说,则不需要再自己启动 webserver,只需要将对应的 handler 暴露给 TSW 即可. 例如对于 KOA 来说,可以这样:
1 | module.exports = app; |
贡献
TSW 在社区方面还存在明显不足,我的浅显感知有以下不足:
- 代码规范和开源社区配套差
- 文档不足
- 必须拷贝源码使用,无法基于 npm 生态使用
从 TSW 所解决的问题来看,感觉是在增强 web 开发的基础能力(如日志、监控等),避免重复开发。但换个角度想,这难道不应该做成一个 web 框架,而为何要做成一个 web-server 呢?
1 | business --> web framework --> web-server --> nginx |
TSW 目前定位在 web-server 这里,但实际上做的事情并不像真正的 webserver 最应该关注的,但这个定位使得开发者可以自由选择 express、koa 等框架;如果退后一步定位再 web framework 层,我觉得也是个很好的解决方案,像 egg/think 一样,既能提供该有的日志等能力,又能提供更多简化 web 开发的能力。
后面可以研究下能否协助参与改进