微服务架构中加入API Gateway(API网关)作用
一般也会把路由,安全,限流,缓存,日志,监控,重试,熔断等都放到 API 网关来做,然后服务层就完全脱离这些东西,纯粹的做业务,也能够很好的保证业务代码的干净,不用关心安全,压力等方面的问题。
可选方案:
- Zuul: Netflix Zuul,作为Spring cloud 中的一员,作为其中的api gateway,为服务架构提供前置保护作用。属于Spring cloud体系中,所以基于Java, Spring boot ,可以更好的集成到系统中。
- Kong: Kong 是一个现成 的 api gateway 的解决方案,它在 nginx 上进行了开发。
本文主要根据以上二种方案进行压力测试,选择哪种方案会在生产环境中更好?
压力测试方案我们采用Spring Cloud Gateway Benchmark作为基础方案,该方案开源源码查看如下地址:https://github.com/exceedzhang/spring-cloud-gateway-bench,方案wrt和Jmeter测试4种部署在同一服务器上的4种不同网关,如下图所示:
根据官方测试结论增加geteway后性能会大幅下降,Spring Cloud Gateway性能最优,表现最好。
经过我们测试之后发现,官方结论基本正确。Spring Cloud Gateway性能最优、稳定性最好,但和Zuul性能差距相差并不如官方描述如此巨大。具体参考我们的测试结果如下图所示:
在这个项目基础上我们又测试Kong网关,还是访问no proxy(8000) web server,Kong网关监听80端口再转发到8000端口。测试结论:使用Kong网关几乎没有任何性能消耗,性能到1600次/秒,增加安全鉴权后访问也没有明显性能下降。Kong提供路由、日志、均衡负载、性能监控、安全机制已符合API Gateway功能要求,同时性能比Spring Cloud Gateway至少提供数倍。因此在生产环境中选用Kong,在开发环境中使用Spring Cloud Gateway。开发环境中工程师通过配置可以方便控制服务路由,而不需要再重新搭建Kong的环境时间API Gateway,2者结合可以使用。
小工蚁新零售平台部署架构图如下图所示:
图片来源网络,侵权联络删除