CN110287013A - 基于java多线程技术解决物联云端服务雪崩效应的方法 - Google Patents
基于java多线程技术解决物联云端服务雪崩效应的方法 Download PDFInfo
- Publication number
- CN110287013A CN110287013A CN201910561945.3A CN201910561945A CN110287013A CN 110287013 A CN110287013 A CN 110287013A CN 201910561945 A CN201910561945 A CN 201910561945A CN 110287013 A CN110287013 A CN 110287013A
- Authority
- CN
- China
- Prior art keywords
- thread
- task
- internet
- things cloud
- maximum
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了基于JAVA多线程技术解决物联云端服务雪崩效应的方法,用于物联云系统,包括:先利用java线程池构造器,然后根据系统参数分别计算及设置线程池的核心线程数、最大线程数以及最大队列长度;然后再进行任务的接收及处理。本发明的方法可在不影响物联云其他正常功能和性能的前提下,通过对物联云系统内部JAVA线程池的改造,达到解决物联云系统的雪崩效应的目的。
Description
技术领域
本发明涉及互联网技术领域,特别涉及一种基于JAVA多线程技术解决物联云端服务雪崩效应的方法。
背景技术
目前,物联云系统已经作为普遍的智能电视平台出现在我们面前,而细致分析物联云系统我们可以发现,当使用物联云用户到达峰值时(即用户请求数到达一定阈值),将会导致后续用户请求进入排队等待或者请求直接被拒绝的情况,这些请求排队到一定程度后,就可能直接导致了物联云系统雪崩效应的产生。国内现有的解决方案有:设置负载均衡权重调度规则,支持对云端服务优先级的升降进行调控。权重调度规则是指单位时间内失败次数超过阈值的微服务优先级降到最低,然后再按照最佳响应时间规则选择其他优先级更高的微服务;单位时间可以设置,默认是5分钟,阈值默认是20次,尽可能将请求分配至另外可用的、优先级高的服务器上,以解决部分雪崩效应,而该方法的缺点是没有完全解决雪崩效应,少部分用户的请求,依旧能达到响应时间高的不可用的服务器上。
发明内容
本发明的目的是克服上述背景技术中不足,提供一种基于JAVA多线程技术解决物联云端服务雪崩效应的方法,可在不影响物联云其他正常功能和性能的前提下,通过对物联云系统内部JAVA线程池的改造,达到解决物联云系统的雪崩效应的目的。
为了达到上述的技术效果,本发明采取以下技术方案:
基于JAVA多线程技术解决物联云端服务雪崩效应的方法,用于物联云系统,包括以下步骤:
A.利用java线程池构造器,创建线程池并由主线程进行调用;
B.分别计算及设置线程池的核心线程数、最大线程数以及最大队列长度;其中,最大线程数大于核心线程数;
C.当有任务进来后首先判断线程池中线程数是否小于核心线程数,若线程数小于核心线程数则创建线程执行任务;否则,进入步骤D;
D.判定当前是否设有任务缓存队列,若不是,则创建任务缓存队列并将任务加入新创建的任务缓存队列中,否则,则进入步骤E;
E.判断任务缓存队列的队列长度是否小于最大队列长度,若是,则将当前任务放入任务缓存队列中,否则进入步骤F;
F.判断当前线程数是否小于最大线程数,若是,则创建线程执行任务;否则,执行拒绝策略。
进一步地,若物联云系统每秒需要处理的最小任务数量为n1、处理每个任务所需要的时间为t1,则所述步骤A中核心线程数应大于n1/(1/t1)。
进一步地,若物联云系统在80%的情况下每秒需要处理的任务数小于或等于n2;则所述步骤A中核心线程数等于n2/(1/t1)。
进一步地,若物联云系统允许的任务最大的响应时间为t2;则所述步骤A中最大队列长度等于(核心线程数/t1)*t2。
进一步地,若物联云系统每秒需要处理的最大任务数量为n3,所述步骤A中最大线程数等于(n3-最大队列长度)*(核心线程数/n2)。
进一步地,所述拒绝策略为将任务加入主线程进行处理
本发明与现有技术相比,具有以下的有益效果:
相对于现有技术中是针对服务器端的负载均衡技术,本发明的基于JAVA多线程技术解决物联云端服务雪崩效应的方法,使用的是JAVA多线程技术,且针对的点是云端服务的内部,其中,JAVA多线程技术解决云端服务雪崩效应是用户请求已经进入到服务内部后,而负载均衡技术是用户请求还在服务外部时,因此,本发明的方法是基于一种对用户请求的分配规则进行优化的技术,本发明也是是针对这一点实现对物联云系统的雪崩效应进行了优化控制,且通过本发明的方法有效防止了物联云系统雪崩效应(服务提供者的不可用导致服务调用者不可用,并将不可用逐渐放大的现象)的出现,让电视端的使用物联云系统的用户,在高峰期时的使用体验得到有效提升。
具体实施方式
下面结合本发明的实施例对本发明作进一步的阐述和说明。
实施例:
实施例一:
基于JAVA多线程技术解决物联云端服务雪崩效应的方法,用于物联云系统,包括以下步骤:
步骤一.利用java线程池构造器,创建线程池并由主线程进行调用。
步骤二.分别计算及设置线程池的核心线程数、最大线程数以及最大队列长度;其中,最大线程数大于核心线程数。
具体的,本实施例中,若每个任务需要t1秒处理,则每个线程每秒可处理1/t1个任务,而若系统每秒至少有n1个任务需要处理,则需要的线程数至少为:n1/(1/t1),即n1*t1个线程数。且若物联云系统在80%的情况下每秒需要处理的任务数小于或等于n2;则核心线程数等于n2/(1/t1)。
如本实施例中,假设系统每秒任务数为100~1000,每个任务耗时0.1秒,则需要100*0.1至1000*0.1个线程,即10~100个线程,那么核心线程数corePoolSize应该设置为大于10,具体数字最好根据二八原则,即满足80%情况下系统每秒任务数,例如:若系统80%的情况下每秒任务数小于200,最多时为1000,则核心线程数corePoolSize可设置为20。
同时,若物联云系统允许的任务最大的响应时间为t2,如本实施例中每个任务的响应时间不得超过2秒;则最大队列长度queueCapacity等于(核心线程数/t1)*t2;如本实施例中,设定任务缓存队列的最大队列长度具体为(20/0.1)*2=400,即任务缓存队列的最大队列长度可设置为400。
计算最大线程数maxPoolSize时,若物联云系统每秒需要处理的最大任务数量为n3,则最大线程数等于(n3-最大队列长度)*(核心线程数/n2),如本实施例中,每秒200个任务需要20个线程,那么当每秒达到1000个任务时则需要线程数为(1000-最大队列长度)*(20/200)=60,即最多需要60个线程,因此可将最大线程数maxPoolSize设置为60。
本发明的方法中,首先设置合理的线程池的核心线程数的值:核心线程数的值还直接决定了任务队列的长度,在创建了线程池后,核心线程数如果设置过大会导致cpu负载急剧升高,如果设置过小,用户请求的响应时间又不能得到保证。为了不让核心线程数的值过大或者过小,本方法中根据物联云系统每秒需要处理的最大任务数量n3、最小任务数量n1、处理每个任务所需要的时间t1、系统允许任务最大的响应时间t2来计算一个比较合理的核心线程数的值,从而解决了传统方法中采用默认值设置核心线程数和最大线程数,导致的由于核心线程数和最大线程数数值的设置过大或者过小,引发服务雪崩效应的产生的问题。
其次再根据核心线程数推算最大队列长度,合理的任务缓存队列长度,是保证物联云系统是否出现服务雪崩效应的关键,任务缓存队列的长度要根据核心线程数,以及系统对任务响应时间的要求来设置。队列长度设置过大,会导致任务响应时间过长,从而造成物联云系统的服务雪崩效应,传统的方法是直接初始化一个没有指定长度的队列,这实际上是将队列长度设置为Integer.MAX_VALUE,将会导致线程数量永远为核心线程数,且再也不会增加,而当任务数量陡增时,任务响应时间也将随之陡增,因此容易导致任务队列过长,当用户请求被放入任务队列后,线程池处理速度不够快导致任务没有被及时处理,用户端请求显示超时,从而出现服务雪崩效应。
步骤三.当有任务进来后首先判断线程池中线程数是否小于核心线程数,若线程数小于核心线程数则创建线程执行任务;否则,进入步骤四。
步骤四.判定当前是否设有任务缓存队列,若不是,则创建任务缓存队列并将任务加入新创建的任务缓存队列中,否则,则进入步骤五。
步骤五.判断任务缓存队列的队列长度是否小于最大队列长度,若是,则将当前任务放入任务缓存队列中,否则进入步骤六。
步骤六.判断当前线程数是否小于最大线程数,若是,则创建线程执行任务;否则,执行拒绝策略即将任务加入主线程进行处理。
本实施例中,使用java提供的拒绝策略构建方法如下:
new ThreadPoolExecutor.CallerRunsPolicy())。
作为优选,实际中,在设置上述的核心线程数、最大线程数等时,还可结合具体的硬件设备,如结合CPU的情况,则比如,当线程数量达到50时,CPU达到100%,则此时单纯的将最大线程数maxPoolSize设置为60就不是最佳方案,因为此时若系统负载长时间维持在每秒1000个任务,则将超出线程池处理能力,因此,此时应设法降低每个任务的处理时间t1。
由上可知,本实施例中,在Java线程池初始化类ThreadPoolExecutor初始化时,使用根据硬件设备计算出相应的参数,而不是采用传统方法使用默认的参数值,且首先对队列BlockingQueue的选择,在选择对LinkedBlockingDeque初始化时,设置LinkedBlockingDeque的capacity的大小,可以设置容量(queueCapacity)防止其过渡膨胀,而不是使用默认值(Integer.MAX_VALUE)。
其次,线程池初始化类ThreadPoolExecutor的拒绝策略设置,如果没有手动设置RejectedExecutionHandler拒绝策略的话,将会默认采用AbortPolicy,即如果线程池队列满了就丢掉这个任务并且抛出RejectedExecutionException异常,而丢掉的结果就是用户请求被丢弃,这里我们初始化时采用CallerRunsPolicy,使用此策略,如果添加到线程池失败,那么主线程会自己去执行该任务,不会等待线程池中的线程去执行,即当线程池无线程可用时,采用主线程继续执行相关任务,从而防止了雪崩效应的出现。
可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。
Claims (6)
1.基于JAVA多线程技术解决物联云端服务雪崩效应的方法,用于物联云系统,其特征在于,包括以下步骤:
A.利用java线程池构造器,创建线程池并由主线程进行调用;
B.分别计算及设置线程池的核心线程数、最大线程数以及最大队列长度;其中,最大线程数大于核心线程数;
C.当有任务进来后首先判断线程池中线程数是否小于核心线程数,若线程数小于核心线程数则创建线程执行任务;否则,进入步骤D;
D.判定当前是否设有任务缓存队列,若不是,则创建任务缓存队列并将任务加入新创建的任务缓存队列中,否则,则进入步骤E;
E.判断任务缓存队列的队列长度是否小于最大队列长度,若是,则将当前任务放入任务缓存队列中,否则进入步骤F;
F.判断当前线程数是否小于最大线程数,若是,则创建线程执行任务;否则,执行拒绝策略。
2.根据权利要求1所述的基于JAVA多线程技术解决物联云端服务雪崩效应的方法,其特征在于,若物联云系统每秒需要处理的最小任务数量为n1、处理每个任务所需要的时间为t1,则所述步骤A中核心线程数应大于n1/(1/t1)。
3.根据权利要求2所述的基于JAVA多线程技术解决物联云端服务雪崩效应的方法,其特征在于,若物联云系统在80%的情况下每秒需要处理的任务数小于或等于n2;则所述步骤A中核心线程数等于n2/(1/t1)。
4.根据权利要求3所述的基于JAVA多线程技术解决物联云端服务雪崩效应的方法,其特征在于,若物联云系统允许的任务最大的响应时间为t2;则所述步骤A中最大队列长度等于(核心线程数/t1)*t2。
5.根据权利要求4所述的基于JAVA多线程技术解决物联云端服务雪崩效应的方法,其特征在于,若物联云系统每秒需要处理的最大任务数量为n3,所述步骤A中最大线程数等于(n3-最大队列长度)*(核心线程数/n2)。
6.根据权利要求1至5中任一所述的基于JAVA多线程技术解决物联云端服务雪崩效应的方法,其特征在于,所述拒绝策略为将任务加入主线程进行处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910561945.3A CN110287013A (zh) | 2019-06-26 | 2019-06-26 | 基于java多线程技术解决物联云端服务雪崩效应的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910561945.3A CN110287013A (zh) | 2019-06-26 | 2019-06-26 | 基于java多线程技术解决物联云端服务雪崩效应的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110287013A true CN110287013A (zh) | 2019-09-27 |
Family
ID=68006296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910561945.3A Pending CN110287013A (zh) | 2019-06-26 | 2019-06-26 | 基于java多线程技术解决物联云端服务雪崩效应的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110287013A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112433837A (zh) * | 2020-11-24 | 2021-03-02 | 上海浦东发展银行股份有限公司 | 一种基于企业服务总线的异步化资源处理方法及系统 |
WO2024031931A1 (zh) * | 2022-08-11 | 2024-02-15 | 苏州元脑智能科技有限公司 | 批量请求下发的优先排队处理方法、装置、服务器及介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150150020A1 (en) * | 2013-11-25 | 2015-05-28 | Tata Consultancy Services Limited | System and method facilitating performance prediction of multi-threaded application in presence of resource bottlenecks |
CN105159768A (zh) * | 2015-09-09 | 2015-12-16 | 浪潮集团有限公司 | 一种任务管理方法及云数据中心管理平台 |
CN106534107A (zh) * | 2016-11-04 | 2017-03-22 | 北方工业大学 | 一种物联网消息服务系统 |
CN107632889A (zh) * | 2017-06-28 | 2018-01-26 | 努比亚技术有限公司 | 一种实现服务降级的方法、设备及计算机可读存储介质 |
US20180074873A1 (en) * | 2016-09-15 | 2018-03-15 | Oracle International Corporation | Processing cloud services and intelligence cloud services integration |
CN108345499A (zh) * | 2018-02-01 | 2018-07-31 | 平安科技(深圳)有限公司 | 统一线程池处理方法、应用服务器及计算机可读存储介质 |
CN109032783A (zh) * | 2018-08-01 | 2018-12-18 | 杭州朗和科技有限公司 | 信息交互方法、介质、装置和计算设备 |
CN109765833A (zh) * | 2019-01-16 | 2019-05-17 | 四川长虹电器股份有限公司 | 一种监控物联设备控制状态的方法 |
-
2019
- 2019-06-26 CN CN201910561945.3A patent/CN110287013A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150150020A1 (en) * | 2013-11-25 | 2015-05-28 | Tata Consultancy Services Limited | System and method facilitating performance prediction of multi-threaded application in presence of resource bottlenecks |
CN105159768A (zh) * | 2015-09-09 | 2015-12-16 | 浪潮集团有限公司 | 一种任务管理方法及云数据中心管理平台 |
US20180074873A1 (en) * | 2016-09-15 | 2018-03-15 | Oracle International Corporation | Processing cloud services and intelligence cloud services integration |
CN106534107A (zh) * | 2016-11-04 | 2017-03-22 | 北方工业大学 | 一种物联网消息服务系统 |
CN107632889A (zh) * | 2017-06-28 | 2018-01-26 | 努比亚技术有限公司 | 一种实现服务降级的方法、设备及计算机可读存储介质 |
CN108345499A (zh) * | 2018-02-01 | 2018-07-31 | 平安科技(深圳)有限公司 | 统一线程池处理方法、应用服务器及计算机可读存储介质 |
CN109032783A (zh) * | 2018-08-01 | 2018-12-18 | 杭州朗和科技有限公司 | 信息交互方法、介质、装置和计算设备 |
CN109765833A (zh) * | 2019-01-16 | 2019-05-17 | 四川长虹电器股份有限公司 | 一种监控物联设备控制状态的方法 |
Non-Patent Citations (2)
Title |
---|
HTTPS://BLOG.CSDN.NET/JYXMUST/ARTICLE/DETAILS/56877594: "Java并发编程|第一篇:Java线程池", 《HTTPS://BLOG.CSDN.NET/JYXMUST/ARTICLE/DETAILS/56877594》 * |
黄强: "云环境下铁水联运信息平台关键技术研究", 《中国优秀博硕士学位论文全文数据库(博士)信息科技辑》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112433837A (zh) * | 2020-11-24 | 2021-03-02 | 上海浦东发展银行股份有限公司 | 一种基于企业服务总线的异步化资源处理方法及系统 |
WO2024031931A1 (zh) * | 2022-08-11 | 2024-02-15 | 苏州元脑智能科技有限公司 | 批量请求下发的优先排队处理方法、装置、服务器及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6847227B2 (ja) | リソース要求処理方法及び装置 | |
US7415522B2 (en) | Extensible framework for transferring session state | |
CN104901898B (zh) | 一种负载均衡方法及装置 | |
CN107800768A (zh) | 开放平台控制方法和系统 | |
CN104623898B (zh) | 一种进入游戏副本场景的方法和游戏服务器 | |
CN110287013A (zh) | 基于java多线程技术解决物联云端服务雪崩效应的方法 | |
CN108108225B (zh) | 一种面向云计算平台的任务调度方法 | |
EP4383074A1 (en) | Service processing method and apparatus, server, storage medium, and computer program product | |
CN105007337A (zh) | 集群系统负载均衡的方法和系统 | |
CN103716226B (zh) | 临时关联关系建立方法和装置 | |
CN108681481A (zh) | 业务请求的处理方法及装置 | |
CN106201409A (zh) | 一种应用程序操作界面的处理方法及系统 | |
CN110430278A (zh) | 负载均衡配置方法及装置 | |
CN109041130A (zh) | 基于移动边缘计算的资源分配方法 | |
WO2016078391A1 (zh) | 虚拟机迁移方法、虚拟设施管理器及协调器 | |
CN105373434A (zh) | 资源管理系统及方法 | |
CN107185239A (zh) | 一种网络游戏中用户跨服游戏的方法及服务器系统 | |
CN106713238A (zh) | 远程过程调用方法、装置及系统 | |
Ma et al. | On resource management for cloud users: A generalized kelly mechanism approach | |
CN106488506B (zh) | vMME与MME的混合组网方法及系统 | |
US10984011B1 (en) | Distributing non-transactional workload across multiple database servers | |
CN109603150A (zh) | 一种提升在线游戏同场景负载能力的方法及系统 | |
CN110417678A (zh) | 一种应用程序接口限流的方法及装置 | |
US9808714B2 (en) | Network enabled game controller | |
CN109587068A (zh) | 流量切换方法、装置、设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190927 |