Skip to content

扩容说明

网关组件 gateway 为无状态服务,可根据流量需求进行水平扩展。

水平扩展

网关扩容

网关本身不直接对外暴露端口,而是通过接入层 access 统一接收外部请求后转发。因此扩容网关只需要新增 gateway 实例并指向同一控制台即可:

shell
# 新增 gateway 实例
./gateway --address 0.0.0.0  --port 7002 --console <控制台IP:PORT>

所有 gateway 实例从同一控制台拉取配置,行为一致。访问层会自动将请求负载分发到各 gateway 实例。

接入层扩容

当外部请求量超过单台 access 的处理能力时,可部署多台 access 实例:

shell
# access 实例 1
./access --address 0.0.0.0 --port 7080 --console <控制台IP:PORT>

# access 实例 2
./access --address 0.0.0.0 --port 7080 --console <控制台IP:PORT>

多台 access 上层需配置负载均衡器(如 DNS LB 或云厂商 LB),将流量分发到各 access 节点。

扩容架构示意

                        ┌─────────────────┐
                        │  Load Balancing │
                        └────────┬────────┘

                 ┌───────────────┼───────────────┐
                 ▼               ▼               ▼
          ┌────────────┐ ┌────────────┐ ┌────────────┐
          │ access 1   │ │ access 2   │ │ access N   │
          └─────┬──────┘ └─────┬──────┘ └─────┬──────┘
                │              │              │
          ┌─────┴──────┐ ┌─────┴──────┐ ┌─────┴──────┐
          │ gateway 1  │ │ gateway 2  │ │ gateway N  │
          └─────┬──────┘ └─────┬──────┘ └─────┬──────┘
                │              │              │
                └──────────────┼──────────────┘

                        ┌──────┴──────┐
                        │   Console   │
                        └─────────────┘

扩容注意事项

连接数限制

单个 gateway 实例有最大连接数限制(由系统 ulimit 配置决定)。扩容前需关注以下指标:

指标说明
HTTP 连接数当前活跃 HTTP 连接,接近上限时需扩容
SSE 连接数长连接场景下需额外关注
CPU 使用率请求处理密集时优先关注
内存使用率插件或大响应体场景下需关注

建议在连接数达到上限的 70% 时触发扩容。

状态管理

gateway 为无状态服务,不存储业务数据:

  • 路由、服务、插件等配置从控制台拉取,各实例配置一致
  • 请求日志直接写入日志服务,不依赖本地存储
  • 监控指标按实例独立统计,控制台汇总展示

因此网关实例可以随时增加或减少,无需数据迁移

有状态组件限制

控制台 console 和日志服务 logg 为有状态组件,目前仅支持单节点部署。即使扩容网关,控制台仍为单点。

控制台和日志服务即使宕机,也不会影响网关的正常请求代理,仅影响配置变更和日志查询。

接入层与网关的对应关系

access 通过控制台动态发现 gateway 实例列表,将请求均衡转发。新增或移除 gateway 实例后,access 会自动感知无需重启。

扩容流程

1. 确定扩容指标

根据监控数据判断是否达到扩容阈值:

  • 网关 HTTP 连接数持续高位
  • 请求响应时间增加
  • CPU/内存使用率过高

2. 新增节点

在新增服务器上启动 gateway:

shell
./gateway --address 0.0.0.0 --port 7001 --console <控制台IP:PORT>

确认启动日志无异常后,新节点自动加入服务。

3. 验证

  • 确认控制台仪表盘显示新增节点
  • 确认接入层自动识别新节点
  • 观察请求错误率无异常

4. 缩减节点

直接停止目标 gateway 进程即可,正在处理的请求会断开,接入层会自动将新请求转发到其他可用节点。

最佳实践

多机房部署

各机房部署独立的 gateway 集群,所有实例连接至同一控制台。接入层根据地理位置将流量调度到最近机房。

资源规划参考

场景单节点建议配置
低流量(<1K QPS)1 核 2G
中等流量(1K-10K QPS)2 核 4G
高流量(>10K QPS)4 核 8G

实际性能取决于插件复杂度、请求体大小和并发连接数,建议以实际压测为准。

优雅关闭

停止 gateway 时建议发送 SIGTERM 信号,网关会等待正在处理的请求完成后退出:

shell
kill -TERM <gateway_pid>

如需强制停止可使用 SIGINT,但可能导致部分请求中断。