E-1.API网关基本概念

1.API网关结构

image.png

2.API网关功能

  • 请求接入:作为所有API接口服务请求的接入点。需要具有Netty框架NIO的功能,瞬间处理大量并发请求的能力。
  • 业务聚合:作为所有后端业务服务的聚合点。
  • 中介策略:实现安全,验证,路由,过滤,流控等跟业务能力无关的策略。对整个集群的高可用稳定性有很大关系。
  • 统一管理:对所有API服务和策略进行统一管理。

3.API网关分类

a.流量网关:关注整个大的微服务集群,流量非常大,对性能要求非常高

  1. 全局性流控:限制某个业务服务每秒钟的调用次数,或者每秒种发起的数据包大小。
  2. 日志统计
  3. 防止SQL注入
  4. 防止Web攻击:具有WAF网络应用防火墙的能力
  5. 屏蔽工具扫描
  6. 黑白IP名单
  7. 证书/加解密处理

b.业务网关:关注于业务,对单个服务本身/业务用户做一些扩展相关的保护

  1. 服务级别流控:例如对不同的用户分别做流控,进行更细粒度的保护流控设置。
  2. 服务降级与熔断
  3. 路由与负载均衡、灰度策略
  4. 服务过滤、聚合与发现
  5. 权限验证与用户等级策略
  6. 业务规则与参数校验
  7. 多级缓存策略

4.API网关应用

a.Zuul
Netflix公司开源的API网关系统,基于BIO。
image.png

b.Zuul 2.0
image.png
基于Zuul的Netty重构版,NIO,支持大量网络连接,能够在API网关的JVM进程里维持海量并发网络连接。扩展性好,适合业务网关,二次开发。
image.png

c.Spring Cloud Gateway
image.png
底层用Reactor Netty实现,NIO,支持大量网络连接,能够在API网关的JVM进程里维持海量并发网络连接。扩展性好,适合业务网关,二次开发。
image.png

d.OpenResty
image.png
在Ngnix基础上,通过Ngnix插件化的,整合进一个Lua脚本引擎,可以配置Lua脚本,使Ngnix具有编程能力,扩展了应用场景。可以使用OpenResty作为网关,使用Lua脚本做流控,服务管理等插件。性能好,适合流量网关。

e.Kong
image.png
封装了OpenResty的升级版,具有一键开箱的网关功能,以及配置了一个控制台。性能好,适合流量网关。

E-2.API网关实现