【喜欢的话可以一键三连+关注哦~】 你的三连+关注是对我最大的支持!
以统计次数为例:左:单个调用,中:AOP切面,右:API网关
用户调用过程:
AOP切面执行顺序
(上图)用户调用某个接口,在调用AOP切面
API网关执行顺序
(上图)用户调用网关,调用某个接口,再回来统计次数
AOP切面的作用
能够在调用每个接口前、每个接口后、每个接口前后去做一些事情
可以看一下项目里aop包下的两个类
AOP切面的缺点
只存在于单个的项目中,多个项目中每个项目都要引入AOP切面那个包(SDK)
API网关
类似于火车的检票口,统一去检票
API网关的优点
统一去进行一些操作、处理一些问题
API网关的应用场景(作用)
1.路由(相当于路由器、中转站、酒店前台)
起到转发的作用。比如有接口A和接口B,网关会记录这些信息,根据用户访问的地址和参数,转发请求到对应的接口(服务器/集群)
用户访问:
/a => 接口A
/b => 接口B
注意:“ => ” 代表转发到
a.负载均衡
在路由的基础上可以转发到随机的某一个机器
用户访问:
/c => 服务A/集群A(随机转发到其中的某一个机器)
注意:“ => ” 代表转发到
从固定地址改成lb:xxx
2.统一鉴权(鉴别权限)
判断用户是否有权限进行操作,无论访问什么接口,我都统一去判断权限,不用重复写。
3.统一处理跨域
网关统一处理跨域,不用在每个项目里单独处理。
4.流量染色
给请求(流量)添加一些标识,一般是设置请求头中,添加新的请求头
为了防止用户跳过网关直接访问接口
全局染色:Spring Cloud Gateway
5.访问控制
黑白名单,比如限制 DDOS IP
6.统一业务处理
把一些每个项目中都要做的通用逻辑放到上层(网关),统一处理。
比如API接口平台项目中的次数统计
7.发布控制
灰度发布,比如上线新接口、某个接口的新版本,先给新接口分配20%的流量,老接口80%,在慢慢调整比重。
8.统一接口(业务)保护
a.限制请求
b.信息脱敏
c.降级(熔断)
【兜底】万一服务器挂了也可以返回一些东西(比如:您的接口以下线)
d.限流
每分钟或每秒让用户访问多少次
建议先去学:学习令牌桶算法,学习漏桶算法,学习一下RedisLimitHandler
e.超时时间
10秒没返回强制中断
f.重试(业务保护)
9.统一日志
统一的请求、响应信息记录
10.统一文档
将下游项目的文档进行聚合,在一个页面统一查看
建议用这个:1.1 介绍 | Knife4j (xiaominfo.com)
API网关的分类
1.业务网关(包含:微服务网关)会有一些业务逻辑,作用:将请求转发到不同的业务/项目/接口/服务
2.全局网关(包含:接入层网关)作用:负载均衡 、请求日志等,不和业务逻辑绑定 【把大流量分摊成小流量,分摊到每一个机器上】
参考文章:kong网关-CSDN博客
实现
1.Nginx(全局网关)、Kong网关(API网关,Kong:官网)【个人不建议使用,编程成本相对高一点】
2.Spring Cloud Gateway(取代了Zuul)性能高、可以用 Java 代码写逻辑,适于学习