构建千万级高可用企业级Node.js应用学习笔记

142 阅读3分钟

第二章:运筹帷幄之中,决胜千里之外-Node.js APM (应用监控)的概念及实践

  1. APM(javadoop.com/post/apm)
  2. 火焰图(www.ruanyifeng.com/blog/2017/0…
  3. node-clinic && autocannon(juejin.cn/post/684490…
  4. QPS&TPS image.png
  5. Graphite 和 Grafana 简介(yumminhuang.github.io/post/graphi…)

第三章: 进可攻,据可守-如何在生产环境部署一个稳定的 Node.js 应用

image.png

image.png

image.png

最终:

image.png

负载均衡

image.png

image.png

  • 在第四层之后,开始传输数据了
  • 如何理解lvs不需要握手,nginx需要
    • LVS是工作在网络的第四层(传输层)的负载均衡服务器,它的主要功能是根据预定的策略将网络连接分发到后端的服务器上。在这个过程中,LVS并不会直接参与到TCP的握手过程中,实际上它只是“透明”的将客户端的连接请求转发到选定的后端服务器,然后由后端服务器完成TCP三次握手过程。换句话说,当一个TCP连接请求到达LVS时,LVS并不会创建一个新的TCP连接或者关闭一个已有的TCP连接,它只是将这个连接请求转发到后端的服务器。所以我们说LVS“不需要握手”。而Nginx则不同,它既可以工作在网络的第四层(如TCP负载均衡),也可以工作在网络的第七层(如HTTP负载均衡)。当Nginx作为一个反向代理服务器时(也就是工作在第七层),它需要接收客户端的TCP连接请求,完成TCP三次握手过程,然后再根据HTTP请求的内容,决定如何处理这个请求或者将这个请求转发到后端的服务器。因此,我们说Nginx“需要握手”。
服务负载均衡

image.png

image.png

image.png

image.png

RPC负载均衡

image.png

总结:

  • nodejs服务端应用存在服务负载均衡和RPC负载均衡两个概念
  • 服务负载均衡使用Nodejs cluster模块进行管理,分布式RPC负载均衡有许多相关算法
node应用优雅退出

image.png

image.png

一般模式下优雅退出juejin.cn/post/723248…

// 监听信号
process.on('SIGTERM', ()=>{
    // 关闭http连接
    server.close(()=>{
        if(err){
            // 退出nodejs进程
            process.exit(1)
        }
        process.exit(0)
    })
})

这样就,即使服务停掉,已接收的http会继续响应,不会立即报错

集群模式下优雅退出

image.png image.png image.png image.png

大厂如何发布一个版本

发布模式:github.com/Yanwenhui0/…

image.png

健康检查

健康检查和apm监控的区别:健康检查检查的数据很少

pm2

不使用pm2: 当nodejs代码有一部分逻辑错误的时候,用户访问会导致服务挂掉,此时即使再走正确的逻辑,服务挂了也不会有返回了

使用pm2: 当nodejs代码有一部分逻辑错误,被用户访问,返回报错,但是不会导致应用挂掉,其他用户走正确逻辑的时候,是能正常访问的

pm2可以用于python、nodejs等应用,eggjs不推荐使用pm2

image.png

第四章:知己知彼,百战百胜-Node.js 应用日志的收集与处理

image.png github.com/sindresorhu…

第五章 无懈可击,坚如磐石-提高Node.js应用运行的稳定性