ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:153.36KB ,
资源ID:8905906      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/8905906.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(代理服务器改造详细设计文档.docx)为本站上传会员【pc****0】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

代理服务器改造详细设计文档.docx

1、 代理服务器改造 设计说明书 中通软科技技术有限公司广州分公司 2010年11月25 请不要删除后面的分节符 变更记录 变更版本 日期 图表、表格、段落号 A/M/D 原因与修改情况描述 修订人 审核人 1.0 2010-11-25 ALL A 首次创建 满孝东

2、 注:A – 增加 M – 修改 D – 删节 请不要删除后面的分节符 目录 第1章 引言 1 1.1. 编写目的 1 1.2. 定义 1 1.3. 参考资料 1 1.4. 设计与实现的限制 1 第2章 概述 2 2.1. 定义 2 2.2. 代理服务器改造体系结构 2 2.2.1. 技术架构图 2 第3章 功能设计 5 3.1. 任务获取 5 3.2. 线程池管理 5 3.3. 进程池管理 5 3.4. 进程信息的获取 6 3.5. 任务分配规则 7 3.6. 线程与进程通讯 7 3.7. 生成及导出报表

3、 8 3.7.1. 生成报表 8 3.7.2. 导出报表 9 3.7.3. 保存报表结果 9 3.8. 报表结果的压缩及解压 10 3.9. 报表结果的存取 10 3.9.1. 报表结果的保存 10 3.9.2. 报表结果的读取 11 第4章 公共文件配置 12 4.1.1. Server.xml配置 12 请不要删除后面的分节符 第1章 引言 1.1. 编写目的 编写的目的主要是通过对本次开发软件的设计、约定及相关内容作一具体描述,从而可作为公司开发人员、测试人员的指导性文件。 1.2. 定义 负载均衡(Server   Load   Balance

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

5、其生命周期等同于socket服务端。 1.3. 参考资料 1) 《代理服务器详细设计文档》 1.4. 设计与实现的限制 1) Java代码编写,后台执行 2) 支持主流数据库、操作系统、应用服务器; 第2章 概述 2.1. 定义 项目总体设计要达到的目标,是通过明确代理服务器改造设计的概念、关系,明确系统开发的思路,作为指导应用系统开发的方法。 2.2. 代理服务器改造体系结构 代理服务器由之前的多线程执行任务现改造为多进程来执行任务,改造所需要开发的功能主要有:进程管理和任务分配。 2.2.1. 技术架构图 代理服务器改造总体架构图如下:

6、 系统总体架构由六部分组成: 线程池:线程池由多个线程组成, 根据进程信息管理分配任务,建立线程池并执行任务,当任务完成时将其销毁。 进程池:进程池由多个进程组成每一个进程都是一个JDK实例,每一个进程中包括一个线程池,进程池的初始化由进程信息管理来决定。 进程信息管理:当任务队列获取任务时,如果进程存在由线程建立的通讯获取运行中进程的信息,并均衡分配至进程中;反之,根据任务队列中的任务数,创建线程去启动进程,并将任务均衡分配至进程中。 线程通讯:由进程信息管理,根据任务队列中的任务,创建出线程去启动进程,通过socket实现此线程与进程之间的通讯,当任务执行完毕时将线程和进程

7、销毁并返回信息。 Socket时时通讯:利用socket实现线程与进程信息管理的时时通讯。 内存溢出处理:因无法计算每个任务所需要的内存使用情况,若在合理分配任务到进程中执行任务时出现内存溢出造成进程死掉则重新启动一个进程将致死内存溢出的那条任务返回到智能任务分发处;若其它情况导致进程死掉,则重新启动进程不在执行致死进程死掉的那条任务。 第3章 功能设计 3.1. 任务获取 在任务队列类(TaskerQueuss)获取管理队列scheduleTasker(计划任务队列)。 线程的分配: (1) 线程的分配。当任务队列中有任务时,便开始检查进程信息,将

8、任务队列中的任务按照任务分配规则分配至每个线程中。线程的分配操作在ThreadPoolManager类执行,在代理服务启动时便为该类启动一条线程在监控是否在队列进入,若有任务进入时立即为任务分配线程。 (2) 线程的回收。当任务完成并离开执行线程时将已分配的线程减一,并释放自已线程。 3.2. 线程池管理 线程池的管理分为socket服务端的线程池管理和socket客户端的线程池管理。 1、服务端的线程池管理 当代理服务器启动时会分别启动: 1) socket服务端用于接收和分配任务。 2) 任务队列监控。 当任务队列中有任务时,且任务数小于server.xml 中配置最

9、大进程数时,则根据任务数启动线程数,反之启动最大进程数的线程(比如最大进程数为5个,那启动的最大线程数就是5个)。 服务端的线程池管理由任务队列中的任务来决定,每一个线程的启动都会在线程中去启动一个进程,在进程的主线程中启动Socket客户端。 2、客户端的线程池管理 由socket服务端分配的任务数和配置文件中设置的最大线程数来决定进程中启动执行任务的线程数。当socket服务端分配任务数小于配置文件中的最大线程数时,根据任务数启动线程数,反之则启动最大线程数。 3.3. 进程池管理 初始化进程池如图 : 1、 根据配置文件中最大进程数设置进程,将进程信息由Proces

10、sVO对象存储,由ProcessManager类统一管理。 2、 为每个进程设置最大配置文件中最大线程数,当线程创建时由ThreadVO对象存储线程信息,将此线程对象存储在所属进程对象中,当有任务要执行时启动线程,线程类为ChildrenThread。 3、 为每个进程启动一个socket客户端调用startClient()方法。 4、 时时获取socket服务端向客户端发来的命令,分为以下两种: 1) 接收服务端分发的任务,根据任务分配规则执行任务。 2) 索要进程信息,调用sendProcessInfoToServer()方法返回进程信息。 执行任务时错误处理 在任务执行

11、中即生成报表时,捕获异常处理,分为两种异常: 1) 内存溢出,结束线程,并将此类错误的任务通过回调给客户端,由客户端发送给服务端,再由服务端创建新的任务队列,存放此类任务,待所有任务执行完毕后,每个进程分发一条此类任务执行,若再次出现内存溢出现象,则将此任务抛弃。 2) 报表自身错误,抛弃。 3.4. 进程信息的获取 当启动一个新的进程时系统会为此进程创建一个进程ID。 定义不同的操作系统接口,分别为:Windows和Linux两种。 当任务分配时需要调用进程信息,根据每个进程的进程ID,再根据操作系统的命令;如: Windows获取所有系统进程的信息在DOS中执行taskLi

12、st命令,在所有进程信息中根据进程ID在得到我们所需要的进程信息。 3.5. 任务分配规则 任务分配分为两类任务分配: 1) 正常任务即未出现内存溢出的任务 当任务队列中有任务进入时,调用init()方法,init方法调用getProcessInfo()方法: 此方法没有返回进程信息初始化进程信息(调用startSocketServer()方法启动socket客户端,初始化进程数位为每个进程启动一个socket客户端);此方法返回初始化进程信息,即进程已经初始化完毕进入任务分配: l 当所有进程中没有任务在执行时,根据任务数,均匀分配到进程中,剩余的根据进程信息中内存使用情况分配

13、到进程中。进程中同时执行任务不得超过配置文件中的最大线程数的个数,分配任务数大于最大线程数的个数则排队等待。 l 当进程中有任务执行时,先获取所有进程信息,根据内存使用情况取出占用内存较少的为其分配任务。 l 线程中执行任务: 根据任务数启动线程数,如任务数大于最大线程数则启动最大线程数其余任务排队,待线程中任务执行完毕,将此线程销毁,然后检索此进程中线程数,小于最大线程数个则将排队任务重新启动线程执行。 2) 非正常任务即出现过内存溢出的任务 在线程执行任务时出现内存溢出,则将此任务通过回调返回到socket客户端再由客户端发送到服务端,由服务端建立一个单独存储内存溢出任务的队列

14、待所有任务执行完成后,将此队列中的任务分发到进程中去。一条进程只分发一条任务,其余任务等待进程中任务执行完成后在启动执行同时将执行完后的任务在队列中删除,若再次出错直接放弃。在执行错误队列任务时,同时正常任务队列也有任务,那么正常任务等待错误队列中的任务执行完成后在执行正常任务。 3.6. 线程与进程通讯 线程中启动socket服务端,在每个进程中各自启动一个socket客户端,每个客户端都会与服务端建立一个连接通道, 连接建立成功后客户端将进程信息(即ProcessVO对象)返回给服务端,服务端为每个客户端建立一个连接对象,将连接对象赋值到ProcessVO属性socket中,当服务

15、端根据进程信息分发任务时,在 ProcessVO对象中获取此进程的客户端连接,对其分发任务,如图: 3.7. 生成及导出报表 当任务队列成功分配到线程后,线程便开始启动进行生成报表的相关操作。每个线程只对应一张报表的一种筛选组合。当线程启动时更新当前的任务为“正在执行”状态,然后开始调用报表引擎生成报表数据。当生成及导出报表的过程执行完毕还要对任务组和任务的状态进行及时的更新,以便于客户端的监控。报表的生成过程可有以下的几个步骤。 3.7.1. 生成报表 生成报表时使用接口IappServiceBO中的createReportDataAndObject(

16、)函数。使用函数时参数为一个HashMap对象,其填充办法为: l IAppServiceBO.REPORT_ID, reportID; 报表ID。 l IAppServiceBO.REQUISITION, req;Requisition – 筛选条件。 l IAppServiceBO.FLAG, isCreateReport; 是否导出报表。 l IAppServiceBO.EXPORT_TYPE, exportType; 报表的导出方式。 l IAppServiceBO.FILE_PATH, virPath; 生成大报表时产生的虚拟文件路径。 函数执行完毕后将返回一个HashM

17、ap对象,在该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对象,我们可以利用这个对象将报表导出到相应的文档中。可以导出

18、的文档类型分别有: 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; 生成大报表

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

20、缩。 对于文件的压缩主要是对文件夹的压缩,我做压缩操作之前,先将要压缩的文件放置于同一个文件目录下,然后将该目录压缩成一个文件。文件的格式为:*.zip。 (2) 对象的压缩。 由于压缩操作时,ZipOutputStream不支持直接对对象的压缩,只支持对数据流的压缩操作,因此我们需要对对象进行序列化到数据流后才行进行压缩操作。使用ObjectOutputSteam类将对象序列化到输出的数据流中,然后将对象的输出流变换到一个数据的输入流中输入到ZipInputSteam中进行压缩。 数据压缩后便可以入库存储。 数据的解决过程,是压缩的一个反过程,原理一

21、样,不再赘述。 3.9. 报表结果的存取 3.9.1. 报表结果的保存 报表结果保存时需要记录的信息分别有: l rptResultID – 标志生成结果的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 – 报表对象,即J

22、asperPrint对象。 l reportData – 报表数据,即为List对象。 l reportResult – 报表结果,对应的Excel、PDF、CSV文档。 l conKeyValue – 筛选条件对象的ID。 l conCaptionValue – 筛选值。 l isUsedFile – 是否使用了虚拟文件。 在保存报表时,先保存报表结果的基本信息,如:rptResultID、reportID、commitType、taskerID、ExportType、runTime等,再逐个保存报表的对象信息,最后是所使用的筛选条件值。注:报表的对象信息在存库前作为一些类的对象

23、实例,在存库时已经过序列化和压缩,因此在数据再次被取出时不能直接被使用,需要经过解压缩和反序列化后才能被使用。 3.9.2. 报表结果的读取 报表结果的读取时报表结果保存的一个反向过程,报表对象的数据在读取到后要进一步经过ZIP数据流解压和对象的反序列化后,才可以还原到对象供使用都使用。 第4章 公共文件配置 4.1.1. Server.xml配置

24、 MetadataDatabaseType="Oracle" LoginUserName="grouprsasofficial" LoginPassword="grouprsasofficial" maxMemory="512" FTPServer="172.16.29.53" FTPLoginName="man_xdong" FTPPassword="manxiaodong" FTPPort="21" MaxLinkNumber="100" MaxThread="3" MaxProcess="2" SocketPort="2047"

25、 ProcessWaitingTime="1" /> maxMemory : 指启动新的进程时所设置的最大内存数即-Xmx,单位MB FTPServer : 将生成的报表文件存放指定地址的FTP服务器中。 FTPLoginName : FTP服务器用户名。 FTPPassword :FTP服务器密码。 FTPPort :FTP服务器端口。单位是int型 MaxProcess :最大进程数,即配置启动子进程的数量。单位是int型 MaxThread :最大线程数,即配置每个子进程中最大线程数。单位是int型 SocketPort : socket服务端的端口号。单位是int型 ProcessWaitingTime :进程等待时间,当进程下线程数为0时进程获取等待时间,等待时间内此进程依然没有线程启动则杀死进程。单位为分钟. 添加表TASKER4MONITOR用于监控代理服务器执行报表

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服