流量网关和业务网关
流量网关
- 全局性流控
- 日志统计
- 防止 SQL 注入
- 防止 Web 攻击
- 屏蔽工具扫描
- 黑白名单控制
业务网关
- 请求接入:作为所有 API 接口服务请求的接入点,管理所有的接入请求;
- 业务聚合:作为所有后端业务服务的聚合点,所有的业务服务都可以在这里被调用;
- 中介策略:实现安全、验证、路由、过滤、流控,缓存等策略,进行一些必要的中介处理;
- 统一管理:提供配置管理工具,对所有 API 服务的调用生命周期和相应的中介策略进行统一管理。
开源网关
目前常见的开源网关大致上按照语言分类有如下几类:
- Nginx+lua:Open Resty、Kong、Orange、Abtesting gateway 等
- Java:Zuul/Zuul2、Spring Cloud Gateway、Kaazing KWG、gravitee、Dromara soul 等
- Go:Janus、fagongzi、Grpc-gateway
- Dotnet:Ocelot
- NodeJS:Express Gateway、Micro Gateway
按照使用数量、成熟度等来划分,主流的有 4 个:
- OpenResty
- Kong
- Zuul/Zuul2
- Spring Cloud Gateway
ABTesingGateway
项目地址:
https://github.com/CNSRE/ABTestingGateway
Zuul/Zuul2
https://github.com/Netflix/zuul
Zuul 1.x
Zuul 2.x
Spring Cloud Gateway
https://github.com/spring-cloud/spring-cloud-gateway/
OpenResty/Kong/Zuul2/SpringCloudGateway 重要特性对比
网关 | 限流 | 鉴权 | 监控 | 易用性 | 可维护性 | 成熟度 |
---|---|---|---|---|---|---|
Spring Cloud Gateway | 可以通过IP,用户,集群限流,提供了相应的接口进行扩展 | 普通鉴权、auth2.0 | Gateway Metrics Filter | 简单易用 | spring系列可扩展强,易配置 可维护性好 | spring社区成熟,但gateway资源较少 |
Zuul2 | 可以通过配置文件配置集群限流和单服务器限流亦可通过filter实现限流扩展 | filter中实现 | filter中实现 | 参考资料较少 | 可维护性较差 | 开源不久,资料少 |
OpenResty | 需要lua开发 | 需要lua开发 | 需要开发 | 简单易用,但是需要进行的lua开发很多 | 可维护性较差,将来需要维护大量lua脚本 | 很成熟资料很多 |
Kong | 根据秒,分,时,天,月,年,根据用户进行限流。可在原码的基础上进行开发 | 普通鉴权,Key Auth鉴权,HMAC,auth2.0 | 可上报datadog,记录请求数量,请求数据量,应答数据量,接收于发送的时间间隔,状态码数量,kong内运行时间 | 简单易用,api转发通过管理员接口配置,开发需要lua脚本 | "可维护性较差,将来需要维护大量lua库 | 相对成熟,用户问题汇总,社区,插件开源 |
Kong
https://konghq.com/
https://github.com/kong/kong
主要有三个组件
- Kong Server :基于nginx的服务器,用来接收API请求。
- Apache Cassandra/PostgreSQL :用来存储操作数据。
- Kong dashboard:官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api。
Kong采用插件机制进行功能定制,插件集(可以是0或N个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,目前已有几个基础功能:HTTP基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及Nginx监控。