论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
Nosql
›
【架构】应用掩护
【架构】应用掩护
欢乐狗
金牌会员
|
2024-8-30 22:45:24
|
显示全部楼层
|
阅读模式
楼主
主题
865
|
帖子
865
|
积分
2595
这篇文章总结一下应用掩护的本领。现在说到应用掩护,更多的会想到阿里的sentinel,本领丰富,应用简单。sentinel的限流、降级、熔断,可以自己去试一下,sentinel重要通过配置实现功能,不难。sentinel的简介放在末了。
但实在照旧有一些别的方式举行应用掩护的,这里简单总结下。
应用掩护的原因,是体系压力太大,负载过高,导致数据库慢查询,应用掩护的核心思想是,优先保证核心业务,优先保证大部分用户。
一,降级
所谓降级,就是由于负载过高,给调用者一个降级的相应。重要思想就是减少不必要的操作,保证核心业务可用。
降级逻辑
:
1,体系提供后门接口。
2,独立降级体系。
主动开关降级
:
必要提前写好前面的降级逻辑。
1,超时请求凌驾阈值
2,非常请求凌驾阈值
3,流量凌驾阈值
触发主动降级开关后,执行降级逻辑。具体来说,可以有下面几种例子。
举例,停止读数据库,准确效果转为近似效果,返回静态效果(猜你喜好由用户个性化推荐改为同一推荐);同步转异步(写多读少);功能裁剪(推荐干掉);禁止写(高峰期减少不必要的写);分用户降级;工作量证实 POW(验证码,数学题,拼图题等,滑块)。
二,熔断
与降级是自身服务出现问题返回降级效果差异,熔断是两个服务之间的调用出现问题导致的。
当下游服务出现问题时(慢相应甚至超时/非常),有大概拖慢自身服务的相应速度,或者自身服务的非常,也就是导致所谓的服务雪崩。因此必要对下游服务举行熔断打开熔断开关,期间不会访问下游服务,谓之“服务隔离”。过一段时间开关进入半开状态,放少量请求给下游服务,如果不满足熔断条件,就关闭熔断开关,如果依然满足熔断条件,就继承熔断,这就是所谓的快速失败。如此半开-快速失败,循环直到下游服务规复为止。
三,限流
顾名思义,是请求太多限制请求数。限流分为两种,基于时间的限流和基于资源的限流。
1,基于时间的限流
(1),基于请求总数的限制,如直播间凌驾100人,就不让进了。
(2),基于单元时间内请求数的限制。
基于时间的限流的实现,可以利用固定时间窗口、滑动时间窗口、漏桶算法、令牌桶算法。
其中,
固定时间窗口
的请求突刺问题最大;
滑动时间窗口
相比固定时间窗口,请求突刺问题要小一些,但是仍旧存在;
漏桶算法
是固定时间内放进来的请求个数存在上限。这种算法不存在请求突刺问题,但是必要配合队列存放请求,存放的请求个数超出队列长度,会出现服务器拒绝相应的问题。
令牌桶算法
是令牌桶固定时间内会发放指定个数的令牌,放进来请求必要消耗令牌,如果令牌消耗完了就无法访问服务器,必要等待令牌桶发放新的令牌。这种算法可以让请求突刺变得平滑一些,但是仍旧必要体系容忍肯定程度的请求突刺。
限流阈值的确定
可以提前举行压测,但是压测不肯定能完全反应线上的环境,大概必要先定一个阈值,然后长期观察和调优。降级/熔断/限流的开关阈值都是这样的。
基于时间的限流的调优思路,包括各级缓存,MQ的解耦,通过长连接给用户相应等。
2,基于资源的限流
对资源的限制,如连接池、线程池,以及队列等。
(1),池化技术:连接数,线程池。
(2),队列大小:请求队列。10个。
这种限流的难点是确定资源的大小。如确定线程池中线程数,可以先通过公式盘算出理论线程数的大小,然后通过压测+hippo4j[3]工具,可视化的观察基于理论线程数调优的表现,确定线程数。
因为线上的环境比较复杂,IO密集型、CPU密集型甚至混淆型,书中的公式不肯定完全得当线上环境,因此必要举行压测,结合可视化工具举行观察,以及线上的观察和调优。
下面是用于线程数盘算的公式,与盘算利用线程并行后得到的加速比的阿姆达尔定理,
公式1,《Java并发编程实战》
为保持处理器达到期望的使用率,最优的池的大小等于:
Nthreads = Ncpu x Ucpu x (1 + W/C)[1]
其中,
Ncpu = CPU的数量
Ucpu = 目标CPU的使用率, 0 <= Ucpu <= 1
W/C = 等待时间与计算时间的比率
复制代码
公式2,《Java 虚拟机并发编程》
线程数 = Ncpu /(1 - 阻塞系数)[1]
公式1与公式2计算得出,
阻塞系数 = W / (W + C),
即阻塞系数 = 阻塞时间 /(阻塞时间 + 计算时间)
复制代码
定理1,阿姆达尔定理
Amdahl定律,定律定义了串行体系并行化后的加速比盘算公式[1],
加速比 = 优化前系统耗时 / 优化后系统耗时
复制代码
加速比越大,表明体系并行化的优化效果越好。Addahl定律还给出了体系并行度、CPU数目和加速比的关系,加速比为Speedup,体系串行化比率(指串行执行代码所占比率)为F,CPU数目为N:
Speedup <= 1 / (F + (1-F)/N)
复制代码
四,隔离
隔离不是只有在熔断时对下游服务器举行隔离,广义上的隔离方式如下:
1,
数据隔离
:数据紧张性排序,也就要垂直分库、垂直分表。
2,
呆板隔离
:给紧张的用户单独配置服务器。用户的标识去路由。
3,
线程池隔离
:每个必要线程池的业务单独分配线程池。hystrix。
4,
信号量隔离
:给某个业务或请求单独分配一个计数器。hystrix。
5,
集群隔离
:对服务举行分组(在注册中心做这个事),如秒杀服务,单独分出一组服务给核心业务
6,
机房隔离
:差异的服务不要放在同一个机房。
7,
读写隔离
:搭建数据库的主从与读写分离,用户的create update delete \ select 请求也要举行相应的分离。
8,
动静隔离
:辨认动静态数据,举行分流与隔离。nginx,apache。
9,
爬虫隔离
:利用openrestry的user-agent, 对超出访问阈值的ip举行隔离
五,sentinel
在应用中引入sentinel的依靠,在接口上标注@SentinelResource注解,表示这个接口是一个sentinel资源,这样在搭建好的sentinel-dashboard中可以看到这个资源。
SentinelResource注解中,比较紧张的几个属性,value为资源名称,fallback是降级的兜底方法,blockHandler是限流的兜底方法[2]。
下面是dashboard截图。
sentinel流控规则
sentinel熔断规则
sentinel热点规则
sentinel授权规则
参考文章:
[1],Java并发(八)盘算线程池最佳线程数
[2],微服务系列:Sentinel 之 @SentinelResource 注解配置
[3],一个基于Java线程池管理的开源框架Hippo4j实践
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
欢乐狗
金牌会员
这个人很懒什么都没写!
楼主热帖
C# 读写文件从用户态切到内核态,到底 ...
LeetCode刷题100道,让你滚瓜烂熟拿下S ...
不到一周我开发出了属于自己的知识共享 ...
我的 Java 学习&面试网站又又又升级了 ...
SQL server 2008 r2 安装教程
基于梯度优化的混沌PSO算法matlab仿真 ...
x64dbg 配置插件SDK开发环境
KubeEdge在边缘计算领域的安全防护及洞 ...
Spring Boot 多数据源配置
开发日志02-解决`response`和SpringAop ...
标签云
挺好的
服务器
浏览过的版块
物联网
快速回复
返回顶部
返回列表