系统过载保护机制

电脑杂谈  发布时间:2020-06-08 23:07:58  来源:网络整理

冰箱过载保护器原理_过载保护原理_过载保护器的原理

最近,我们小组开发了一种过载保护服务,以解决由于服务或站点过载而引起的系统雪崩问题. 最近,我研究了基础实现,它仍然非常有帮助. 接下来,我们将介绍过载保护的功能和功能. 原理.

一个. 过载保护的作用

我们在这里开发的过载保护的主要目的是避免由于服务中接口调用的累积而导致整个服务不可用. 这里的通话累积可能有两个原因

1. 接口的访问量突然增加,达到通常高峰呼叫量的几倍甚至几十倍. 原因可能是该产品增加了与峰值活动类似的要求,并且在峰值时界面调用数量激增.

过载保护器的原理_冰箱过载保护器原理_过载保护原理

2. 由于某些联机状态下接口的更改,接口的执行时间从10ms更改为50ms. 尽管50ms的执行时间是正常的,但如果调用者对当前接口的访问量达到50次/秒,则将导致请求累积,因为当前的服务接口只能支持20次/秒.

我们知道,对接口的每次调用通常都是由线程处理的. 如果对接口的调用由于时间过长而激增或阻塞,则它将累积,导致对其他接口的请求累积. ,这会影响其他接口的正常调用,并最终导致整个服务挂起. 这种情况是不可接受的.

例如,现在有一个接口A调用其他人的服务A. 该服务A由于其自身的原因而超时,然后该接口A将响应超时. 如果呼叫者大量调用此接口A,它将有大量请求. 此时,即使接口B(呼叫服务B)的状态正常,也将受到接口A超时的影响,最终整个服务将不可用.

总而言之,我们的过载保护系统是为了防止服务挂起或大量超时而导致请求累积,从而影响整个系统的产品. 这在我们的代理服务(封装大量其他人的服务)中尤其重要,因为代理服务封装了许多其他人的服务,并且由于某些服务异常而无法挂起整个代理服务,这会影响我们整个系统.

过载保护原理_过载保护器的原理_冰箱过载保护器原理

两个. 过载保护的实现原理

实施过载保护主要是为了限制对当前接口的调用次数,也就是说,同时,对当前接口的最大调用次数为N(N是我们自己设置的值),以确保同时调用该接口的最大数量不超过N,以实现过载保护. 例如,接口A上的大量超时导致请求累积,但是由于我们添加了过载保护,因此最多N个请求将同时调用接口A,并且我们将丢弃其他请求以保护整个系统. 下面简要介绍过载保护的实现原理

我们使用唯一标识符作为具有过载保护的接口的键过载保护原理,可以将其简单地理解为类名+方法名作为键(不考虑重载),因此每个接口都有一个唯一的标识符,我们使用变量计数来记录每个接口的当前调用次数,并且该方法的唯一标识符存储在Map中. 每次调用此接口时,我们执行count + 1,然后在该接口执行后执行count-1操作,以限制同时对当前接口的最大调用次数. 这里我们可以使用代理或来实现过载保护功能. 我们小组开发的过载保护使用方法(不一定是最好的),在需要过载保护的每个接口调用之前和之后添加一个,前端负责当前接口密钥的count + 1,并且后方是1. 实现原理实际上是如此简单.

如果当前接口上的呼叫数超过最大呼叫数(在容量扩展之后),则在预中直接引发异常过载保护原理,并且超出了过载保护限制,并且该请求被拒绝.

过载保护器的原理_冰箱过载保护器原理_过载保护原理

在特定的实现中,我们使用队列来实现过载保护. 每次拦截之前,我们都会排入一个对象. 该对象包括当前时间(用于进行超时判断),线程ID和其他数据. 当进行拦截时,执行出队操作以实现count + 1和-1的功能.

三个. 需要注意的问题

1. 需要支持自动扩展,添加当前系统负载是正常的,并且所有指示灯也都正常. 由于重新启动服务,因此会累积少量的接口请求,而不是大量的超时累积,我们应该支持这种少量的累积,而不是丢弃多个点,您可以在此处使用自动扩展机制. 当请求数达到最大限制N时,我们将扩展N,例如N * 2,它可以处理少量的对接请求,但是扩展需要版本. 我们开发的内容不能超过N的初始设置的4倍. 目前,它还没有拦截正常的请求积累,当大量超时发生时,它仍然可以起到限制过载保护的作用.

2. 必须确保正确执行每个接口调用之前的“接口调用计数” +1和接口调用之后的“接口调用计数” -1,否则将浪费资源,即当前系统状态应允许要执行的接口不小心触及了过载保护机制,同时,必须在丢弃之前检查计数,例如当前计数是否正确以及是否有已执行但没有计数的接口有-1.

冰箱过载保护器原理_过载保护器的原理_过载保护原理

这是我们使用队列的原因之一. 在删除每个请求之前,我们检查队列的头节点是否有效以及是否超时. 如果头节点异常,我们将丢弃头节点,请求继续加入团队,这解决了接口是否完成但团队未执行的问题.

3. 此外,我们还完成了一些系统监控工作. 如果接口请求花费的时间太长,我们将从团队获得线程ID,并将线程信息输出到日志中. 同时,我们还监视核心数据,例如CPU和内存. 当发现CPU,内存和其他资源紧张时,我们不允许自动扩展来保护我们的系统.

四个. 过载保护可能引起的问题

性能消耗,前后,计数,扩展等都会对系统性能产生一定的影响. 目前,在测试系统性能时,我们发现过载保护将减少系统的性能瓶颈并消除过载. 保护,qps也可以增加很多.

摘要: 过载保护在系统中起着重要作用. 过载保护并不能改善我们的系统性能,而只能为我们的系统提供保证,以避免由于异常而导致系统的整体不可用. 当系统达到性能瓶颈时,非常有必要拒绝一些请求以保护我们系统的整体可用性.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/dianqi/article-238749-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...