API 网关
API 是 Application Programming Interface缩写,也就是应用程序接口。
API 在微服务中可以理解为一个功能方法,比如用户服务的微服务,可以对外提供:创建用户、删除用户、更新用户、查找用户等功能。
网关(Gateway)是指用于将所有用户的请求转发给后端的服务器,它就像自己拥有资源的源服务器一样,对请求进行处理。
API 网关是一个聚合多个不同 API 的统一入口,接管所有的入口流量,通常用于完成一些通用的功能,如认证、鉴权、限流、统计、监控等。
API 网关和 API 的区别主要在于一个是聚合工具,一个实际完成特定功能。
1. API 网关结构
一个 API 网关的基本功能包含了统一接入、协议适配、流量管理与容错、以及安全防护,这四大基本功能构成了网关的核心功能。网关首要的功能是负责统一接入,然后将请求的协议转换成内部的接口协议,在调用的过程中还要有限流、降级、熔断等容错的方式来保护网关的整体稳定,同时网关还要做到基本的安全防护,以及黑白名单等基本安全措施。
2. API 网关结构
采用微服务架构的系统本身是由很多的独立服务单元组合起来的。而客户端要调用系统,则必须通过系统提供的各种对外开放的 API 来实现。
没有网关不行吗?当然可以,直接调用提供的接口就可以了。那为什么还需要网关?因为网关的作用不仅仅是转发请求而已。
我们可以试想一下,如果需要做一个请求认证功能,我们可以接入到 API 服务中。但是倘若后续又有服务需要接入,我们又需要重复接入。这样我们不仅代码要重复编写,而且后期也不利于维护。由于接入网关后,网关将转发请求。所以在这一层做请求认证,天然合适。这样这需要编写一次代码,在这一层过滤完毕,再转发给下面的 API。所以 API 网关的通常作用是完成一些通用的功能,如请求认证,请求记录,请求限流,黑白名单判断等。
引入网关,就相当于在客户端和微服务之间加了一层隔离。通常,网关本身会和各个服务单元处于同一个机房,这样,客户端做业务操作的时候,只需要访问一次网关。然后剩下的事情,再由网关分别访问同在一个机房的不同的服务,再把拿到的数据统一在网关封装好,返回给客户端就好。
3. API 网关的好处
对于服务数量众多、复杂度比较高、规模比较大的业务来说,引入 API 网关也有一系列的好处:
- 聚合接口使得服务对调用者透明,客户端与后端的耦合度降低;
- 聚合后台服务,节省流量,提高性能,提升用户体验;
- 提供安全、流控、过滤、缓存、计费、监控等 API 管理功能。
4. API 网关的用途
4.1. 服务路由
- 静态路由策略配置
- 后端服务的软负载均衡
- 后端服务的心跳检查
- 参数分流
- 流量的镜像复制
4.2. 服务治理
- 服务限流,包括:基于QPS、Thread 限流方式;
- 降级与熔断,包括:响应时间RT、错误率的熔断策略以及手动降级策略;
- 服务容错,包括:failover、failfast、failback等多种容错机制。
4.3. 流量管理
- 路由管理,包括:基于黑白名单的路由规则;
- 负载均衡,包括:多种负载均衡规则;
- 参数分流,包括:基于参数取模、名单分流、权重分流等。
在每一个服务都做鉴权是一件很麻烦的事情,我们可以通过 go-micro 工具包 micro 中提供的 api 网关来做统一鉴权。另外,go-micro 在 go-plugins 中提供了 micro 权限 ...