CN104065706A - 处理服务请求的方法和装置 - Google Patents
处理服务请求的方法和装置 Download PDFInfo
- Publication number
- CN104065706A CN104065706A CN201410242875.2A CN201410242875A CN104065706A CN 104065706 A CN104065706 A CN 104065706A CN 201410242875 A CN201410242875 A CN 201410242875A CN 104065706 A CN104065706 A CN 104065706A
- Authority
- CN
- China
- Prior art keywords
- request
- asynchronous
- continuation
- layer
- hierarchical structure
- 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
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明提供了处理服务请求的方法和装置,该方法包括,在Jetty Continuation的请求处理中建立异步层次结构,包括传输层,转换内部数据层,转换外部数据层,接出层;利用Continuation异步处理请求;在所述异步层次结构中逐级异步发送请求,并异步返回处理结果,并通知释放请求。本发明层次结构简单和清晰,易于和维护,最大程度降低了耦合,提高了系统性能。
Description
技术领域
本发明涉及网络计算领域,特别涉及一种异步处理API服务请求的方法和装置。
背景技术
作为开源的servlet容器,Jetty为基于Java的web内容提供运行环境。Jetty的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行的Java应用提供网络和web连接。在服务器客户端架构中,所有的请求都接入到Jetty的servlet中,如果后端处理速度慢,则导致大量的请求会超时。常规的程序遇到这种情况(假设没有设置超时)通常会等待,此时线程会白白浪费时间,一旦请求增多,线程池及等待队列会变满,从而导致网站无法服务。目前已有程序使用future task来解决该问题,但future task带有轮询的性质,并发处理请求能力有限,无论怎样或多或少会带有阻塞。
Continuation是一种可以使HTTP请求可以被暂时挂起,并且当挂起超时或非同步的事件发生时,被挂起的HTTP请求可以被重新恢复的机制。这个机制的实现主要在SelectChannelConnector类中。SelectChannelConnector允许维持每个连接开放而不用消耗一个线程。当连接挂起时,Connector将请求维持在未决Continuations队列里,用来服务请求的线程返回给TheadPool,这样,该线程又可以服务于其他请求。暂停的请求停留在未决Continuations队列里直到指定的过期时间,或者在它的Continuation上调用resume()方法。Continuation.suspend()会抛出一个特殊的运行时异常:RetryRequest。这个异常将传播到servlet以外,然后通过过滤器传回,再由SelectChannelConnector捕获,将请求放入处于等待状态的Continuation队列中,此时HTTP连接并不关闭,而当前的线程却可以被放回线程池,供别的请求使用。Continuation机制实际就是对HTTP协议执行NIO(非阻塞I/O)。每个环节都是异步处理,这样极大的提高了请求的TPS(每秒能够处理的事务量)以及并发的性能。
然而,Jetty continuation需要在应用中使用应用级的线程池来完成一些IO任务,这个在普通的web编程并不常见。在应用的第一次请求中,需要调用AsyncContinuation.suspend,完成一个状态的转换,以及产生一个超时任务,将超时任务派发给应用线程池完毕后,Jetty回收该请求,线程IO任务在应用线程中完成后,然后通过AsyncContinuation.resume或者complete等方法通知Jetty任务完成Jetty然后会再次分配一个worker线程处理该请求,如果逻辑复杂,如并行的多次IO会分配多个worker线程。引入Jetty continuation带来的负面作用是需要仔细的切割各类IO任务,编程模型因而会变得复杂。
针对相关技术中所存在的上述问题,目前尚未提出有效的解决方案。
发明内容
为解决上述现有技术所存在的问题,本发明提出了一种处理服务请求的方法和装置。本发明首先提出了一种处理服务请求的方法,包括:
步骤一,在Jetty Continuation的请求处理中建立异步层次结构,包括传输层,转换内部数据层,转换外部数据层,接出层;
步骤二,利用Continuation异步处理请求;
步骤三,在所述异步层次结构中逐级异步发送请求,并异步返回处理结果,并通知释放请求。
优选地,所述步骤二进一步包括:
获取当前请求的Continuation对象,
设置监听器,
在处理请求后挂起并释放线程。
优选地,该方法基于JSR315规范特性来处理异步请求。
优选地,所述请求的接入方式包括DHReqContinuationServletHandler和DHReqAsynServletHandler,均抽象为AbstractDHReqServletHandler。
优选地,所述请求接入方式基于servlet3.0和Jetty8的continuation的挂起/消费策略来实现,这针对不同的servlet容器来切换不同的异步请求处理机制。
优选地,所述步骤三进一步包括:
所述接出层收到该请求后,进行服务化API调用,将处理结果逐步返回至转换外部数据层,转换内部数据层,和传输层,通知Continuation释放请求,返回处理数据至servlet。
优选地,该方法还包括,当某一时刻请求大量接入时,不需要等待线程释放,而是将线程挂起,处理完毕后通知Jetty,此时Jetty再启用一个新的线程再次处理请求。
根据本发明的另一方面,提供了一种处理服务请求的装置,其特征在于,包括:
模型建立模块,用于在Jetty Continuation的请求处理中建立异步层次结构,包括传输层,转换内部数据层,转换外部数据层,接出层;
Continuation模块,用于利用Continuation异步处理请求;
发送和返回模块,用于在所述异步层次结构中逐级异步发送请求,并异步返回处理结果,并通知释放请求。
优选地,所述Continuation模块进一步包括:
获取子模块,用于获取当前请求的Continuation对象,
监听子模块,用于设置监听器,
挂起子模块,用于在处理请求后挂起并释放线程。
优选地,所述发送和返回模块进一步包括:
调用子模块,用于在所述接出层收到该请求后,进行服务化API调用,
返回子模块,用于将处理结果逐步返回至转换外部数据层,转换内部数据层,和传输层,
释放子模块,用于通知Continuation释放请求,返回处理数据至servlet。
相比于现有技术,本发明的技术方案的具有以下优点:
层次结构简单和清晰可见,每一层对应的代码均具有语义,易于和维护,最大程度降低了耦合。由于每层都是异步处理,系统性能被提升,具有应对未来大并发处理的能力,提高请求访问的TPS并发。
附图说明
图1是根据本发明实施例的处理服务请求的方法的流程图。
图2是根据本发明实施例的异步层次结构的示意图。
图3是两种接入方式的对象和方法的示意图。
图4是根据本发明实施例的异步处理服务请求的流程图。
具体实施方式
下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且脱离这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
图1是根据本发明实施例的处理服务请求的方法的流程图。本发明提供的方法包括:
1、在Jetty Continuation的请求处理中建立异步层次结构,包括传输层,转换内部数据层,转换外部数据层,接出层。
图2是根据本发明实施例的异步层次结构的示意图。其中该异步化层次结构的每一层都代表一个语义,对应的代码都和该语义一致。
2.利用Continuation异步处理请求。
具体地,该步骤包括,获取当前请求的Continuation对象,设置监听器,在处理请求后挂起并释放线程。
本发明基于servlet3.0异步(JSR315)规范特性来处理异步请求。目前Jetty8.*+,tomcat7.*+以及glassfish支持servlet3.0规范的servlet异步规范特性。该特性同样是将HTTP的请求接入的同时采用新的线程来执行,异步等待执行完成。
请求接入方式支持DHReqContinuationServletHandler和DHReqAsynServletHandler两种方式,均抽象为AbstractDHReqServletHandler。
图3是两种接入方式的对象和方法的示意图。该请求接入方式是基于servlet3.0和Jetty8的continuation的挂起/消费策略来实现的,这样可以针对不同的servlet容器来切换不同的异步请求处理机制。
3.利用所述异步层次结构,逐级异步发送请求并异步返回结果,并通知释放请求。
当然,异步化并不是独立的,本发明的异步化将结合开放平台的动态模块化API来结合使用。
图4是根据本发明实施例的异步处理服务请求的流程图。具体地,传输层将请求异步发送至转换内部数据层,转换内部数据层将请求异步发送至转换外部数据层,转换外部数据层将请求异步发送至接出层。
接出层进行服务化API调用,然后将处理结果异步返回至转换外部数据层,转换外部数据层将处理结果异步返回至转换内部数据层,转换内部数据层将处理结果异步返回至传输层。
然后通知Continuation释放请求,返回处理数据至servlet。
当某一时刻请求大量接入时,则不需要等待线程释放,而是将线程挂起,这样不影响其它的请求接入,这样将极大的提升了TPS,并且降低了超时处理。
本发明对Jetty continuation进一步改进,采用事件驱动的方式来通知请求完成,没有浪费IO时间,一旦遇到阻塞,当前worker线程会结束,这样就可以服务其他请求,等耗时操作处理完毕通知Jetty,此时Jetty会再启用一个新的worker线程再次处理请求。
根据本发明的另一方面,提供了一种处理服务请求的装置,包括:
模型建立模块,用于在Jetty Continuation的请求处理中建立异步层次结构,包括传输层,转换内部数据层,转换外部数据层,接出层;
Continuation模块,用于利用Continuation异步处理请求;
发送和返回模块,用于在所述异步层次结构中逐级异步发送请求,并异步返回处理结果,并通知释放请求。
其中,所述Continuation模块进一步包括:
获取子模块,用于获取当前请求的Continuation对象,
监听子模块,用于设置监听器,
挂起子模块,用于在处理请求后挂起并释放线程。
其中,所述发送和返回模块进一步包括:
调用子模块,用于在所述接出层收到该请求后,进行服务化API调用,
返回子模块,用于将处理结果逐步返回至转换外部数据层,转换内部数据层,和传输层,
释放子模块,用于通知Continuation释放请求,返回处理数据至servlet。
综上所述,本发明提出的处理服务请求的方法和装置,层次结构简单并且清晰可见,易于和维护,最大程度降低了耦合,提升了系统性能,提高请求访问的TPS并发。
显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
Claims (10)
1.一种处理服务请求的方法,其特征在于,包括:
步骤一,在Jetty Continuation的请求处理中建立异步层次结构,包括传输层,转换内部数据层,转换外部数据层,接出层;
步骤二,利用Continuation异步处理请求;
步骤三,在所述异步层次结构中逐级异步发送请求,并异步返回处理结果,并通知释放请求。
2.根据权利要求1所述的方法,其特征在于,所述步骤二进一步包括:
获取当前请求的Continuation对象,
设置监听器,
在处理请求后挂起并释放线程。
3.根据权利要求2所述的方法,其特征在于,
该方法基于JSR315规范特性来处理异步请求。
4.根据权利要求3所述的方法,其特征在于,所述请求的接入方式包括DHReqContinuationServletHandler和DHReqAsynServletHandler,均抽象为AbstractDHReqServletHandler。
5.根据权利要求4所述的方法,其特征在于,所述请求接入方式基于servlet3.0和Jetty8的continuation的挂起/消费策略来实现,这针对不同的servlet容器来切换不同的异步请求处理机制。
6.根据权利要求1所述的方法,其特征在于,所述步骤三进一步包括:
所述接出层收到该请求后,进行服务化API调用,将处理结果逐步返回至转换外部数据层,转换内部数据层,和传输层,通知Continuation释放请求,返回处理数据至servlet。
7.根据权利要求1所述的方法,其特征在于,该方法还包括,当某一时刻请求大量接入时,不需要等待线程释放,而是将线程挂起,处理完毕后通知Jetty,此时Jetty再启用一个新的线程再次处理请求。
8.一种处理服务请求的装置,其特征在于,包括:
模型建立模块,用于在Jetty Continuation的请求处理中建立异步层次结构,包括传输层,转换内部数据层,转换外部数据层,接出层;
Continuation模块,用于利用Continuation异步处理请求;
发送和返回模块,用于在所述异步层次结构中逐级异步发送请求,并异步返回处理结果,并通知释放请求。
9.根据权利要求8所述的装置,其特征在于,所述Continuation模块进一步包括:
获取子模块,用于获取当前请求的Continuation对象,
监听子模块,用于设置监听器,
挂起子模块,用于在处理请求后挂起并释放线程。
10.根据权利要求9所述的方法,其特征在于,所述发送和返回模块进一步包括:
调用子模块,用于在所述接出层收到该请求后,进行服务化API调用,
返回子模块,用于将处理结果逐步返回至转换外部数据层,转换内部数据层,和传输层,
释放子模块,用于通知Continuation释放请求,返回处理数据至servlet。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410242875.2A CN104065706A (zh) | 2014-07-23 | 2014-07-23 | 处理服务请求的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410242875.2A CN104065706A (zh) | 2014-07-23 | 2014-07-23 | 处理服务请求的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104065706A true CN104065706A (zh) | 2014-09-24 |
Family
ID=51553234
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410242875.2A Pending CN104065706A (zh) | 2014-07-23 | 2014-07-23 | 处理服务请求的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104065706A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577525A (zh) * | 2017-08-22 | 2018-01-12 | 努比亚技术有限公司 | 一种创建并发线程的方法、装置及计算机可读存储介质 |
CN107633451A (zh) * | 2017-10-23 | 2018-01-26 | 深圳市中润四方信息技术有限公司 | 一种涉税业务处理方法、系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1976349A (zh) * | 2001-10-05 | 2007-06-06 | Bea系统公司 | 爪哇小服务程序和http客户机间异步消息接发的系统和方法 |
CN102681843A (zh) * | 2011-02-16 | 2012-09-19 | 微软公司 | 改进的异步编程执行 |
-
2014
- 2014-07-23 CN CN201410242875.2A patent/CN104065706A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1976349A (zh) * | 2001-10-05 | 2007-06-06 | Bea系统公司 | 爪哇小服务程序和http客户机间异步消息接发的系统和方法 |
CN102681843A (zh) * | 2011-02-16 | 2012-09-19 | 微软公司 | 改进的异步编程执行 |
Non-Patent Citations (1)
Title |
---|
李林 等: "基于Servlet3.0的Web异步处理研究", 《科技风》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577525A (zh) * | 2017-08-22 | 2018-01-12 | 努比亚技术有限公司 | 一种创建并发线程的方法、装置及计算机可读存储介质 |
CN107577525B (zh) * | 2017-08-22 | 2020-11-17 | 努比亚技术有限公司 | 一种创建并发线程的方法、装置及计算机可读存储介质 |
CN107633451A (zh) * | 2017-10-23 | 2018-01-26 | 深圳市中润四方信息技术有限公司 | 一种涉税业务处理方法、系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210311781A1 (en) | Method and system for scalable job processing | |
US9721219B2 (en) | High-load business process scalability | |
Dong et al. | BlueSky cloud framework: an e-learning framework embracing cloud computing | |
US20130047165A1 (en) | Context-Aware Request Dispatching in Clustered Environments | |
US7493436B2 (en) | Interrupt handling using simultaneous multi-threading | |
CN102866918B (zh) | 面向分布式编程框架的资源管理系统 | |
US10673969B2 (en) | Scalable data feed system | |
US20080059747A1 (en) | Load management to reduce communication signaling latency in a virtual machine environment | |
CN102262564A (zh) | 视频监控平台系统的线程池结构及实现方法 | |
CN105210326B (zh) | 云应用处理方法和应用部署方法及相关装置和系统 | |
Fan et al. | Agent-based service migration framework in hybrid cloud | |
CN112087503A (zh) | 集群任务调度方法、系统、计算机和计算机可读存储介质 | |
CN103927225A (zh) | 一种多核心架构的互联网信息处理优化方法 | |
CN103092682A (zh) | 异步网络应用程序处理方法 | |
CN105183549A (zh) | 基于任务分配的自动出票系统 | |
US20120159246A1 (en) | Scaling out a messaging system | |
US8606908B2 (en) | Wake-up server | |
US9741040B2 (en) | High-load business process scalability | |
CN113961341A (zh) | 基于Actor模型的并发数据处理方法、系统、设备和存储介质 | |
CN104065706A (zh) | 处理服务请求的方法和装置 | |
CN105653347B (zh) | 一种服务器、资源管理方法及虚拟机管理器 | |
US9609082B2 (en) | Processing a unit of work | |
Liu et al. | KubFBS: A fine‐grained and balance‐aware scheduling system for deep learning tasks based on kubernetes | |
CN116680035A (zh) | 一种实现kubernetes容器远程调度使用GPU方法和装置 | |
CN113347430B (zh) | 一种硬件转码加速设备的分布式调度装置及其使用方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into 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: 20140924 |