nodejs负载均衡(一):服务负载均衡
什么是负载均衡
负载平衡(Load balancing)是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到优化资源使用、大化吞吐率、小化响应时间、同时避免过载的目的。 使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。 主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题。 - wiki
负载均衡(Load Balance)是建立在网络协议分层上的,通过网络协议里面的处理将负载的作业合理的分摊到多个操作单元上。
所以针对网络协议层有不同负载均衡策略 2/3/4/7层负载均衡 ,负载均衡的实现分 软/硬 ,顾名思义:
- 一个是通过软件实现,成本低、灵活简单,缺点受服务器性能影响
- 一个是通过硬件,性能优于软负载均衡,但是成本高
nodejs能做哪些
先看下面的请求链路图(举个例子,实现方式、策略、架构等有很多)
- DNS、VIP、Nginx服务的负载均衡底层服务(云)或者运维已经搭建好了,不需node开发过多关心
- Nginx负载均衡到web服务集群,可以使用
upstream
模块配置不同策略 - 重点node单个服务负载均衡,主进程分派到多个子进程,这是属于软负载均衡
- 假如node服务要通过RPC调用远程其他服务,为了不影响其他服务,需要将RPC均衡分派到其他服务的不同节点上
结论:从上面看出3、4是nodejs服务可以做的,就是 服务负载均衡
和 rpc负载均衡
服务负载均衡
先了解一下nodejs cluster模块,下面是nodejs官方cluster例子代码
app.js
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = ; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
相关文章