1. APIGateway是什么
APIGateway 即API网关,所有请求首先会经过这个网关,然后到达后端服务,有点类似于Facade模式。API网关作为系统接口对外的统一出口,可以减少调用方对服务实现的感知。
没有API网关时的结系统构如下图:由图可以看出,在没有API网关作为统一出口的情况下,需要调用方自己组合各种服务,而且容易让调用方感知后端各种服务的存在。
加入API网关时的系统结构如下图:由图可以看出,在加入了API网关之后,通过网关暴露接口给调用方,调用方可以在不感知后端服务的情况下调用服务,而且通过统一的接口,后端服务接口的变化不会影响调用方,后端服务变化可以通过网关的转换,对外仍然保持一致的风格。
2. APIGateway的作用
APIGateway的主要作用有:
1.统一对外接口: 当用户需要集成不同产品或者服务之间的功能,调用不同服务提供的能力。利用APIGateway可以让用户在不感知服务边缘的情况下,利用统一的接口组装服务。 对于公司内部不同的服务,提供的接口可能在风格上存在一定的差异,通过APIGateway可以统一这种差异。 当内部服务修改时,可以通过APIGateway进行适配,不需要调用方进行调整 减少对外暴露服务可以增加系统安全性。
2.统一鉴权: 通过APIGateway对访问进行统一鉴权,不需要每个应用单独对调用方进行鉴权,应用可以专注业务。
3.服务注册与授权: 可以控制调用方可以使用和不可以使用的服务。
4.服务限流: 通过APIGateway可以对调用方调用每个接口的每日调用及总调用次数限制
5.全链路跟踪: 通过APIGateway提供的唯一请求Id,监控调用流程,以及调用的响应时间。
3.开源API网关框架
现阶段主要的开源API网关框架有:spring zuul 和kong
1. spring zuul
Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。它的主要功能有:认证、压力测试、金丝雀测试、动态路由、负载削减、安全、静态响应处理和主动/主动交换管理。spring zuul 是spring Cloud的组件,可以和spring cloud的各个组件结合使用。
springCloud的整体组建包括:Zuul、Ribbon、EureKa、Fein、Hystrix等。其中Zuul就是一个类似APIGateway的组建,Ribbon是类似于Nginx的代理服务器,Eureka用于注册和发现服务,Hystrix可以作为整个架构的断路服务,用于服务降级。Fein可以作为一个Rest服务的提供者,可以供内部服务之间相互调用。
2. kong
Kong 是一个现成 的 api gateway 的解决方案,它在 nginx 上进行了开发。
api gateway 的实现方式有很多种,比如说 JVM 上可以用基于NIO 的框架比如Netty,Vertx,Spring Reactor,JOSS Undertow。现在一个比较流程的没有基于 JVM 的就是 NodeJs。其他的还有 Nginx Plus。
接下来,将对spring zuul的使用和组件做简单的介绍。