`

海量数据处理系列(二)系统过载保护

    博客分类:
  • java
阅读更多
前言:前段时间在网上看到腾讯后台开发总监bison分享的一篇文章《浅谈过载保护》,读来受益匪浅。

刚好自己也在处理系统请求过载的问题,把自己的一些心得体会总结出来拿来与大家一起探讨。

      在bison的文章中谈到:对于延时敏感的服务,当外部请求超过系统处理能力,如果系统没有做相

应保护,可能导致历史累计的超时请求达到一定的规模,像雪球一样形成恶性循环,由于系统处理的每个

请求都因为超时而无效,系统对外呈现的服务能力为0,且这种情况不能自动恢复。我们的系统就是要尽

量避免这种情况的出现,下面将详细来分析一个现实中的案例。

一  有过载问题的系统



数据处理流程:

       1) 前端将请求发送给数据解析及转发系统,

       2)数据解析及转发系统将封装好的数据发送后台数据请求,设置超时时间(假设300ms),线程同步等待处

理结果从后台返回。

      3)在300ms内正确返回结果后,则将处理的结果返回给前端,如果在300ms内超时,则将数据发送到一次超

时处理系统(假设设置超时时间500ms),线程同步等待结果返回。

      4)在500ms内正确返回结果后,则将处理的结果返回给前端,如果再一次超时,返回一个默认的处理结果给前

端,后端对数据进行本地化,然后可以将数据发送到离线处理系统进行二次处理。

       数据解析的机器为多核,数据解析及转发系统采用的是单进程多线程模型,在前一篇文章《海量数据处理系列

之Java线程池使用》详细描述了多线程处理的实现,采取的是无界队列线程池的实现,这样从客户端来的请求,会被

这样处理:

      1)  如果线程池中有空闲线程,会将请求直接交给线程处理。

      2)  如果没有空闲线程,就将请求保存到任务队列。

假设开50个线程,每个线程秒平均处理一个请求,那么系统每秒可以处理的最大请求数是50个。一旦前端数据请求超

过50个每秒,在任务队列中将会堆积大量的请求,前台不断发送过来,后来处理不过来,前端又设置了套接字超时,导

致队列中的大量请求超时,直接使得后端线程从队列中取出套接字解析的时候,套接字已经被前台关闭了,引发I/O异常。

堆积的量一旦雪崩,将使前台发送过来的请求全部I/O异常,后台处理系统跟挂掉无异了。

二  相对完善的系统





在上面的系统中,对请求是来者不拒的状态,具体来讲就是将所有的请求都保存到任务队列。请求堆积到一定程度,

队列中的很多请求都超时,这是可以采取清空请求队列的方式,这个可以通过采取一定的监控方式来实现。例如上图

中的心跳监控模块,它可以通过这样的方式来实现,就是模拟客户端的请求,每隔一定时间发送一些请求过去,如果

有大部分都正常返回,说明后端处理系统正常;当出现大部分超时的时候,说明后台系统已经挂掉了,这时候重启数

据解析及转发系统,清空系统中的任务请求队列,这样可以暂时处理请求高峰期的情况。

      但是这个方式也是治标不治本的,后台最多只能处理这么多请求,重启后照样会导致大量堵塞导致系统又挂掉,

然后监控系统又重启,这样会使得很多的请求没有得到有效的处理,大大降低系统的处理能力。为了保证后台系统每

时每刻都最大限度的发挥自己的处理能力,当负载超过系统自身的处理能力时,拒绝该请求。拒绝后可以将该请求本

地系列化,保存相关的数据发送到离线数据处理系统进行处理。

   在前一篇文章《海量数据处理系列之Java线程池使用》第四节中有界队列线程池使用中有提到这种方式的具体实现。

以上面的系统为例,有界线程池可以这样配置,corePoolSize为30,maximumPoolSize为50,有界队列为

ArrayBlockingQueue<Runnable>(100)。

这样系统在处理请求的时候采用如下策略:

1) 当一个请求过来,线程池开启一个线程来处理,直到30个线程都在处理请求。

2) 当线程池中没有空闲线程了,就将请求添加到有界队列当中,直到队列满为止。

3) 当队列满以后,在开启线程来处理新的请求,直到开启的线程数达到maximumPoolSize。

4) 当开启的线程数达到maximumPoolSize后,任务队列又已经满了后,此时再过来的请求将被拒绝,被拒绝的请求

在本地系列化,将保存的数据同步到离线数据系统进行处理。

        海量数据处理都是采用分布式的,每台机器的处理能力有限,可以将请求分布到不同的机器上去。如果每台机器被

拒绝的请求数过多的时候,就要考虑添加处理的机器了。
分享到:
评论

相关推荐

    颚式破碎机液压过载保护系统的设计

    对颚式破碎机的液压过载保护系统进行了设计,使机器在过载时反应灵敏、安全可靠、能自动排除故障,并能快速自动复位恢复正常工作,通过PLC控制,实现了破碎机破碎过程和过载保护的自动化,对于提高生产率,保障机器的正常...

    电机反时限过载保护在煤矿企业中的应用研究

    为了解决煤矿企业生产过程中电机容易被烧坏的问题,需要对电机电流进行检测,以实现对电机的过载保护。在建立电机过载保护数学模型的基础上,结合企业生产的实际情况,提出了一套适用于PLC的电机反时限过载保护方案,给出...

    如何实施异构服务器的负载均衡及过载保护

    1)service的负载均衡、故障转移、超时处理通常是RPC-client连接池层面来实施的 ...4)过载保护,是在负载过高时,service为了保护自己,保证一定处理能力的一种自救方法 5)动态权重法,还可以用做service的过载保护

    电源的过载保护电路

    电源的过载保护电路,同 时具有温亚效果

    自制有过载保护功能的供电器.doc

    但很多乡镇广播电视站均采用简易的熔断器保护的供电器,这种保护方法对几十安培的特大电流反应灵敏,而对十多安培以下的过载电流仍可维持长期不熔断。但此时供电器的变压器就会因超过额定功率而烧毁,这种情况时常...

    摆线针轮减速器过载保护装置的研究

    针对摆线针轮减速器在使用过程中因过载、使用不当而造成的减速器内零部件损坏现象,以一级摆线针轮减速器为原型,经过系统分析研究,提出一种过载保护装置,并对该过载保护装置进行了具体阐述。

    Nginx添加第三方模块实现过载保护

    基于web网站的Nginx添加第三方模块实现过载保护,

    简单实用的直流电源短路、过载保护电路

    保护电路的元器件只有 10 个,具有电源短路保护、停电自锁、过负荷电流保护功能 ( 过负荷电流大小可调节设定 )非常实用........

    破碎机过载保护问题探讨与改进

    介绍了皮带轮传动双齿辊破碎机的过载保护结构,针对其使用及维护过程中的常见故障,分析原因,并提出了优化改进思路。

    矿用减速器过载保护的设计

    减速器作为矿用设备的核心部件,在井下出现故障的情况较多,尤其是遇到过载、堵转时,若保护措施不到位时极易造成损坏,为此对系统进行分析,提出简便经济的保护措施,并经过实践调试,现场验证,保证了矿用减速器的正常运行...

    链传动设备过载保护装置研究

    为了解决链传动装置应力集中、极易过载损坏的问题,设计了一款新型链传动保护装置,对保护装置中安全销直径、剪切应力环槽结构及尺寸计算进行了分析,同时介绍了安全销材料和挤压强度选择方法。整个保护装置结构简单、...

    煤电钻综合保护装置的过载保护设计

    针对煤电钻及综合保护装置在煤矿井下经常出现过载运行等现象,在对煤电钻过载保护原理进行分析的基础上,采用基于单片机技术,对煤电钻综合保护器中过载保护部分电路进行设计,既避免煤电站因过载而频繁启动,又能在其...

    PLC控制系统中电动机过载保护方法的探究.pdf

    #资源达人分享计划#

    基于PLC的掘进机电机过载反时限保护

    目前在掘进机过载保护的算法中常常采取定时限的过载保护算法。结合掘进机电机在使用过程的特点和现场使用情况,分析了几种典型的反时限过载保护特性,提出了一种基于PLC的电机过载反时限保护算法的参数。

    基于stm32的过载保护系统

    基于stm32的过载保护系统设计,电压或者电流、温度过线,过载时会声光报警。esp8266实现wifi连接手机查看电压和电流数据。资料含源码和原理图,手机wifi app。源码使用c语言编写,keil开发工具。oled显示电压和电流和...

    基于单片机控制的颚式破碎机过载保护系统

    针对此提出了以单片机控制为核心的颚式破碎机过载保护系统。该系统将计算机控制应用到颚式破碎机上,使设备机构更加简单,并且自动化程度、安全性和可靠性等性能大幅度提高。重点介绍了该系统的工作原理,保护装置组成...

    三木 TT-01系列过载保护装置选型手册(英文).pdf

    三木 TT-01系列过载保护装置选型手册(英文)pdf,三木 TT-01系列过载保护装置选型手册(英文)

    三相电动机过载保护正转控制电路图

    本文主要讲了三相电动机过载保护正转控制电路图,希望对你的学习有所帮助。

    刨煤机过载保护销设计方法研究

    借助经验参数和理论分析,对刨煤机过载保护销的设计理论进行了研究,提出了过载保护销直径的设计方法及主牵引链最大载荷的确定方法,分析了刨链极限力及刨头堵塞距离对保护销的影响。

Global site tag (gtag.js) - Google Analytics