当前位置:网站首页>分布式系统API网关原理及选型
分布式系统API网关原理及选型
2022-08-08 06:21:00 【ytttsam】
原文转载于: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.令牌桶算法
边栏推荐
猜你喜欢

pta补坑简单图论

cnn convolutional neural network backpropagation, convolutional neural network dimension change

结合实践总结docker 安装 mysql5.7

YoloV4训练自己的数据集(一)

“忙碌”的 Polkadot最新努力,对DOT投资者意味着什么?

基于FTP协议的文件上传与下载

Summary of digital IC design written test questions (4): some basic knowledge points

神经网络解决哪些问题,神经网络结果不稳定

在AWS CodeBuild中更新Lambda导致进程被占用(status error 255)的解决方案

李沐老师 PyTorch版——线性回归 + softmax回归的简洁实现(3)
随机推荐
【分布式】链路追踪 jaeger
Key technologies for 4G/5G spectrum resource coordination
独立成分分析ICA/FastICA
线程使用、控制、通信
Test and Debug
快要“金九银十”了,你开始准备了吗?
Nvidia Jetson Xavier安装中文输入法(googlepinyin)
Integer block sample
Maykle Studio - Deep Learning - BP Neural Network
leetcode 232. Implement Queue using Stacks 用栈实现队列(简单)
docker修改mysql配置文件
from sklearn import cross_validation 报错的解决方法
【RPC】Mercury RPC
tf.train.MonitoredTrainingSession 控制 checkpoint 保存数量
cnn卷积神经网络反向传播,卷积神经网络维度变化
oracle insert sql error
状态压缩复习
cnn convolutional neural network backpropagation, convolutional neural network dimension change
使用XGboost进行分类,判断该患者是否患有糖尿病
学习残差神经网络(ResNet)