中间件

随着后端业务系统的增加,需求纵向不断扩展,一个业务系统已经无法满足需求了,这时就需要一个统一请求的过滤层,这就是中间件,中间件常见的用途有:IP过滤、防爬虫、解析请求、合并接口、合并端口、cookie处理、参数校验、权限校验、异常处理、负载均衡、反向代理等,业务系统就可以关注点集中在业务层,隔离这些基础设施,让开发者专注于业务以提高开发效率。

中间件技术选型要求:
高并发、传输快、非阻塞(NIO)

常见的???nodejs、netty、go,这里介绍下nodejs

网上很多使用nodejs作中间层采用的是express,这里介绍的是koa2,Express是第一代最流行的web框架,它对Node.js的http进行了封装,而koa是Express的下一代基于Node.js的web框架,目前有1.x和2.0两个版,这里使用的是2.0.

koa结合koa2-proxy-middleware实现反向代理功能,koa2-proxy-middleware可以根据业务自定义转发的URL,同时可以配置请求、响应的事件监听,用于打印请求参数、修改请求头、修改响应等:

router:function(req){

let url = req.url

return "127.0.0.1:80"

}

这里修改转发的服务地址.

pathRewrite:function(req){

let url = req.url

return "/api/user/login"

}

这里修改转发业务url

onProxyReq:function(proxyReq, req, res){

proxyReq.setHeader(‘Conche-Control‘, ‘no-cache‘);

}

这里修改请求头、打印请求参数等

onProxyRes:function(proxyRes, req. res){

}

这里可以获取响应,并修改响应。

记录日志可以使用大家都熟悉的log4js,可以按天记录日志,方便查找,如果需要大型日志系统也可以接入ELK

部署的话可以直接源码运行(如:node index.js),也可以使用pkg、JXCore、webpack打包出来,推荐使用webpack打包成一个js文件(如index.js)后,使用pm2运行(如:pm2 start index.js),node index.js方式运行的话如果运行过程中报错了可能整个服务都停止了,pm2就不会,pm2会自动重启,pm2主要特性:

    • 内建负载均衡(使用Node cluster 集群模块)
    • 后台运行
    • 0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
    • 具有Ubuntu和CentOS 的启动脚本
    • 停止不稳定的进程(避免无限循环)
    • 控制台检测
    • 提供 HTTP API
    • 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互

相关推荐