流量网关和业务网关

流量网关

  • 全局性流控
  • 日志统计
  • 防止 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.0Gateway 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监控。