APIGateway 即API网关,全部请求首先会通过这个网关,而后到达后端服务,有点相似于Facade模式。API网关做为系统接口对外的统一出口,能够减小调用方对服务实现的感知。nginx
没有API网关时的结系统构以下图:由图能够看出,在没有API网关做为统一出口的状况下,须要调用方本身组合各类服务,并且容易让调用方感知后端各类服务的存在。spring
加入API网关时的系统结构以下图:由图能够看出,在加入了API网关以后,经过网关暴露接口给调用方,调用方能够在不感知后端服务的状况下调用服务,并且经过统一的接口,后端服务接口的变化不会影响调用方,后端服务变化能够经过网关的转换,对外仍然保持一致的风格。
后端
APIGateway的主要做用有:api
1.统一对外接口: 当用户须要集成不一样产品或者服务之间的功能,调用不一样服务提供的能力。利用APIGateway可让用户在不感知服务边缘的状况下,利用统一的接口组装服务。 对于公司内部不一样的服务,提供的接口可能在风格上存在必定的差别,经过APIGateway能够统一这种差别。 当内部服务修改时,能够经过APIGateway进行适配,不须要调用方进行调整 减小对外暴露服务能够增长系统安全性。安全
2.统一鉴权: 经过APIGateway对访问进行统一鉴权,不须要每一个应用单独对调用方进行鉴权,应用能够专一业务。服务器
3.服务注册与受权: 能够控制调用方可使用和不可使用的服务。架构
4.服务限流: 经过APIGateway能够对调用方调用每一个接口的每日调用及总调用次数限制负载均衡
5.全链路跟踪: 经过APIGateway提供的惟一请求Id,监控调用流程,以及调用的响应时间。框架
现阶段主要的开源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。