部署运行管理子系统概设.docx
- 文档编号:17382461
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:23
- 大小:21.58KB
部署运行管理子系统概设.docx
《部署运行管理子系统概设.docx》由会员分享,可在线阅读,更多相关《部署运行管理子系统概设.docx(23页珍藏版)》请在冰点文库上搜索。
部署运行管理子系统概设
第六部分部署运行管理子系统
第一章部署运行管理服务端
1.1工具
1.1.1日志组件
1.1.1.1.功能描述
根据日志组件注册信息,将日志内容按模块输出到不同的文件。
1.1.1.2.业务流程描述
1、注册日志组件;
2、管理日志组件;
3、获取使用日志组件;
1.1.1.3.业务流程图
1.1.1.4.接口
注册日志组件:
/**
*注册组件日志
*@parammodelName组件名称
*@paramlogName日志名称
*@paramlevel日志级别
*@parammaxHistory日志保留时间
*/
publicstaticvoidregister(StringmodelName,StringlogName,LevellogLevel,intmaxHistory)
获取日志组件:
/**
*获得日志组件
*未注册的模块,只返回consolelogger
*@parammodelName模块名称
*@paramcls类名
*@return
*/
publicstaticch.qos.logback.classic.LoggergetLogger(StringmodelName,Classcls)
1.1.2线程池组件
1.1.2.1.功能描述
使用无界队列线程池,线程池大小可修改,状态可查询。
1.1.2.2.业务流程描述
1、建立线程池;
2、使用线程池
3、获取线程池状态
1.1.2.3.业务流程图
1.1.2.4.接口
建立线程池、使用线程池:
/**
*建立线程池
*@paramcoreSize线程池大小
*@parammaxSize线程池最大容量
*@parampoolName线程池名称
*1.采用无界队列,线程池最大值无意义
*2.采用无界队列,核心池大小接受动态调整。
*/
protectedThreadPool(intcoreSize,intmaxSize,StringpoolName);
publicclassUpMessageProcessThreadPoolextendsThreadPool;
获得线程池状态:
finalpublicStringstat();
1.1.3Socket组件
1.1.3.1连接器封装
1.1.3.1.1.功能描述
连接器建立客户端与服务器之间的连接,接收消息,根据不同消息类型,通知不同处理器进行处理。
支持创建阻塞式和非阻塞连接器,阻塞式连接器不需要人工关闭连接,处理器处理完所有工作后断开连接。
1.1.3.1.2.业务流程说明
1、建立连接器
2、设置处理器
3、连接服务端
1.1.3.1.3.业务流程图
1.1.3.1.4.接口
创建连接器:
publicclassSocketConnectorextendsThread(阻塞式);
publicclassNioSocketConnectorextendsThread(非阻塞式);
设置处理器:
publicvoidsetHandler(SessionClientBlockHandlerhandler)(阻塞式);
publicvoidsetHandler(SessionHandlerhandler)(非阻塞式);
连接服务端:
publicvoidconnect();
1.1.3.2处理器封装
1.1.3.2.1.功能描述
Socket事件处理器,接收连接器通知消息,处理消息。
分为客户端使用的阻塞式处理器,客户端或服务端使用的非阻塞式处理器,以及用在服务端的阻塞式处理器。
1.1.3.2.2.业务流程描述
1、连接成功处理(非阻塞式)
2、业务消息处理
3、异常处理
1.1.3.2.3.业务流程图
1.1.3.2.4.接口
非阻塞式连接处理器使用:
serverSocket.SetSessionHandler(newSessionHandler(){});
阻塞式连接处理器使用:
serverSocket.SetSessionBlockHandler(newSessionServerBlockHandler(){});
阻塞式业务处理:
/**
*阻塞-业务处理
*此方法结束后,连接自动关闭
*@throwsClassNotFoundException
*/
protectedabstractvoidprocess()throwsIOException,ClassNotFoundException;
非阻塞式业务处理:
publicabstractvoidmessageReceived(SocketChannelchannel,Messagemessage)throwsIOException;
1.1.4统一接入接口
1.1.4.1.功能描述
模块加入容器需要实现统一接入接口,应用运行时,核心模块通过此接口向业务模块转发请求。
模块更新时,autoins通过此接口停止或启动业务模块。
1.1.4.2.业务流程描述
1、模块加载成功后启动模块
2、获得模块版本
3、业务请求处理
4、模块卸载成功后停止模块
1.1.4.3.业务流程图
1.1.4.4.接口
启动模块:
/**
*启动模块
*@returntrue:
成功
*false:
失败
*/
publicbooleanstart(String...args);
返回版本号:
/**
*返回模块当前版本号,必须继承覆盖实现
*@return字符串形式版本号
*/
publicStringgetModelVersion();
处理请求:
/**
*请求处理
*
*@paramrequest请求字符串,json格式
*
*@return可返回空
*/
publicObjectprocess(Requestrequest);
停止模块:
/**
*停止模块
*@returntrue:
成功
*false:
失败
*/
publicbooleanstop();
1.1.5模块组件
1.1.5.1.功能描述
模块为程序中的实体,包含配置文件和jar包文件,配置文件指定模块实体信息,jar包为实现统一接入接口类包。
1.1.5.2.业务流程描述
1、配置模块配置文件
2、读取模块配置文件
3、检查模块配置是否正确
4、生成模块实体
1.1.5.3.业务流程图
1.1.5.4.接口
配置文件名称:
conf.10.aud
Conf:
固定文件名前缀
10:
加载顺序,容器启动时按此顺序加载,越小越先处理
Aud:
模块名称
Jar包名称为:
模块名.jar
生成模块实体:
/**
*根据配置文件,生成模块信息实体
*@paramconfig
*@return
*@throwsIOException
*/
publicstaticModelgetModelByConfig(Fileconfig);
模块处理:
/**
*获得目录下模块的配置文件
*
*文件名格式分为三段,conf.xxx.xxx
*第一段固定
*第二段为数字,数字小的先加载,数字大的后加载
*第三段为模块名称等说明性的易懂的字符串
*
*@paramcurrentModelDir
*/
publicstaticFile[]getModelConfigFiles(FilerootDir);
模块配置完整性检查:
/**
*检查配置项是否完整
*@parammodel
*@return
*/
publicstaticvoidcheckModel(Modelmodel){
1.2容器/客户端管理
1.2.1客户端注册
1.2.1.1.功能描述
客户端注册与加载到内存。
当客户端启动后,客户端信息汇报到服务端,服务端将客户端分配到组中进行管理。
其中,一个模块可以属于多个组,一个客户端/容器只能属于一个组。
1.2.1.2.业务流程描述
1、增加客户端
2、通知客户端进行注册
3、将客户端注册到内存
4、获取客户端信息
1.2.1.3.业务流程图
1.2.1.4.接口
客户端注册:
/**
*根据文件内容,通知一批客户端进行注册
*@parammsgStr
*/
publicstaticintregClientByFile(StringfileName);
客户端写入磁盘:
/**
*增加客户端,并持久化
*用于客户端信息主动汇报时的处理
*@paramclient
*/
publicstaticbooleanaddClient(finalClientclient)
增加客户端到内存:
/**
*增加客户端到内存
*@paramclient
*/
publicsynchronizedstaticvoidputClient(Clientclient);
获得已注册客户端:
/**
*获得已注册客户端信息数
*@return
*/
publicstaticintgetClientCount();
1.2.2客户端更新
1.2.2.1.功能描述
当客户端信息发生变化时,如所属组发生变化,此时需要重新更新客户端。
1.2.2.2.业务流程描述
刷新客户端信息,重新将客户端信息汇报到服务器。
1.2.2.3.业务流程图
1.2.2.4.接口
更新客户端:
/**
*根据组名称,刷新客户端信息,即重新汇报
*@paramgroupName
*@return
*/
publicstaticintreflushClientByGroup(StringgroupName);
1.2.3客户端删除
1.2.3.1.功能描述
当某客户端需要卸载时,删除该客户端注册信息,包括内存和磁盘信息。
1.2.3.2.业务流程描述
1、根据IP地址删除客户端
2、根据文件内容删除客户端
1.2.3.3.业务流程图
1.2.3.4.接口
根据IP地址删除客户端:
/**
*根据IP地址删除客户端,包括内存及磁盘文件
*@parammsgStr
*/
publicstaticvoidremoveClientByIp(Stringaddr);
根据文件内容删除客户端:
/**
*根据文件内容,删除客户端,包括内存及磁盘文件
*@parammsgStr
*/
publicstaticintremoveClientByFile(StringfileName);
1.3版本管理
1.3.1版本注册
1.3.1.1.功能描述
将不同模块对应的版本进行注册,最新模块版本文件存放在current目录下,旧版本文件存放在bak目录下,使用时临时获取处理,同一版本备份多次后只保留最后一份。
1.3.1.2.业务流程描述
1、将模块移动到current目录
2、版本注册
3、模块加入内存
4、获取版本信息
1.3.1.3.业务流程图
1.3.1.4.接口
移动模块到current目录:
ModelUtil.moveModelDelExist(reg_model,configFile.getParent(),Env.Property.VRESION_DIR_CUR.getValue());
注册模块:
/**
*根据文件,注册模块
*模块版本管理只在内存中管理最新版本,非最新版本不记内存
*@paramfileName
*@return
*/
publicstaticStringregModel(StringfileName);
models.put(reg_model.getName(),reg_model);
加载模块:
/**
*只加载最新版本到内存
*旧版本在bak目录下,需要时再去取
*/
publicsynchronizedstaticintloadCurrentModel;
获取模块信息:
/**
*获得已注册模块详细信息
*@return
*/
publicstaticStringgetModelDetail();
1.3.2版本更新
1.3.2.1.功能描述
系统线程定时扫描指定目录,检测是否有新版本需要发布,若版本目录下包含配置文件及包文件,则发布版本更新消息。
1.3.2.2.业务流程描述
1、监控版本目录是否存在
2、监控版本目录是否有版本配置文件
3、监控版本目录是否有包文件
4、发布版本更新消息
1.3.2.3.业务流程图
1.3.2.4.接口
发布版本更新通知:
MessageNoticeService.versionAppNotice(model,null,false);
1.3.3版本删除
1.3.3.1.功能描述
当系统更新新版本后,删除已过期版本,并将过期版本备份到bak目录下。
1.3.3.2.业务流程描述
1、卸载已经注册模块
2、将模块备份到bak目录
1.3.3.3.业务流程图
1.3.3.4.接口
卸载过期模块:
/**
*根据模块名称缷载模块
*@parammsgStr
*/
publicstaticStringremoveModel(Stringmodel_name)
将过期版本备份到bak目录下:
ModelUtil.moveModelToBak(rm_model,Env.Property.VRESION_DIR_CUR.getValue(),Env.Property.VRESION_DIR_BAK.getValue());
1.4版本发布管理
1.4.1自动版本发布
1.4.1.1.功能描述
系统发布新版本通过自动版本发布不要人工参与,实现完全自动化
1.4.1.2.业务流程描述
1、监控task任务状态
2、判断自动部署是否已激活
3、通知客户端进行版本更新
1.4.1.3.业务流程图
1.4.1.4.接口
监控task是否已启动:
if(task.isRunning())
自动部署是否已激活:
if(Env.Property.AUTO_INS.intValue()==Constant.Sys.ENABLED&&task.isRunning()==false)
1.4.2人工版本发布
1.4.2.1.功能描述
人工通过命令行工具,可通知单个客户端、多个客户端、一组客户端主动下载发布。
1.4.2.2.业务流程描述
1、读取输入命令
2、命令分析、执行
1.4.2.3.业务流程图
1.4.2.4.接口
读取输入命令;
publicvoidprocess(SocketChannelchannel)throwsIOException;
命令分析、执行:
/**
*分析处理命令
*@paramcommand
*@paramchannel
*@return
*/
publicstaticStringdoCommand(Stringcommand,SocketChannelchannel);
1.4.3版本发布进度监控
1.4.3.1.功能描述
记录版本发布过程中的状态,用于控制版本发布的整个流程。
1.4.3.2.业务流程描述
1、获取每条任务详细信息
2、获取当前任务数
1.4.3.3.业务流程图
1.4.3.4.接口
获取每条任务详细信息:
/**
*获得每条任务详细信息
*
*处理时对task加锁,保证结果返回前task不被重置
*
*@return
*/
publicStringgetSchedulerDetailInfo();
获取任务数:
/**
*获得当前任务数
*
*处理时对task加锁,保证结果返回前,统计信息不被修改
*
*@return
*/
publicStringinfo();
1.5命令行管理
1.5.1.功能描述
通过使用命令行工具实现对服务器的管理,同时也可以管理客户端容器。
1.5.2.业务流程描述
1、命令创建
2、启动命令行管理客户端
3、读取命令
4、命令分析、执行
1.5.3.业务流程图
1.5.4.接口
读取命令:
/**
*读取命令
*@return
*@throwsIOException
*/
privateStringreadCommand()throwsIOException;
命令分析、执行:
/**
*分析处理命令
*@paramcommand命令字符串
*@paramchannel接收命令通道
*@return
*/
publicstaticStringdoCommand(Stringcommand,SocketChannelchannel)
第二章容器/客户端
2.1模块管理
2.1.1模块加载
2.1.1.1.功能描述
判断模块是否存在,并将模块加载到内存,持久化。
一个模块的加载失败不影响其他模块的加载。
2.1.1.2.业务流程描述
1、判断模块目录下是否有文件
2、加载模块jar包设置jar依赖
3、注册模块业务处理线程池
4、注册模块到内存
5、更新下游模块
2.1.1.3.业务流程图
2.1.1.4.接口
判断模块是否存在:
if(currentModelDir.exists()&¤tModelDir.isDirectory());
加载模块:
publicsynchronizedstaticvoidloadCurrentModel();
加载jar包并设置依赖:
privatestaticbooleanloadJar(Stringdir,Modelmodel)throwsInstantiationException,IllegalAccessException;
注册模块到内存:
models.put(model.getName(),model);
更新下游模块:
/**
*更新下游模块
*
*查找依赖本模块的模块,全部更新
*
*@parammodelName模块名称
*/
publicstaticvoidupdateAffectModels(StringupModelName,longupdatePoint);
2.1.2模块缷载
2.1.2.1.功能描述
将内存中已经存在的模块卸载。
2.1.2.2.业务流程描述
1、从模块列表中删除模块
2、删除模块关系
3、模块执行stop
4、销毁模块所用资源
5、更新客户端
2.1.2.3.业务流程图
2.1.2.4.接口
从列表中删除模块信息:
models.remove(model_name);
删除模块关系:
/**
*删除模块关系
*@paramupModel
*@paramdownModel
*/
publicstaticvoidremoveStream(StringupModel,StringdownModel)
模块执行stop:
(ProxyCenter)mem_model.getInstance()).stop();
销毁模块所有资源:
mem_model.getThreadPool().distoryPool();
LogFactory.destoryAppender(model_name);
更新客户端:
ClientManager.updateClient();
2.2热部署/动态更新
2.2.1.功能描述
在不影响其他业务模块正常运行情况下,动态更新某些模块信息,在更新模块时要保证没有其他业务正在使用。
2.2.2.业务流程描述
1、通知客户端更新模块
2、通知客户端卸载模块
3、加载模块
2.2.3.业务流程图
2.2.4.接口
通知客户端更新版本:
ChannelUtil.sendMessage(channel,newMessage(Constant.MessageType.COMMAND_SENT_UPDATE_MODEL,ObjectUtil.toByteArray(client)));
通知客户端修改线程池大小:
ChannelUtil.sendMessage(channel,newMessage(Constant.MessageType.COMMAND_SENT_SET_MODEL_THREAD_POOL_SIZE,ObjectUtil.toByteArray(client)));
2.3任务分发/统一调度
2.3.1.功能描述
统一调度是对外提供的接口,业务请求经过前段分析,将请求交由统一调度系统。
2.3.2.业务流程描述
异步式、同步式请求分发
2.3.3.业务流程图
2.3.4.接口
请求分发:
/**
*请求分发
*
*同步处理
*
*返回处理结果
*
*@paramrequest
*/
publicstaticObjectdispatchSchedulerSyn(finalRequestrequest);
/**
*请求分发
*
*异步处理
*
*如果模块线程池存在,则将请求放入业务模块处理线程池中处理。
*否则新开线程处理
*异步处理没有返回值
*
*@paramrequest
*/
publicstaticvoiddispatchSchedulerASyn(finalRequestrequest);
2.4服务端命令响应
2.4.1.功能描述
服务器接收命令行命令,并对该命令进行分析,将远程命令转发到客户端处理,执行本地命令。
2.4.2.业务流程描述
1、读取命令
2、分析命令
3、执行命令、转发
2.4.3.业务流程图
2.4.4.接口
读取命令:
/**
*读取命令
*@return
*@throwsIOException
*/
privateStringreadCommand()throwsIOException;
分析
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 部署运行管理子系统 概设 部署 运行 管理 子系统