MiroService--APIGateWay

如何理解API网关:

API网关是服务器,是系统的唯一入口,从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部构架,为每个客户提供了一个定制的API。它可能还具有其他职责,如 身份验证,监控,负载均衡,缓存,请求分片管理,静态相应处理

核心要点是:所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。

API网关划分为以下两种:
1 单节点网关
在这里插入图片描述
2 Backends for frontends 网关
在这里插入图片描述
好处:
服务使用了多种协议,因为不同的协议有不同的应用场景,比如可能同时使用HTTP,
AMQP,gRPC等。
服务的划分可能随着时间而变化。
服务的实例or Host+端口可能会动态的变化。
前端的UI需求可能会有以下几种:
粗粒度的API,而微服务通常提供了细粒度的API,对于UI来说,如果要调用细粒度的API可能需要调用很多次,这是个不小的问题。
不同的客户端设备可能需要不同的数据。web,H5,APP
不同设备的网络性能,对于多个API来说,这个访问需要转移的服务端会快的多。

API网关可以解决以上所有问题

落地方案:
通常情况下,API网关要很多工作,它作为一个系统的后端总入口,承载着所有服务的组合路由转化等工作,除此之外,我们一般会把安全,限流,缓存,日志,监控,重试,熔断等放到API网关来做,所以在高并发的情况下,这里可能会出现一个性能瓶颈。

Java 生态很大,先找开源项目支持,而且本身API网关也是高可用,如果做不好,最先挂掉的不是你的其他服务,而就是这个API网关。

Tyk:Tyk是一个开放源码的API网关,它是快速、可扩展和现代的。Tyk提供了一个API管理平台,其中包括API网关、API分析、开发人员门户和API管理面板。Try 是一个基于Go实现的网关服务。

Kong:Kong是一个可扩展的开放源码API Layer(也称为API网关或API中间件)。Kong 在任何RESTful API的前面运行,通过插件扩展,它提供了超越核心平台的额外功能和服务。

Orange:和Kong类似也是基于OpenResty的一个API网关程序,是由国人开发的,学姐也是贡献者之一。

Netflix zuul:Zuul是一种提供动态路由、监视、弹性、安全性等功能的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。

apiaxle: Nodejs 实现的一个 API 网关。

api-umbrella: Ruby 实现的一个 API 网关。
在这里插入图片描述

在使用者眼中的API网关:
在这里插入图片描述
网关所处的位置:
在这里插入图片描述
聊聊Zuul网关的工作原理: 开源 API Gateway服务器,本质上是一个web servlet应用。SpringCloud 已经集成
整体处理流程图:(提前学习了解大概流程)

在这里插入图片描述
1 Zuul本身是一个Servlet
2 HttpServlet Request 请求到达Zuul Servlet
3 通过ZuulFilter Runner, 并且根据routing filter类型执行filter链。
4 根据FilterType类型不同,执行的熟悉怒不同且完成不同的功能。
pre:在请求被路由之前调用,可实现日志监控,身份认证,黑名单等功能等
route:在路由请求时候调用
post:在route和error过滤器之后被调用,可实现审计,统计等功能
error:处理请求时发生错误是被调用,可实现统一的异常处理等功能
5 Request Context:在请求生命周期中共享变量
6 Filter的实现是可插拔的
脚本实现Filter
发布到filter目录中
由filter manager与filter loader自动加载

请求的生命周期:
在这里插入图片描述
1 拦截请求
2 根据filter类型,执行已加载的filter chain
3 返回请求

SpringCloud 可选择Zuul,已经很好地集成