1. 微服务网关的重要性
想象一家外卖平台,同时需要处理用户下单、骑手调度、支付回调等服务。若每个请求都让客户端直接访问微服务,不仅会增加服务间耦合,还会让安全、限流等逻辑重复开发。微服务网关如同「流量调度中心」,统一处理路由、鉴权、限流等非业务逻辑。
传统单机限流(例如Express中间件)在分布式场景下存在局限:缺乏全局视角、动态配置困难。这正是Kong和APISIX的舞台——它们以API Gateway身份,为企业级流量管理提供标准化解决方案。
2. Kong网关:OpenResty生态下的老牌选手
2.1 Kong的安装与基础路由
docker run -d --name kong \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=your_postgres_host" \
-p 8000:8000 \
-p 8001:8001 \
kong:3.0.0
# 添加路由规则(假设服务名为order-service)
curl -i -X POST http://localhost:8001/services \
--data name=order-service \
--data url='http://backend-service:3000'
curl -i -X POST http://localhost:8001/services/order-service/routes \
--data 'paths[]=/api/v1/orders'
注释:通过管理端口8001创建服务与路由,将/api/v1/orders
的流量代理到后端服务
2.2 请求限流实战:令牌桶算法
# kong.yml(声明式配置)
plugins:
- name: rate-limiting
config:
minute: 100 # 每分钟允许100次请求
policy: local # 单节点计数器策略
fault_tolerant: true
routes:
- paths: ["/api/v1/orders"]
注释:通过rate-limiting
插件实现基础限流,注意policy
参数的选择对分布式一致性有直接影响
3. APISIX网关:云原生时代的后起之秀
3.1 动态路由与插件热加载
# 创建限流路由规则(APISIX Dashboard操作)
route:
uri: /api/v1/payments/*
plugins:
limit-count:
count: 200
time_window: 60
key: remote_addr
rejected_code: 429
upstream:
nodes:
"payment-service:4000": 1
注释:使用limit-count
插件实现IP级限流,策略修改后无需重启生效
3.2 熔断降级:基于故障比例的弹性策略
plugins:
proxy-rewrite:
uri: "/v1/iot/device-status"
api-breaker:
break_response_code: 503
unhealthy:
http_failures: 5 # 连续5次错误触发熔断
min_fails: 3
healthy:
success_count: 2 # 恢复2次成功请求则关闭熔断
注释:当后端服务连续出现5次错误,APISIX会自动切断流量,避免雪崩效应
4. 核心功能对比分析
特性 | Kong | APISIX |
---|---|---|
底层架构 | 基于Nginx + OpenResty | 基于Nginx + LuaJIT + etcd |
配置生效速度 | 依赖数据库同步(秒级) | 实时生效(毫秒级) |
插件生态 | 官方插件数量多,社区成熟 | 官方插件质量高,部分企业定制插件 |
分布式限流 | 需依赖Redis集群 | 原生支持ETCD/ZooKeeper协调 |
经验提示:中小型项目可用Kong的local
策略简化部署,高并发场景必须选择redis
策略保证全局一致性
5. 生产环境踩坑指南
5.1 缓存导致配置不生效
# Kong强制刷新缓存
curl -X POST http://localhost:8001/cache/reload
# APISIX无需操作,所有配置实时生效
开发常见误区:误以为修改配置后立即生效,实际需要关注缓存机制
5.2 熔断阈值设定陷阱
# 错误示范:将错误率设置过低
healthy:
success_count: 1
unhealthy:
http_failures: 2
# 可能导致系统在偶发异常时频繁熔断
推荐值参考:熔断触发阈值应高于业务实际容错能力20%-30%
6. 典型应用场景分析
电商秒杀系统
使用APISIX的动态限流快速应对突发流量,通过Prometheus实时监控QPS波动物联网设备管理
Kong的JWT插件统一鉴权,搭配自定义插件解析MQTT协议头金融支付链路
双网关架构:APISIX处理外部API请求,Kong管理内部服务间通信
7. 技术选型决策树
- 是否需要灰度发布和动态路由? → 选APISIX
- 是否已有PostgreSQL运维经验? → 选Kong
- 是否需要处理WebSocket长连接? → 选APISIX
- 是否需要对接旧有Java系统? → 选Kong(更完善的企业支持)
8. 总结与展望
Kong像传统重型卡车:配置严谨但灵活性受限,适合已形成技术体系的企业。APISIX则像新能源跑车:爆发力强但需要谨慎驾驶,适合快速迭代的互联网团队。未来随着Service Mesh的普及,网关角色可能向「边缘计算+网格控制面」方向演进。