系统软件自动部署实现方案

在上篇文章中我们阐述的重点是新版本的插件已经下载到plugins目录后应该如何更新本地正在运行的程序,是整个插件升级实现的后半部分。本篇文章就来讲述软件自动部署(当然,也包括插件升级)的前半部分。

我们必须有这样一点认识,即:我们的程序是运行在用户机器上的,插件更新不是我们手动放进去的,而必须有一种机制使客户端能够检测到需要升级插件了,然后将插件自动下载下来,最后自动进行安装或插件更新。

系统软件自动部署实现的基本架构为:

上图中的组成中,【应用】和【更新服务】部分是运行在客户端的,【数据库】和【文件服务器】是运行在服务端,而【Server (WebServer)】则负责客户端与服务端进行通信,其基本的流程如下:

1> 客户端的【更新服务】采用QTimer::singleShot()定时触发版本检测的逻辑。

2> 版本检测逻辑中采用WebServer请求访问服务端的版本检测服务(通过PHP实现),服务端回去访问【数据库】,去检查比较是否有更高版本的插件/升级包。

3> 检测信息返回给客户端的【更新服务】,当【更新服务】根据返回结果判定存在较新的插件/安装包时,开始访问【文件服务器】执行下载操作,这里可以采用FTP下载,或者其它的某种方式将【文件服务器】上的更新文件下载到本地相应目录内。

4> 最后这一部分是系统软件部署/插件升级最麻烦的地方,客户端的【更新服务】会去判断【应用】模块中是否正在运行作业或者对外提供服务。如果此时【应用】模块没有对外提供服务,则在给出用户提示的情况下可以直接升级或安装;如果此时【应用】模块正在对外提供服务,则需要采用空闲时更新的策略,当对外服务完成之后进行更新。

基本上系统软件自动部署的逻辑架构就如上所示,但在实际代码中要实现还需要考虑一些很重要的问题。

1. 要兼容安装包/升级包的各种文件,下载的文件有exe,dll,zip包等,必须要能够区分出下载文件的后缀名,然后根据不同的后缀,采用不同的安装或升级策略。

2. 要兼容各种平台,Windows、Linux、Mac OS等,不同的平台下安装包的形式有各种各样,例如:windows下有exe、dll、zip等;Linux下有rpm、tar.gz等。

3. 当【应用】模块正在对外提供服务,例如:正在进行网络操作,有打开的端口,在进行插件更新或升级包安装时必须先将原有占用的端口停掉,然后等插件更新完成后重新打开端口恢复以前的任务。这个过程不是很好控制,现在还没有处理这方面问题的经验。

最后,由于客户端要和服务端进行通信,因此必须采用定义相同的数据结构或通信协议,而在这个时候采用的google protobuf则提供了很大的灵活性。它的使用方式不仅简单,而且效率更高(通常和xml进行比较),而且支持很多语言版本,PHP、C++、Java等,强烈建议在以后的项目中涉及到网络通信时采用google protobuf来定义网络协议,它会给你带来意向不到的惊喜。

坚持每天的学习和积累,加油!

时间: 2024-10-17 07:16:08

系统软件自动部署实现方案的相关文章

【大话QT之十三】系统软件自动部署实现方案

本篇文章是对[大话QT之十二]基于CTK Plugin Framework的插件版本动态升级文章的补充,在上篇文章中我们阐述的重点是新版本的插件已经下载到plugins目录后应该如何更新本地正在运行的程序,是整个插件升级实现的后半部分.本篇文章就来讲述软件自动部署(当然,也包括插件升级)的前半部分. 我们必须有这样一点认识,即:我们的程序是运行在用户机器上的,插件更新不是我们手动放进去的,而必须有一种机制使客户端能够检测到需要升级插件了,然后将插件自动下载下来,最后自动进行安装或插件更新. 系统

Jenkins spring boot 自动部署方案

原文地址:http://www.cnblogs.com/skyblog/p/5632869.html 现在主流的自动部署方案大都是基于Docker的了,但传统的自动部署方案比较适合中小型公司,下面的方案就是比较传统的自动部署方案. 1.为什么需要自动部署 基于微服务的架构,自动部署显得非常重要.因为每一个服务都需要部署.如果是手动部署,那么有M个服务,那么至少需要部署M次,如果每个同样的服务部署N个实例,那么就需要部署M*N次.所以自动部署对于微服务架构几乎是必须的,这一点不同于传统应用. 2.

在公有云平台体验开源方案的自动部署

微软和开源?真的?微软的开源之旅起源于10多年前,同时微软"移动为先云为先"的策略更进一步地推动了微软对于开源软件的采纳和支持的步伐,从而让微软的云计算平台 Azure 成为一个开放且灵活的云计算平台.您可以在 Azure 上运行任何您已经在使用或打算使用的负载,不管这个负载是基于 Windows 或者 Linux. 我们来试试吧.可是对于一个新手来说,要一下子搞懂云的各种服务还真是个不容易的事.那么今天我们就提供一些模板让您来体会一键部署. 这里说的模板能做什么?如您所知,应用程序的

git管理和自动部署项目

当一个项目需要纳入到版本控制的时候,选择的工具还是比较多的,最常见的就是工具有CVS,SVN,GIT等.在平时的开发中视情况而定,从来就没有最好的版本控制工具,只有最适合的工具.在这里我习惯用git来管理自己的项目,当然之前使用svn管理的,但是当用了git工具就不愿意再用其它的工具来管理.这里除了习惯之外,git的很多功能是svn不具备的,最简单的就是离线提交,用git管理的项目你会发现整个项目的大小变化不大,不像svn那样每个目录又有一个.svn 的目录,而且会使项目的变得很大.关于git与

有关于项目不能自动部署

环境:eclipse (for javaee 4.3.2  64位).jdk7(64位)  tomcat7 问题描述:项目不具备标准包结构,不能够自动部署 方案:将项目通过eclipse中的svn检出到本地的tomcat的webapps包下 一.给eclipse安装svn 和 tomcat 的插件 Svn 通过启动eclipse  ,help -- instal new ** 然后根据百度提示安装 Tomcat 插件版本3.3.1 插件包放在eclipse的plugins 的包下,这里版本要兼容

MDT U盘自动部署报错解决办法之二

继续之前使用MDT制作的U盘进行自动化部署的话题,之前已经介绍了部署过程中因为任务序列问题导致报错的一个解决方法,之后又遇到了一种MDT部署时报错的问题,今天来介绍一下解决办法 首先来描述一下问题的具体情况,在使用MDT进行部署时,发现有个别机器会提示faied to apply image的错误,这是一个很奇怪的现象,因为只有极个别的机器出现了这个问题,这是为什么呢?测试发现使用网络部署时也会提示这个问题,而且报错的信息也是一致的,这说明并不是一个偶然现象,肯定还存在着未知的一些原因. 之后使

使用Ansible进行项目的自动部署(Tomcat、Weblogic)

原文:https://github.com/x113773/testall/issues/4 问题:Weblogic/Tomcat 通过JAVA直接远程调用或者调用本地Shell还是通过Ansible来部署新程序 + 启动停止服务 如何管理?需要哪些配置信息? 采用方案:通过[Ansible](http://www.ansible.com.cn/)来部署新程序+启动停止服务: Java代码使用介绍:1.[AnsibleHelper.java](https://github.com/x113773

maven自动部署到远程tomcat教程

使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,节省了大量时间. 本文章适用于tomcat的7.x ,8.x, 9.x版本. 下面是自动部的步骤 1,首先,配置tomcat的manager 编辑远程tomcat服务器下的conf/tomcat-users.xml,在末尾增加(其实只要拉到文件末尾,去掉注释改一下就可以了) <role rolename="manager-gui"/> <role rolename="m

换种思路解决Linux -&gt; windows的自动部署

场景: 有个项目用到了Windows服务器(运行jar包和.NET代码),如何集成到现有的自动部署平台(基于Linux)面临到两个问题 如何将资源传从Linux传输到Windows上 如何在windows上将程作为后台进程并于终端(cmd or powershell)分离,实现类似Linux下nohup命令达到的效果 对于问题1,一开始想寻找一款"windows版的sshd"程序,但是好像没找到比较官方的:后来想到powershell也有Linux版,想通过在Linux上安装power