分布式系统API网关原理及选型

原文转载于:https://www.cnblogs.com/ttaall/p/13712855.html

什么是网关?

两个独立的局域网之间通信的桥梁/ 或可以理解为外部所有请求都会打在网关上,网关对请求分发路由等处理,隐藏了内部服务的各种API接口

网关作用及功能

1. 动态路由   根据请求路由到对应的服务上去,如果服务不可用还会有重试机制

2. 负载均衡   多服务器提供同一种服务,网关会从注册中心拉取各服务注册信息,然后将请求负载均衡处理

3. 流量控制   限制流量 避免内部系统受到冲击

4. 统一鉴权  网关对相关权限验证 (请求者的访问权限,还可实现SSO单点登录)

5. 熔断降级 当服务不可用或者访问量过大,网关可以将请求做降级  打到其他服务器或者做其他处理,提示用户暂时不可用

6. 灰度发布 只给少量服务器升级,通过网关将少量的服务打到已升级的服务器用来测试升级的服务器,大量请求还是打在老版本服务器

7. 日志服务  服务访问情况报表,请求吞吐量,并发数,日常告警

常用网关框架

Zuul  SringCloud对应的网关  

Kong   Nginx + Lua 在Nginx运行的Lua应用程序

网关涉及原理

协议转换 : 每个系统使用的协议不同(http,grpc,dubbo协议)  通过网关进行协调统一

链式处理 : 网关处理请求类似责任链模式  经过各个过滤器处理请求

异步请求 : 网关中线程数量有限,每个线程带着请求去访问服务 然后等待服务访问结果返回   这个过程是很浪费时间的,在高并发下无法完成  

异步请求 工作线程不必要等待服务返回结果就可以去处理下一个请求,网关的Reactor线程专门负责select轮询 Socket访问结果,一旦发现有结果返回 就通知工作线程来处理返回结果

网管实现动态路由:

动态路由(不必要每次服务地址变动都要重新配置网关重新启动)

原理:

可以在网关数据库建一张表,用来存储不同服务对应的配置信息。然后配置一个前端入口,每次动态的在页面修改配置信息完成数据库修改。

后端网关路由读取这张表完成配置

限流概念

高并发架构三要素: 缓存 + 降级 + 限流

限流的类型:  

1.并发量限流, 例如每秒限制100个请求,在一定时间范围内限制和请求频率

2.请求频率限流, 例如来自某个ip/某个用户的请求,限制每秒钟请求不能超过5次

3.上传下载速率, 例如限制某个用户的下载速度最多 100KB/S, 在下载场景下比较常用,比如一些资源下载站会限制普通用户的下载速度,只有购买会员才能提速,这种限流的做法实际上和请求频率限流类似,只不过一个限制的是请求量的多少,一个限制的是请求数据报文的大小。

限流后的处理:被限流的请求会如何响应

1.抛弃,直接抛异常或直接跳转一个友好页面

2.排队,利用消息队列起到消峰和限流作用

3.降级,直接做降级处理,例如商品详情页只返回容易查到的最基础商品数据(兜底数据),复杂数据不再查询直接返回。 

限流方式:

1.接入层限流,如Nginx,网关处入口实现请求路由+限流,如果是及网关集群 还需要利用分布式中间件,将请求数量等信息共享

2.池化技术限流,如利用Hystrix的线程池,线程池+等待队列这种形式实现限流

限流算法:

1.固定窗口算法,

2.滑动窗口算法,

3.漏桶算法,

4.令牌桶算法

猜你喜欢

转载自blog.csdn.net/qq_28581269/article/details/121664834
今日推荐