什么是缓存雪崩?服务器雪崩的场景与解决方案
来源:Leah 时间:2022-07-31 09:47:43阅读:0
什么是应用服务雪崩?
雪崩问题
分布式系统存在这样的问题。由于网络的不稳定性,任何服务的可用性都不是100%。当网络不稳定时,作为服务提供商,可能会被拖死,导致服务调用器堵塞,最终导致雪崩连锁效应。
缓存雪崩
当缓存服务器重启或大量缓存集中在一定时间段时,也会给后端系统(例如DB)数据库后端出现故障,导致应用服务器雪崩。
几种场景产生雪崩效应
流量激增:如流量异常,用户重试导致系统负载升高;
缓存刷新:假设A为client端,B为Server端,假设A所有系统请求都流向B系统,请求超过B会造成系统的承载能力B系统崩溃;
程序有Bug:代码循环调用的逻辑问题、资源未释放引起的内存泄漏等;
硬件故障:如停机、机房断电、光纤挖断等。
数据库瓶颈严重,如长期事务sql超时等。
线程同步等待:同步服务呼叫模式通常用于系统之间,核心服务和非核心服务共享一个线程池和消息队列。如果核心业务线程呼叫非核心线程,则非核心线程由第三方系统完成。当第三方系统本身出现问题时,核心线程被阻塞,并且一直在等待,过程之间的呼叫有加班限制,最终线程将被切断,也可能导致雪崩;
缓存雪崩解决方案
缓存失效的几种情况:
1、缓存服务器挂了
2.局部失效缓存在高峰期
3.热点缓存失效
解决方案:
1.避免不同的缓存集中故障key设置不同的超时时间
2.增加互斥锁,控制数据库请求,重建缓存。
3.增加缓存HA,如:redis集群。
雪崩的整体解决方案
一般来说,保护服务依赖主要有三种解决方案:
(1)熔断模式
该模式主要是指电路熔断器。如果线路电压过高,保险丝将熔断以防止火灾。在我们的系统中,如果目标服务呼叫缓慢或大量加班,此时,熔断服务呼叫,对于后续呼叫请求,不继续呼叫目标服务,直接返回,快速释放资源。如果目标服务有所改善,请恢复呼叫。
机器性能指标的重点监控
cpu(Load)cpu利用率/负载
memory内存
mysql监控长事务(这里和sql超时查询紧密结合,需要重点监控)
sql超时
线程数等
总之,除了cpu、除了内存和线程数,重点监控数据库端的长期事务sql加班等,绝大多数应用服务器的雪崩场景来自数据库端的性能瓶颈,导致数据库端的大量瓶颈,最终拖累应用服务器,最后是大面积的雪崩。
(2)隔离模式
这种模式就像按类型将系统要求划分为小岛一样。当一个小岛被点燃时,它不会影响其他小岛。
例如,线程池可以用于隔离不同类型的要求,每种类型的要求不会相互影响。如果一种类型的要求线程资源耗尽,则直接返回后续类型的要求,不再呼叫后续资源。该模型有许多使用场景,如拆卸服务,使用单独的服务器部署重要服务,或公司最近推广的多中心。
(3)限流模式
上述熔断模式和隔离模式均属于错误后的容错处理机制,限流模式可称为预防模式。限流模式主要是对各类型的最高要求QPS阈值,如果高于设定的阈值,请求将直接返回,后续资源将不再被调用。这种模式不能解决服务依赖的问题,只能解决系统整体资源分配的问题,因为没有流量限制的请求仍然可能导致雪崩效应。
熔断设计
熔断设计主要参考hystrix做法。最重要的是三个模块:熔断要求判断算法、熔断恢复机制、熔断报警
(1)熔断要求判断机制算法:每个熔断器默认维护10个无锁循环队列计数bucket,每1秒一个bucket,每个blucket默认错误超过50%,10秒内中断拦截20个请求,记录请求的成功、失败、加班和拒绝。
(2)熔断恢复:每隔5次需要熔断s如果部分请求通过,如果请求是健康的(RT<250ms)要求健康恢复。<250ms)则对请求健康恢复。
(3)熔断报警:对于熔断请求,如果异常请求超过某些设置,则报警。
隔离设计
一般采用两种隔离方式
(1)线程池隔离模式:使用线程池存储当前请求,线程池处理请求,设置任务返回处理超时间,并将积累的请求积累到线程池队列中。这样,每个依赖的服务申请线程池都需要有一定的资源消耗。其优点是可以处理紧急流量(当流量峰值到来时,数据可以存储在线程池组中缓慢处理)
(2)信号量隔离模式:使用原子计数器(或信号量)记录当前有多少线程在运行。请先判断计数器的值。如果超过设定的最大线程数,则丢弃更改类型的新请求。如果不超过,则执行计数操作请求,以计数器 1和返回计数器-1。这种方法是严格控制线程,立即返回模式,无法应对突发流量(当流量峰值到来时,处理的线程超过数量,其他请求将直接返回,不继续要求依赖的服务)
超时机制设计
(1)超时有两种,一种是要求等待超时,另一种是要求操作超时。
(2)等待加班:在任务进入队列时设置任务进入队列时间,判断队长任务进入队列时间是否大于加班时间,超过任务时丢弃任务。
(3)运行超时:直接可使用线程池提供的get方法。
如何提前发现雪崩?
首先,让系统不要雪崩,然后通过监控发现要求接近或超过阀值,然后根据具体情况进行处理。接近或超过阀值的过程可称为提前发现雪崩。
以上是雪崩应用服务场景和技术方案总结。如有问题,请联系微云网络在线客服!
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:shawn.lee@vecloud.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
本站原创内容未经允许不得转载,或转载时需注明出处:https://news.kd010.com/fwqjs/12180.html
TAG标签: