代理服务器改造设计说明书中通软科技技术有限公司广州分公司2010年11月25变更记录变更版本日期图表、表格、段落号A/M/D原因与修改情况描述修订人审核人1.02010-11-25ALLA首次创建满孝东注:A–增加M–修改D–删节目录第1章引言1.1.编写目的编写的目的主要是通过对本次开发软件的设计、约定及相关内容作一具体描述,从而可作为公司开发人员、测试人员的指导性文件。1.2.定义负载均衡(ServerLoadBalance)一般用于提高服务器的整体处理能力,并提高可靠性,可用性,可维护性,最终目的是加快服务器的响应速度,从而提高用户的体验度。负载均衡从结构上分为本地负载均衡(LocalServerLoadBalance)和地域负载均衡(GlobalServerLoadBalance)(全局负载均衡),一是指对本地的服务器群做负载均衡,另一是指对分别放置在不同的地理位置、有不同的网络及服务器群之间作负载均衡。Socket服务端:任务队列获取任务时创建Socket服务端,其生命周期等同于代理服务器。Socket客户端:初始化进程时,创建socket客户端,其生命周期等同于socket服务端。1.3.参考资料1)《代理服务器详细设计文档》1.4.设计与实现的限制1)Java代码编写,后台执行2)支持主流数据库、操作系统、应用服务器;第2章概述2.1.定义项目总体设计要达到的目标,是通过明确代理服务器改造设计的概念、关系,明确系统开发的思路,作为指导应用系统开发的方法。2.2.代理服务器改造体系结构代理服务器由之前的多线程执行任务现改造为多进程来执行任务,改造所需要开发的功能主要有:进程管理和任务分配。2.2.1.技术架构图代理服务器改造总体架构图如下:系统总体架构由六部分组成:线程池:线程池由多个线程组成,根据进程信息管理分配任务,建立线程池并执行任务,当任务完成时将其销毁。进程池:进程池由多个进程组成每一个进程都是一个JDK实例,每一个进程中包括一个线程池,进程池的初始化由进程信息管理来决定。进程信息管理:当任务队列获取任务时,如果进程存在由线程建立的通讯获取运行中进程的信息,并均衡分配至进程中;反之,根据任务队列中的任务数,创建线程去启动进程,并将任务均衡分配至进程中。线程通讯:由进程信息管理,根据任务队列中的任务,创建出线程去启动进程,通过socket实现此线程与进程之间的通讯,当任务执行完毕时将线程和进程销毁并返回信息。Socket时时通讯:利用socket实现线程与进程信息管理的时时通讯。内存溢出处理:因无法计算每个任务所需要的内存使用情况,若在合理分配任务到进程中执行任务时出现内存溢出造成进程死掉则重新启动一个进程将致死内存溢出的那条任务返回到智能任务分发处;若其它情况导致进程死掉,则重新启动进程不在执行致死进程死掉的那条任务。第3章功能设计3.1.任务获取在任务队列类(TaskerQueuss)获取管理队列scheduleTasker(计划任务队列)。线程的分配:(1)线程的分配。当任务队列中有任务时,便开始检查进程信息,将任务队列中的任务按照任务分配规则分配至每个线程中。线程的分配操作在ThreadPoolManager类执行,在代理服务启动时便为该类启动一条线程在监控是否在队列进入,若有任务进入时立即为任务分配线程。(2)线程的回收。当任务完成并离开执行线程时将已分配的线程减一,并释放自已线程。3.2.线程池管理线程池的管理分为socket服务端的线程池管理和socket客户端的线程池管理。1、服务端的线程池管理当代理服务器启动时会分别启动:1)socket服务端用于接收和分配任务。2)任务队列监控。当任务队列中有任务时,且任务数小于server.xml中配置最大进程数时,则根据任务数启动线程数,反之启动最大进程数的线程(比如最大进程数为5个,那启动的最大线程数就是5个)。服务端的线程池管理由任务队列中的任务来决定,每一个线程的启动都会在线程中去启动一个进程,在进程的主线程中启动Socket客户端。2、客户端的线程池管理由socket服务端分配的任务数和配置文件中设置的最大线程数来决定进程中启动执行任务的线程数。当socket服务端分配任务数小于配置文件中的最大线程数时,根据任务数启动线程数,反之则启动最大线程数。3.3.进程池管理初始化进程池如图:1...