代理服务器改造设计说明书

上传人:M****1 文档编号:547470252 上传时间:2023-07-27 格式:DOCX 页数:19 大小:155.49KB
返回 下载 相关 举报
代理服务器改造设计说明书_第1页
第1页 / 共19页
代理服务器改造设计说明书_第2页
第2页 / 共19页
代理服务器改造设计说明书_第3页
第3页 / 共19页
代理服务器改造设计说明书_第4页
第4页 / 共19页
代理服务器改造设计说明书_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《代理服务器改造设计说明书》由会员分享,可在线阅读,更多相关《代理服务器改造设计说明书(19页珍藏版)》请在金锄头文库上搜索。

1、代理服务器改造设计说明书 中通软科技技术有限公司广州分公司2010年11月25请不要删除后面的分节符变更记录变更版本日期图表、表格、段落号A/M/D原因与修改情况描述修订人审核人1.02010-11-25ALLA首次创建满孝东注:A 增加 M 修改 D 删节请不要删除后面的分节符目录请不要删除后面的分节符编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页 共1页第1章 引言1.1. 编写目的编写的目的主要是通过对本次开发软件的设计、约定及相关内容作一具体描述,从而可作为公司开发人员、测试人员的指导性文件。1.2. 定义负载均衡(Server Load Balance)一般

2、用于提高服务器的整体处理能力,并提高可靠性,可用性,可维护性,最终目的是加快服务器的响应速度,从而提高用户的体验度。 负载均衡从结构上分为本地负载均衡(Local Server Load Balance)和地域负载均衡(Global Server Load Balance)(全局负载均衡),一是指对本地的服务器群做负载均衡,另一是指对分别放置在不同的地理位置、有不同的网络及服务器群之间作负载均衡。 Socket服务端:任务队列获取任务时创建Socket服务端,其生命周期等同于代理服务器。 Socket客户端:初始化进程时,创建socket客户端,其生命周期等同于socket服务端。1.3. 参

3、考资料1) 代理服务器详细设计文档1.4. 设计与实现的限制1) Java代码编写,后台执行2) 支持主流数据库、操作系统、应用服务器;第2章 概述2.1. 定义项目总体设计要达到的目标,是通过明确代理服务器改造设计的概念、关系,明确系统开发的思路,作为指导应用系统开发的方法。2.2. 代理服务器改造体系结构代理服务器由之前的多线程执行任务现改造为多进程来执行任务,改造所需要开发的功能主要有:进程管理和任务分配。2.2.1. 技术架构图 代理服务器改造总体架构图如下: 系统总体架构由六部分组成:线程池:线程池由多个线程组成, 根据进程信息管理分配任务,建立线程池并执行任务,当任务完成时将其销毁

4、。进程池:进程池由多个进程组成每一个进程都是一个JDK实例,每一个进程中包括一个线程池,进程池的初始化由进程信息管理来决定。进程信息管理:当任务队列获取任务时,如果进程存在由线程建立的通讯获取运行中进程的信息,并均衡分配至进程中;反之,根据任务队列中的任务数,创建线程去启动进程,并将任务均衡分配至进程中。 线程通讯:由进程信息管理,根据任务队列中的任务,创建出线程去启动进程,通过socket实现此线程与进程之间的通讯,当任务执行完毕时将线程和进程销毁并返回信息。 Socket时时通讯:利用socket实现线程与进程信息管理的时时通讯。 内存溢出处理:因无法计算每个任务所需要的内存使用情况,若在

5、合理分配任务到进程中执行任务时出现内存溢出造成进程死掉则重新启动一个进程将致死内存溢出的那条任务返回到智能任务分发处;若其它情况导致进程死掉,则重新启动进程不在执行致死进程死掉的那条任务。第3章 功能设计3.1. 任务获取在任务队列类(TaskerQueuss)获取管理队列scheduleTasker(计划任务队列)。 线程的分配:(1) 线程的分配。当任务队列中有任务时,便开始检查进程信息,将任务队列中的任务按照任务分配规则分配至每个线程中。线程的分配操作在ThreadPoolManager类执行,在代理服务启动时便为该类启动一条线程在监控是否在队列进入,若有任务进入时立即为任务分配线程。(

6、2) 线程的回收。当任务完成并离开执行线程时将已分配的线程减一,并释放自已线程。3.2. 线程池管理线程池的管理分为socket服务端的线程池管理和socket客户端的线程池管理。1、服务端的线程池管理当代理服务器启动时会分别启动:1) socket服务端用于接收和分配任务。2) 任务队列监控。当任务队列中有任务时,且任务数小于server.xml 中配置最大进程数时,则根据任务数启动线程数,反之启动最大进程数的线程(比如最大进程数为5个,那启动的最大线程数就是5个)。服务端的线程池管理由任务队列中的任务来决定,每一个线程的启动都会在线程中去启动一个进程,在进程的主线程中启动Socket客户端

7、。2、客户端的线程池管理由socket服务端分配的任务数和配置文件中设置的最大线程数来决定进程中启动执行任务的线程数。当socket服务端分配任务数小于配置文件中的最大线程数时,根据任务数启动线程数,反之则启动最大线程数。3.3. 进程池管理初始化进程池如图 :1、 根据配置文件中最大进程数设置进程,将进程信息由ProcessVO对象存储,由ProcessManager类统一管理。2、 为每个进程设置最大配置文件中最大线程数,当线程创建时由ThreadVO对象存储线程信息,将此线程对象存储在所属进程对象中,当有任务要执行时启动线程,线程类为ChildrenThread。3、 为每个进程启动一个

8、socket客户端调用startClient()方法。4、 时时获取socket服务端向客户端发来的命令,分为以下两种:1) 接收服务端分发的任务,根据任务分配规则执行任务。2) 索要进程信息,调用sendProcessInfoToServer()方法返回进程信息。执行任务时错误处理 在任务执行中即生成报表时,捕获异常处理,分为两种异常:1) 内存溢出,结束线程,并将此类错误的任务通过回调给客户端,由客户端发送给服务端,再由服务端创建新的任务队列,存放此类任务,待所有任务执行完毕后,每个进程分发一条此类任务执行,若再次出现内存溢出现象,则将此任务抛弃。2) 报表自身错误,抛弃。3.4. 进程信

9、息的获取当启动一个新的进程时系统会为此进程创建一个进程ID。定义不同的操作系统接口,分别为:Windows和Linux两种。当任务分配时需要调用进程信息,根据每个进程的进程ID,再根据操作系统的命令;如:Windows获取所有系统进程的信息在DOS中执行taskList命令,在所有进程信息中根据进程ID在得到我们所需要的进程信息。3.5. 任务分配规则任务分配分为两类任务分配:1) 正常任务即未出现内存溢出的任务当任务队列中有任务进入时,调用init()方法,init方法调用getProcessInfo()方法:此方法没有返回进程信息初始化进程信息(调用startSocketServer()方

10、法启动socket客户端,初始化进程数位为每个进程启动一个socket客户端);此方法返回初始化进程信息,即进程已经初始化完毕进入任务分配:l 当所有进程中没有任务在执行时,根据任务数,均匀分配到进程中,剩余的根据进程信息中内存使用情况分配到进程中。进程中同时执行任务不得超过配置文件中的最大线程数的个数,分配任务数大于最大线程数的个数则排队等待。l 当进程中有任务执行时,先获取所有进程信息,根据内存使用情况取出占用内存较少的为其分配任务。l 线程中执行任务:根据任务数启动线程数,如任务数大于最大线程数则启动最大线程数其余任务排队,待线程中任务执行完毕,将此线程销毁,然后检索此进程中线程数,小于

11、最大线程数个则将排队任务重新启动线程执行。 2) 非正常任务即出现过内存溢出的任务在线程执行任务时出现内存溢出,则将此任务通过回调返回到socket客户端再由客户端发送到服务端,由服务端建立一个单独存储内存溢出任务的队列,待所有任务执行完成后,将此队列中的任务分发到进程中去。一条进程只分发一条任务,其余任务等待进程中任务执行完成后在启动执行同时将执行完后的任务在队列中删除,若再次出错直接放弃。在执行错误队列任务时,同时正常任务队列也有任务,那么正常任务等待错误队列中的任务执行完成后在执行正常任务。3.6. 线程与进程通讯线程中启动socket服务端,在每个进程中各自启动一个socket客户端,

12、每个客户端都会与服务端建立一个连接通道, 连接建立成功后客户端将进程信息(即ProcessVO对象)返回给服务端,服务端为每个客户端建立一个连接对象,将连接对象赋值到ProcessVO属性socket中,当服务端根据进程信息分发任务时,在 ProcessVO对象中获取此进程的客户端连接,对其分发任务,如图: 3.7. 生成及导出报表 当任务队列成功分配到线程后,线程便开始启动进行生成报表的相关操作。每个线程只对应一张报表的一种筛选组合。当线程启动时更新当前的任务为“正在执行”状态,然后开始调用报表引擎生成报表数据。当生成及导出报表的过程执行完毕还要对任务组和任务的状态进行及时的更新,以便于客户

13、端的监控。报表的生成过程可有以下的几个步骤。3.7.1. 生成报表生成报表时使用接口IappServiceBO中的createReportDataAndObject()函数。使用函数时参数为一个HashMap对象,其填充办法为:l IAppServiceBO.REPORT_ID, reportID; 报表ID。l IAppServiceBO.REQUISITION, req;Requisition 筛选条件。l IAppServiceBO.FLAG, isCreateReport; 是否导出报表。l IAppServiceBO.EXPORT_TYPE, exportType; 报表的导出方式。

14、l IAppServiceBO.FILE_PATH, virPath; 生成大报表时产生的虚拟文件路径。函数执行完毕后将返回一个HashMap对象,在该Map对象中放置有以下的内容:l DATARESULT, List对象; List对象 为报表数据。l REPORT, JasperPrint对象; JasperPrint 报表对象。l REPORT_IGNORE_PAGINATION, JasperPrint对象; JasperPrint 报表对象,不分页的Excel报表对象。l FILL_BY_FILE, Boolean; 是否使用了虚拟文件填充。3.7.2. 导出报表当线程执行完上函数后,我们即可得到一个JasperPrint对象,我们可以利用这个对象将报表导出到相应的文档中。可以导出的文档类型分别有:l expNone:不导出报表;l expHtml:HTML格式;由于使用效果不好,已作放弃。l expExcel:Excel格式;l expPdf:PDF格式;l expCsv:CSV格式。同样,导出报表到文档时也是使用报表引擎中的exportReport()函数,函数的参有:l filledReport - Ja

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号