Skip to main content

应用服务器负载均衡

目标#

  • 实现系统处理客户端高并发请求的能力
  • 实现系统的高容错性
  • 实现系统处理客户端高并发请求能力的可扩展性

前提#

本章节所讲的处理能力是指应用服务器的运算能力,不包括网络数据吞吐量、数据读写速度等方面的能力。

实现原理#

为提高系统处理高并发请求的能力,并实现可扩展,需要部署多台应用服务器,并通过负载均衡服务器将客户端请求分发到后端的应用服务器上。

负载均衡

如上图所示,应用服务器#1应用服务器#n拥有相同的处理逻辑。客户端请求首先发送给负载均衡服务器,负载均衡服务器再根据特定的规则将请求分发到特定的应用服务器。

转发规则可以是轮询,即将请求依次转发给各个应用服务器,或根据客户端 IP 的 Hash 值将来自同一个客户端的请求转发给特定的应用服务器。

当负载均衡服务器接收到来自客户端的大量并发请求时,这些请求将被分发给不同的应用服务器,从而减轻了单台应用服务器对客户端并发请求的处理压力,提高了系统整体处理客户端并发请求的能力。

当一部分应用服务器发生故障而无法处理客户端请求时,负载均衡服务器会略过发生故障的应用服务器,继续将客户端请求转发给其他应用服务器,从而实现系统的容错性。

当系统处理客户端并发请求的能力达到上限时,可以通过增加应用服务器的方式提高系统处理客户端并发请求的能力。

NginX 配置#

假设有如下服务器实例

内网 IP 地址用途域名服务进程及端口
10.0.0.1负载均衡服务器api.proding.netnginx:80
10.0.0.2应用服务器#1 node:3000
10.0.0.3应用服务器#2 node:3000
10.0.0.4应用服务器#3 node:3000

负载均衡服务器的 NginX 配置

# 定义应用服务器列表
upstream api.proding.net {
ip_hash; # 根据 IP Hash 转发请求
server 10.0.0.2:3000;
server 10.0.0.3:3000;
server 10.0.0.4:3000;
}
# HTTP 服务
server {
listen 80;
server_name api.proding.net;
location / {
proxy_pass http://api.proding.net;
proxy_next_upstream http_500 http_501 http_502 http_503 http_504; # 当应用服务器发生错误时尝试将请求转发给下一个应用服务器
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}