处理服务请求的方法和装置制造方法

文档序号:7805335阅读:173来源:国知局
处理服务请求的方法和装置制造方法
【专利摘要】本发明提供了处理服务请求的方法和装置,该方法包括,在Jetty?Continuation的请求处理中建立异步层次结构,包括传输层,转换内部数据层,转换外部数据层,接出层;利用Continuation异步处理请求;在所述异步层次结构中逐级异步发送请求,并异步返回处理结果,并通知释放请求。本发明层次结构简单和清晰,易于和维护,最大程度降低了耦合,提高了系统性能。
【专利说明】处理服务请求的方法和装置

【技术领域】
[0001] 本发明涉及网络计算领域,特别涉及一种异步处理API服务请求的方法和装置。

【背景技术】
[0002] 作为开源的servlet容器,Jetty为基于Java的web内容提供运行环境。Jetty 的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅 速为一些独立运行的Java应用提供网络和web连接。在服务器客户端架构中,所有的请求 都接入到Jetty的servlet中,如果后端处理速度慢,则导致大量的请求会超时。常规的程 序遇到这种情况(假设没有设置超时)通常会等待,此时线程会白白浪费时间,一旦请求增 多,线程池及等待队列会变满,从而导致网站无法服务。目前已有程序使用future task来 解决该问题,但future task带有轮询的性质,并发处理请求能力有限,无论怎样或多或少 会带有阻塞。
[0003] Continuation是一种可以使HTTP请求可以被暂时挂起,并且当挂起超时或非 同步的事件发生时,被挂起的HTTP请求可以被重新恢复的机制。这个机制的实现主要在 SelectChannelConnector类中。SelectChannelConnector允许维持每个连接开放而不用 消耗一个线程。当连接挂起时,Connector将请求维持在未决Continuations队列里,用 来服务请求的线程返回给TheadPool,这样,该线程又可以服务于其他请求。暂停的请求停 留在未决Continuations队列里直到指定的过期时间,或者在它的Continuation上调用 resume ()方法。Continuation, suspend ()会抛出一个特殊的运行时异常:RetryRequest。 这个异常将传播到servlet以外,然后通过过滤器传回,再由SelectChannelConnector捕 获,将请求放入处于等待状态的Continuation队列中,此时HTTP连接并不关闭,而当前的 线程却可以被放回线程池,供别的请求使用。Continuation机制实际就是对HTTP协议执行 ΝΙ0(非阻塞1/0)。每个环节都是异步处理,这样极大的提高了请求的TPS(每秒能够处理 的事务量)以及并发的性能。
[0004] 然而,Jetty continuation需要在应用中使用应用级的线程池来完成一 些10任务,这个在普通的web编程并不常见。在应用的第一次请求中,需要调用 AsyncContinuation. suspend,完成一个状态的转换,以及产生一个超时任务,将超时任务 派发给应用线程池完毕后,Jetty回收该请求,线程10任务在应用线程中完成后,然后通过 AsyncContinuation. resume或者complete等方法通知Jetty任务完成Jetty然后会再次 分配一个worker线程处理该请求,如果逻辑复杂,如并行的多次10会分配多个worker线 程。引入Jetty continuation带来的负面作用是需要仔细的切割各类10任务,编程模型 因而会变得复杂。
[0005] 针对相关技术中所存在的上述问题,目前尚未提出有效的解决方案。


【发明内容】

[0006] 为解决上述现有技术所存在的问题,本发明提出了一种处理服务请求的方法和装 置。本发明首先提出了一种处理服务请求的方法,包括:
[0007] 步骤一,在Jetty Continuation的请求处理中建立异步层次结构,包括传输层,转 换内部数据层,转换外部数据层,接出层;
[0008] 步骤二,利用Continuation异步处理请求;
[0009] 步骤三,在所述异步层次结构中逐级异步发送请求,并异步返回处理结果,并通知 释放请求。
[0010] 优选地,所述步骤二进一步包括:
[0011] 获取当前请求的Continuation对象,
[0012] 设置监听器,
[0013] 在处理请求后挂起并释放线程。
[0014] 优选地,该方法基于JSR315规范特性来处理异步请求。
[0015] 优选地,所述请求的接入方式包括DHReqContinuationServletHandler和 DHReqAsynServletHandler,均抽象为 AbstractDHReqServletHandler。
[0016] 优选地,所述请求接入方式基于servlet3. 0和Jetty8的continuation的挂起/ 消费策略来实现,这针对不同的servlet容器来切换不同的异步请求处理机制。
[0017] 优选地,所述步骤三进一步包括:
[0018] 所述接出层收到该请求后,进行服务化API调用,将处理结果逐步返回至转换 外部数据层,转换内部数据层,和传输层,通知Continuation释放请求,返回处理数据至 servlet。
[0019] 优选地,该方法还包括,当某一时刻请求大量接入时,不需要等待线程释放,而是 将线程挂起,处理完毕后通知Jetty,此时Jetty再启用一个新的线程再次处理请求。
[0020] 根据本发明的另一方面,提供了一种处理服务请求的装置,其特征在于,包括:
[0021] 模型建立模块,用于在Jetty Continuation的请求处理中建立异步层次结构,包 括传输层,转换内部数据层,转换外部数据层,接出层;
[0022] Continuation模块,用于利用Continuation异步处理请求;
[0023] 发送和返回模块,用于在所述异步层次结构中逐级异步发送请求,并异步返回处 理结果,并通知释放请求。
[0024] 优选地,所述Continuation模块进一步包括:
[0025] 获取子模块,用于获取当前请求的Continuation对象,
[0026] 监听子模块,用于设置监听器,
[0027] 挂起子模块,用于在处理请求后挂起并释放线程。
[0028] 优选地,所述发送和返回模块进一步包括:
[0029] 调用子模块,用于在所述接出层收到该请求后,进行服务化API调用,
[0030] 返回子模块,用于将处理结果逐步返回至转换外部数据层,转换内部数据层,和传 输层,
[0031] 释放子模块,用于通知Continuation释放请求,返回处理数据至servlet。
[0032] 相比于现有技术,本发明的技术方案的具有以下优点:
[0033] 层次结构简单和清晰可见,每一层对应的代码均具有语义,易于和维护,最大程度 降低了耦合。由于每层都是异步处理,系统性能被提升,具有应对未来大并发处理的能力, 提高请求访问的TPS并发。

【专利附图】

【附图说明】
[0034] 图1是根据本发明实施例的处理服务请求的方法的流程图。
[0035] 图2是根据本发明实施例的异步层次结构的示意图。
[0036] 图3是两种接入方式的对象和方法的示意图。
[0037] 图4是根据本发明实施例的异步处理服务请求的流程图。

【具体实施方式】
[0038] 下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描 述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权 利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节 以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且脱离这些具体细节 中的一些或者所有细节也可以根据权利要求书实现本发明。
[0039] 图1是根据本发明实施例的处理服务请求的方法的流程图。本发明提供的方法包 括:
[0040] 1、在Jetty Continuation的请求处理中建立异步层次结构,包括传输层,转换内 部数据层,转换外部数据层,接出层。
[0041] 图2是根据本发明实施例的异步层次结构的示意图。其中该异步化层次结构的每 一层都代表一个语义,对应的代码都和该语义一致。
[0042] 2.利用Continuation异步处理请求。
[0043] 具体地,该步骤包括,获取当前请求的Continuation对象,设置监听器,在处理请 求后挂起并释放线程。
[0044] 本发明基于servlet3. 0异步(JSR315)规范特性来处理异步请求。目前 Jetty8. *+,tomcat7. *+ 以及 glassfish 支持 servlet3. 0 规范的 servlet 异步规范特性。该 特性同样是将HTTP的请求接入的同时采用新的线程来执行,异步等待执行完成。
[0045] 请求接入方式支持 DHReqContinuationServletHandler 和 DHReqAsynServletHandler 两种方式,均抽象为 AbstractDHReqServletHandler。
[0046] 图3是两种接入方式的对象和方法的示意图。该请求接入方式是基于servlet3. 0 和Jetty8的continuation的挂起/消费策略来实现的,这样可以针对不同的servlet容 器来切换不同的异步请求处理机制。
[0047] 3.利用所述异步层次结构,逐级异步发送请求并异步返回结果,并通知释放请求。
[0048] 当然,异步化并不是独立的,本发明的异步化将结合开放平台的动态模块化API 来结合使用。
[0049] 图4是根据本发明实施例的异步处理服务请求的流程图。具体地,传输层将请求 异步发送至转换内部数据层,转换内部数据层将请求异步发送至转换外部数据层,转换外 部数据层将请求异步发送至接出层。
[0050] 接出层进行服务化API调用,然后将处理结果异步返回至转换外部数据层,转换 外部数据层将处理结果异步返回至转换内部数据层,转换内部数据层将处理结果异步返回 至传输层。
[0051] 然后通知Continuation释放请求,返回处理数据至servlet。
[0052] 当某一时刻请求大量接入时,则不需要等待线程释放,而是将线程挂起,这样不影 响其它的请求接入,这样将极大的提升了 TPS,并且降低了超时处理。
[0053] 本发明对Jetty continuation进一步改进,采用事件驱动的方式来通知请求完 成,没有浪费10时间,一旦遇到阻塞,当前worker线程会结束,这样就可以服务其他请求, 等耗时操作处理完毕通知Jetty,此时Jetty会再启用一个新的worker线程再次处理请 求。
[0054] 根据本发明的另一方面,提供了一种处理服务请求的装置,包括:
[0055] 模型建立模块,用于在Jetty Continuation的请求处理中建立异步层次结构,包 括传输层,转换内部数据层,转换外部数据层,接出层;
[0056] Continuation模块,用于利用Continuation异步处理请求;
[0057] 发送和返回模块,用于在所述异步层次结构中逐级异步发送请求,并异步返回处 理结果,并通知释放请求。
[0058] 其中,所述Continuation模块进一步包括:
[0059] 获取子模块,用于获取当前请求的Continuation对象,
[0060] 监听子模块,用于设置监听器,
[0061] 挂起子模块,用于在处理请求后挂起并释放线程。
[0062] 其中,所述发送和返回模块进一步包括:
[0063] 调用子模块,用于在所述接出层收到该请求后,进行服务化API调用,
[0064] 返回子模块,用于将处理结果逐步返回至转换外部数据层,转换内部数据层,和传 输层,
[0065] 释放子模块,用于通知Continuation释放请求,返回处理数据至servlet。
[0066] 综上所述,本发明提出的处理服务请求的方法和装置,层次结构简单并且清晰可 见,易于和维护,最大程度降低了耦合,提升了系统性能,提高请求访问的TPS并发。
[0067] 显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用 的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成 的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储 在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。 [〇〇68] 应当理解的是,本发明的上述【具体实施方式】仅仅用于示例性说明或解释本发明的 原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何 修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨 在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修 改例。
【权利要求】
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。
【文档编号】H04L29/06GK104065706SQ201410242875
【公开日】2014年9月24日 申请日期:2014年7月23日 优先权日:2014年7月23日
【发明者】王子武, 刘泉 申请人:世纪禾光科技发展(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1