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

上传人:水****8 文档编号:24644295 上传时间:2021-07-06 格式:DOCX 页数:18 大小:171.75KB
收藏 版权申诉 举报 下载
代理服务器改造设计说明书_第1页
第1页 / 共18页
代理服务器改造设计说明书_第2页
第2页 / 共18页
代理服务器改造设计说明书_第3页
第3页 / 共18页
资源描述:

《代理服务器改造设计说明书》由会员分享,可在线阅读,更多相关《代理服务器改造设计说明书(18页珍藏版)》请在装配图网上搜索。

1、最新 精品 Word 欢迎下载 可修改代理服务器改造设计说明书 中通软科技技术有限公司广州分公司2022年11月25请不要删除后面的分节符变更记录变更版本日期图表、表格、段落号A/M/D原因与修改情况描述修订人审核人1.02022-11-25ALLA首次创建满孝东注:A 增加 M 修改 D 删节请不要删除后面的分节符目录请不要删除后面的分节符第1章 引言1.1. 编写目的编写的目的主要是通过对本次开发软件的设计、约定及相关内容作一具体描述,从而可作为公司开发人员、测试人员的指导性文件。1.2. 定义负载均衡(Server Load Balance)一般用于提高服务器的整体处理能力,并提高可靠性

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

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

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

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

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

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

8、t()方法。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()方法启动socket客户端,初始化进程数位为

10、每个进程启动一个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; 报表的导出方式。l IAppServiceBO., vir

14、Path; 生成大报表时产生的虚拟文件路径。函数执行完毕后将返回一个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对象,我们可以利用这

15、个对象将报表导出到相应的文档中。可以导出的文档类型分别有:l expNone:不导出报表;l expHtml:HTML格式;由于使用效果不好,已作放弃。l expExcel:Excel格式;l expPdf:PDF格式;l expCsv:CSV格式。同样,导出报表到文档时也是使用报表引擎中的exportReport()函数,函数的参有:l filledReport - JasperPrint; 上一步中生成的报表对象。l reportvo - ReportVO; 报表的VO对象。l exportType - int; 报表的导出类型。l virPath - String; 生成大报表时使用到的

16、虚拟文件路径。报表导出完成后便返回一个输出的数据流(OutputStream),以便于储存到数据库。3.7.3. 保存报表结果 报表导出完成后便开始将结果压缩并写入到数据库中进行存储,该部分的内容在报表的存取中进入描述。3.8. 报表结果的压缩及解压 由于得到的报表结果及数据可能占用的空间比较大,因此为了节省空间的开支及提升数据库的读写速度在数据存储到数据库前先对数据进行压缩操作。由于Java只支持zip及jar格式的压缩,所以我们直接采用p包下面的压缩类对数据进行压缩。数据的压缩主要有两类:(1) 文件的压缩。对于文件的压缩主要是对文件夹的压缩,我做压缩操作之前,先将要压缩的文件放置于同一个

17、文件目录下,然后将该目录压缩成一个文件。文件的格式为:*.zip。(2) 对象的压缩。由于压缩操作时,ZipOutputStream不支持直接对对象的压缩,只支持对数据流的压缩操作,因此我们需要对对象进行序列化到数据流后才行进行压缩操作。使用ObjectOutputSteam类将对象序列化到输出的数据流中,然后将对象的输出流变换到一个数据的输入流中输入到ZipInputSteam中进行压缩。 数据压缩后便可以入库存储。 数据的解决过程,是压缩的一个反过程,原理一样,不再赘述。3.9. 报表结果的存取3.9.1. 报表结果的保存报表结果保存时需要记录的信息分别有: l rptResultID 标

18、志生成结果的ID,为一个GUID。l reportID 报表ID。l commitType 任务的类型。0-定时任务;1-后台任务;2-手工任务l taskerID 任务的ID。l ExportType - 导出类型;0-无需导出;1-Html格式;2-Excel格式;3-Pdf格式;4-Csv格式l runTime 任务执行的时间。l reportObject 报表对象,即JasperPrint对象。l reportData 报表数据,即为List对象。l reportResult 报表结果,对应的Excel、PDF、CSV文档。l conKeyValue 筛选条件对象的ID。l conCa

19、ptionValue 筛选值。l isUsedFile 是否使用了虚拟文件。在保存报表时,先保存报表结果的基本信息,如:rptResultID、reportID、commitType、taskerID、ExportType、runTime等,再逐个保存报表的对象信息,最后是所使用的筛选条件值。注:报表的对象信息在存库前作为一些类的对象实例,在存库时已经过序列化和压缩,因此在数据再次被取出时不能直接被使用,需要经过解压缩和反序列化后才能被使用。3.9.2. 报表结果的读取报表结果的读取时报表结果保存的一个反向过程,报表对象的数据在读取到后要进一步经过ZIP数据流解压和对象的反序列化后,才可以还原

20、到对象供使用都使用。第4章 公共文件配置4.1.1. Server.xml配置maxMemory : 指启动新的进程时所设置的最大内存数即-Xmx,单位MB : 将生成的报表文件存放指定地址的FTP服务器中。 : FTP服务器用户名。 :FTP服务器密码。 :FTP服务器端口。单位是int型MaxProcess :最大进程数,即配置启动子进程的数量。单位是int型MaxThread :最大线程数,即配置每个子进程中最大线程数。单位是int型SocketPort : socket服务端的端口号。单位是int型ProcessWaitingTime :进程等待时间,当进程下线程数为0时进程获取等待时间,等待时间内此进程依然没有线程启动则杀死进程。单位为分钟.添加表TASKER4MONITOR用于监控代理服务器执行报表

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!