最近三个月来项目组一直在做这个项目,我也一直在看他们写的代码,现在梳理一下项目的流程。
这是一个远程安装服务的控制台(javase ,web项目)。
将软件需要的安装包远程复制到节点---》安装---》启动服务---》进行监控
注意事项:
前提准备:
(1)远程调用命令最基本的,不用说(复制,解压,删除,遍历目录,查看文件内容)。
(2)管理服务的命令(启动,停止,重启)。公司有个管理软件(像软件管家一样),对安装的服务进行管理,前提是要正确打包。
(3)监控服务状态,zabbix监控
项目展开:
每个服务都有自己的安装包,要安装那些服务就激活那些服务的安装包:
一、激活安装包:
1>记录安装包的路径(class.getResource("/packages/").getFile())
http://blog.csdn.net/lcj8/article/details/3502849(准确获得安装包的路径。)
排除linux和windows路径问题:File.separator,java File类自动区分路径符号“/” 或“\”
2>记录配置文件的一切信息:(1)默认配置文件(及配置模板)的路径,(2)配置文件的配置内容(宏的起始终止位置,参数配置的信息)
其中读取文件,json都是重复使用的技术。 json例子参见:http://blog.csdn.net/u010738184/article/details/49155013
二、扫描节点 :
利用远程调用的接口: 1>检查安装环境(linux,windows),是否可达 2>复制 管理和监控软件到远程。3>利用管理软件安装和启动监控软件。
最后初始化数据库数据,将节点信息(扫描的信息)存入数据库。
三、安装软件:
1>检查安装环境 2>远程复制安装包 3>用管理软件安装并启动
其中有很多小细节:
(平台不同则安装包不同,配置文件是否修改,是否新添进配置组等。)
四、修改软件的配置文件,还有配置组的概念:
1>要更改关联的数据信息。2>是否有配置组
逻辑关系:前台传来的数据 :配置组 (配置文件修改,替换宏中的内容(读文件,写文件 json数据格式,替换更加方便)。)
1>修改了配置 && 传来的配置组为空 ---->直接将配置信息存入 配置实例表,不在配置组表中插入数据。
2>修改了配置 && 传来的配置组不为空--->将配置信息存入 配置实例表,同时将组信息存入配置组表。
3>没有修改配置-------------------------------->将配置信息存入配置实例表。
注:由于配置组表与配置实例表的关系,此时在1步中,配置实例信息与配置组没有关联关系,则配置实例中的配置组id列没有数据,(可指定插入一个数值)
(1)基于组来修改配置文件: -->将与组相关的所有配置文件所在的主机都进行修改,再重启服务
(2)修改单个主机上的配置文件 :--->在本地替换配置文件中的宏再复制到远程,重新启动服务。
(3)修改配置文件的组信息: 分为安装时修改||安装完成后修改。(步骤同上)
五、监控,告警(这一部分还要深入看,以后再写)
六、技术总结:
这是我工作中的第二个项目(是大学毕业后的第一个项目),说实话,在前期开会时,他们说的这些操作流程,我真的完全没有概念,一直都是模模糊糊,不知道他们在说什么?也有很多名词都是第一次接触,他们说不懂就问,可是那时候,我好想什么都不懂,可是又不知道该问什么?就这样稀里糊涂开始了我的工作。带我的那个人给我分配了一小部分工作,让我看需求。我基本上一直在看需求。在前期,我们要写最基本的远程调用接口,然后是软件安装这一部分。
1>我负责linux端远程调用函数的编码,主要用到jsch.jar,开始读源码,测试。
这里学到了最基本的linux指令,ps,ls,df -h,tar。
2>软件安装部分,软件状态的控制(启停,重启),软件卸载。
学到的知识:
java高级部分的知识,以前在学校这些都是别忽略的,在工作中却是经常用到的(有时会感觉学校教的 真是连皮毛都没有)。
<1>java异常知识:异常怎样处理,try {} catch() { } ,catch (){} 中可以捕获异常-->自己消灭。抛出异常--->让系统处理
throw new RuntimeException(e); 转换成unchecked异常。
<2>java I/O流的操作,读写文件,json
<3>java集合的知识,map ,map.entity();
<4>java的多线程:run(){}
Spring的一些知识:
<1>Spring的事务处理 :@Transaction,DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态transactionManager.commit();
事务在抛出异常后回滚。
<2>Spring 的定时任务调度(Quartz)
通过配置.xml,来定时执行类中的函数代码。(还有其他的方法,会继续研究)
尚待努力:
(1)数据库postgres:
(2)redis(键-值的存储,有时间会好好研究一下)
(3)定时器(任务调度)
(4)zabbix
这是一些学到的知识和未学到的知识的总结。
七、其他方面的总结:
真心觉得技术架构工程师真不是盖的,依靠的是经验和能力,他们能够描绘项目的整个流程,对项目遇到的问题有整体的预测和把握,这是需要长期的项目积累实践而来的。
要从多方面思考问题,多问几个为什么?理清思路再进行编码。
《未完待续》