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网关的基础。