一种实现计算机系统应用服务器的方法技术方案

技术编号:3522748 阅读:211 留言:0更新日期:2012-04-11 18:40
本发明专利技术提出了一种计算机领域的实现在计算机系统中实现应用服务器的方法,结合使用计算机系统JAVA平台中的异步I/O和计算机系统线程池技术,构造计算机系统线程池,并将应用服务器中的线程分为链路管理线程、接收线程、以及业务线程;将每个业务逻辑处理流程划分成多个业务段,每段都由“接收”--“处理”--“发送”组成;除需要长期存在的总控线程和定时器线程外,其它的所有线程均在计算机系统线程池中申请,每接收完一次数据、或每处理完一个业务段,该线程归还到计算机系统的线程池中,该链路或业务逻辑处理流程通过一个记载有状态值的数据区保存在内存中。本发明专利技术能够充分利用各种I/O模式的长处,在最大程度提高CPU占用率的基础上,增强实用性和代码的可维护,降低系统复杂度。

【技术实现步骤摘要】

本专利技术涉及计算机领域,尤其涉及。
技术介绍
计算机已经日益成为生产和生活领域中不可或缺的工具,也在深刻的改变着人们的生活和工作方法。在计算机应用领域中,应用服务器技术随着人们对于网络系统的需求而迅速发展,一般情况下,应用服务器有着强大的客户机请求处理能力,服务器在合理时间之内处理大量客户机请求的能力取决于服务器使用I/O(输入/输出)流的效率。同时为成百上千个客户机提供服务的服务器必须能够并发地使用I/O服务,随着计算机系统Java平台的发展,在Java语言开发工具包JDK1.4中,已经开始支持异步(即非阻塞)I/O调用的功能,从而使得应用服务器有了更大处理能力的可能。目前应用Java平台的应用服务器,由于较普遍地采用同步(阻塞)I/O机制,其线程与客户机之比几乎是一比一的关系,因而易于受到大量线程开销的影响,加上许多线程在一个耗时处理流程中很可能大部分时间都处于挂起状态,其结果是既导致了性能问题又缺乏可伸缩性。为了解决这个问题,Java平台在其最新发展中支持了异步I/O,包括新的通道(Channel)类和选择器(Selector)类,通道是客户机和服务器之间的一种通信方式,选择器则从不同客户机捕获各种事件并将它们分派到相应的事件处理工具。多线程技术主要解决处理器单元内多个线程执行的问题,它不仅均衡了客户机的等待响应时间,简化了逻辑处理流程,而且可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力,并且非常适合服务器向多CPU的升级。但如果对多线程应用不当,会增加对单个任务的处理时间。例如,在一台服务器完成一项任务的时间为T=T1+T2+T3,其中T1是创建线程的时间,T2是在线程中执行任务的时间(包括线程间同步所需时间),T3是线程销毁的时间。可以看出,T1、T3是多线程自身带来的开销,在程序中频繁地创建或销毁线程,将导致T1和T3在T中占有相当多比例,这显然是更加突出了线程的弱点(T1、T3),而不是其并发性的优点。正是在这一背景下产生了计算机系统线程池技术,计算机系统线程池技术着眼于如何缩短或调整T1、T3时间,从而提高服务器程序性能。它把T1、T3分别安排在服务器程序的启动和结束时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,将不会发生T1、T3的开销,同时它还能够显著减少创建的线程数目。可以看出,当在单个任务一个流程中需要在多个套接字(SOCKET)接口(比如由一个TCP连接4元组构成的一个套接字接口)上等待数据时,为了减少并发线程的数量、提高CPU的利用率,通常采用异步I/O模式通过单线程来实现。当单个任务逻辑简单,但其中包含耗时操作时,同步I/O加计算机系统线程池是一个最佳选择。然而,当一个大流量服务器对外有多个接口,而如果所处理的每个任务都被I/O操作分割为许多段,各个段内又包含耗时操作(比如加解密、数据库操作、XML解析封装等),在所有段都顺序完成后,才从入口处返回结果给客户端。在这种情况下如果仍然采用同步I/O加计算机系统线程池,势必会在接口处挂起很多线程,不能归还到池中,从而导致效率低下的缺点;如果仅采用异步I/O,则又无法解决主要由耗时操作引起的排队问题。目前普遍的解决方法是,底层采用异步I/O方式,在耗时操作段内则开启一定数目的工作线程或进程来处理。这样将在较大程度上对系统性能有所改进,但仍存在诸多问题首先,线程的数目是一个经验值,在不同的环境下最佳取值是不易获得的,尤其是如果在多个段内使用线程,这些线程数目之间的协调更为困难(即实用性差),且实现时多使用配置文件的方式来修改,修改后可能需要重起系统;其次,从底层读写数据,在大流量时也是一个不容忽视的耗时耗CPU的系统拷贝操作,而如果放置到线程中(尤其对于多CPU的系统),则将很大程度的提升系统的性能;最后,系统设计时不仅要考虑不同接口,还需要将一段业务流程从“耗时”、“不耗时”这两个角度进行细分,从而使得系统的层次性和代码复杂度、可维护性以及可二次开发性都较差。
技术实现思路
本专利技术的目的是克服现有技术存在的无法实现CPU占用率、代码可维护度、以及实用性(如是否需要获取经验值等)的有效结合的缺点,以期提出一种能够充分利用各种I/O模式的长处,在最大程度提高CPU占用率的基础上,增强实用性和代码的可维护,降低系统复杂度的方法。本专利技术的核心思想是通过结合使用计算机系统JAVA平台中的异步I/O和计算机系统线程池技术,构造一种应用服务器实现方法,将线程分为链路管理线程、接收线程、以及业务线程三种,其中后两种使用的线程资源均来自计算机系统线程池;将任务以I/O操作为分界划分为多个段,每个段均在上述线程中运行;同时在处理简单的一次性发送任务时,又采用同步I/O的方式。本专利技术所述的实现在计算机系统中实现应用服务器的方法,其特征在于,包括以下步骤(1)构造计算机系统线程池,设置计算机系统线程池的最多和最少线程数、以及线程数达到最大值后的等待策略,具体在某一时刻需要使用到的线程数由计算机系统线程池自动调节;所述等待策略包括在调用线程中立即执行、丢弃、调用线程挂起直到线程池中出现空闲线程后再执行等。(2)将应用服务器中的线程分为链路管理线程、接收线程、以及业务线程;(a)链路管理线程通过维护一个异步I/O主循环,接收外部连接请求;当链路管理线程接收到某个链路上有数据到来的事件时,从计算机系统线程池中调出一个空闲线程,通过传递给该线程的Runnable(java的线程基类)实例,使该空闲线程进入工作状态,在该链路上进行接收处理,从而转变为接收线程;(b)接收线程负责从传输层(SOCKET接口)读取数据,并将传输层数据分割或重组,最终将传输层数据转换成应用层的报文(如HTTP报文);当收集到一或多个完整的应用层报文后,接收线程从计算机系统线程池中调一或多个空闲线程进行业务处理,并将接收线程自身归还到计算机系统线程池中;(c)业务线程负责处理一个业务段,包括具体业务逻辑处理,以及从SOCKET接口发送数据等。一个SOCKET接口在某一时刻只能对应最多1个接收线程,或没有对应接受线程(接口上没有接收数据时)。每个业务线程负责处理一个业务段。(3)将每个业务逻辑处理流程划分成多个业务段,每段都由“接收”——“处理”——“发送”组成;“接收”在接收线程中进行,“处理”和“发送”则在业务线程中完成,不需要考虑段中是否有耗时模块;所述一个业务逻辑处理流程等同于一个任务,比如一个定位逻辑流程包括解析、鉴权、短信、定位、计费、告警等处理;(4)除需要长期存在的总控线程和定时器线程外,其它的所有线程(如接收线程、和业务线程)均在计算机系统线程池中申请,每接收完一次数据(接收线程)、或每处理完一个业务段(业务线程),该线程归还到计算机系统线程池中,该链路或业务逻辑处理流程通过一个记载有状态值的数据区(包含如TCP链路或业务逻辑处理的当前状态信息)保存在内存中;(5)处理简单的发送任务(如HTTP短连接,一次交互后立即关闭)时,采用同步I/O的方式。本专利技术所述方法通过结合使用计算机系统JAVA平台中的异步I/O和计算机系统线程池技术,与现有的技术相比,在应用服务器中,既不会在各SOCKET接口上存在挂起的线程,也不需要对各流程中耗时模块本文档来自技高网
...

【技术保护点】
一种实现在计算机系统中实现应用服务器的方法,其特征在于,包括以下步骤:    (1)构造计算机系统线程池,设置计算机系统线程池的最多和最少线程数、以及线程数达到最大值后的等待策略,具体在某一时刻需要使用到的线程数由计算机系统线程池自动调节;    (2)将应用服务器中的线程分为链路管理线程、接收线程、以及业务线程;    (3)将每个业务逻辑处理流程划分成多个业务段,每段都由“接收”、“处理”、“发送”组成;    (4)设置占用固定线程资源的总控线程和定时器线程;不占用固定线程资源的线程从计算机系统线程池中申请得到,在每接收完一次数据、或每处理完一个业务段,该线程归还到计算机系统的线程池中,而线程数据通过一个记载有状态值的数据区保存在内存中;    (5)计算机系统处理采用HTTP短连接的发送任务时,采用同步I/O的方式。

【技术特征摘要】

【专利技术属性】
技术研发人员:张长丰强宇红郑扬
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1