API Gateway Traffic Distribution / Load Balancing Configuration Method
本指南解释了如何优化Kong Gateway在集群和节点之间的流量分配和负载均衡策略,以确保高可用性和最大吞吐量。它参考了之前指南中涵盖的资源大小、集群配置、内存性能调优和扩展维度。
概念概述
Kong Gateway中的流量分配/负载均衡是什么?
流量分配是指如何将入站API请求路由到Kong Gateway集群及其节点,以确保CPU、内存和网络利用率的平衡。负载均衡确保没有单个节点或工作者成为瓶颈,从而实现水平扩展和容错。该方法包括配置:
- 网关扩展策略(垂直/水平)
- 节点级资源大小
- 内存缓存和插件队列优化
- 延迟/吞吐量敏感的设置
配置方法
方法1:基于集群负载的大小
实现最佳流量分配的第一步是根据工作负载类型和预期流量量对您的网关进行分类。使用下表定义初始系统边界:
集群大小 | CPU | RAM | 云实例示例 | 用例 |
---|---|---|---|---|
开发 | 1-2 核心 | 2-4 GB | AWS: t3.medium / GCP: n1-standard-1 / Azure: A1 | 开发/测试,低延迟敏感性 |
小型 | 1-2 核心 | 2-4 GB | AWS: t3.medium / GCP: n1-standard-1 / Azure: A1 | 轻量级生产,绿地流量 |
中型 | 2-4 核心 | 4-8 GB | AWS: m5.large / GCP: n1-standard-4 / Azure: A1v4 | 具有延迟需求的关键工作负载 |
大型 | 8-16 核心 | 16-32 GB | AWS: c5.xlarge / GCP: n1-highcpu-16 / Azure: F8s | 企业级、大规模集群 |
备注
避免在生产环境中使用限流实例类型(例如,AWS t2、t3)。CPU 限流在负载下会严重降低 Kong 的性能。
方法 2:内存分配与内存优化
内存缓存配置:
- 将 mem_cache_size 设置为尽可能大,同时为操作系统和相邻进程保留内存。
- 推荐基线:每个核心约 500MB
- 在一个 4 核心、8GB 的实例上:为 Kong 缓存分配 4–6 GB
- 缓存的数据包括路由、服务、插件等配置实体
插件队列缓冲:
- 像 http-log 这样的插件使用 queue.max_entries 进行异步事件缓冲
- 默认值:10,000
- 对于高吞吐量,尝试调整此值以避免内存溢出或消息丢失
- 每个插件队列是内存绑定的,应根据负载配置进行扩展
方法 3:按延迟/吞吐量维度扩展
Kong 的性能取决于:
- 延迟:每个请求的时间(内存绑定)
- 吞吐量:每秒请求数(CPU 绑定)
优化策略:
场景 | 优化重点 |
---|---|
对延迟敏感 | 增加数据库 + 插件缓存的内存 |
对吞吐量敏感 | 增加 CPU 核心;垂直/水平扩展 |
混合扩展(HA 设置) | 使用专用配置处理 |
在混合模式下启用 dedicated_config_processing,以卸载 CPU 密集型任务,例如在节点之间同步配置。
其他考虑事项
数据库负载影响
- Kong 仅在节点启动或配置更改时从数据库读取
- 资源需求取决于:流量、实体更改速率以及节点数量和启用的功能
- 使用内存缓存以减少数据库压力
- 在数据库暂时不可用的情况下,保持最小访问并进行回退(保持Kong Gateway正常运行)
监控的性能因素
跟踪和调整以下内容:
- 路由、服务、消费者和插件的数量
- 插件基数(多样的插件类型增加CPU负载)
- 请求/响应大小(大负载增加延迟)
- 工作区数量和元数据(每个工作区更多内存)
摘要
为了确保Kong Gateway中的流量均衡分配和最佳负载处理:
- 从适当的集群大小定义开始
- 根据缓存和插件队列需求分配内存
- 根据延迟与吞吐量的优先级进行调整
- 通过缓存最小化数据库依赖
- 通过CPU/内存配置和混合处理选项启用扩展
这些配置构成了使用Kong构建可扩展的生产级API网关的基础。