Nginx+Swoole 负载均衡方案.
1. 前言
Nginx 提供了许多种负载均衡方案,比如轮询、ip_hash、等等。 基本上能满足大部分场合,在最新的项目中、根据项目特点、后期业务负载扩展考虑。提供一种Nginx+Swoole的新的负载均衡方案。
2. 项目特点
- Swoole 常驻内存、商家的订单、需要在内存中计算、并实时推送订单状态信息。比如成交、退款、等。因此要求每个商家都必须绑定到固定的计算节点。
- 商家有私有数据、用户数据全局。
3. 解决方案
- 登录网关采用 PHP-FPM + Nginx 实现.
- 1台服务器分配一个ID 从0 开始。
- 为每一台服务器等每一个进程计算节点进程分配一个id。从0 开始.
- 为商户创建一个商户+服务器ID+计算节点ID的绑定表。商户登录成功后。返回计算节点信息。后续业务在该计算节点完成。
3.1 商户+计算节点绑定表
例如: server_id = 1 node_id = 0 为1号服务器等0号进程. server_id=2 node=0 为2号服务器等0号进程.
字段名 | 字段类型 | 说明 |
---|---|---|
mid | bigint(20) | 商户ID |
server_id | int(11) | 服务器ID |
node_id | int(11) | 计算节点ID |
3.2 nginx 配置
全剧建立一个 host 到 服务器等映射表.
1 | map $http_host $s_backend { |
3.3 访问方法
1 | # 假定 0号服务器等3个计算节点监听的端口分别是 3000~3002 |
3.4 扩容升级
后续部署了新的服务器, 我们只需要在 map中增加一行 然后 执行 nginx -s reload 即可。
Nginx+Swoole 负载均衡方案.