时间:2018年8月

坐标:浙江省杭州市

概述:鄙人才疏学浅,了解到不停机部署方案有热加载、热部署、集群分批部署三种方式,这里只针对这三种方式进行讨论。

一、热加载

原理:热加载的实现原理主要依赖jvm的类加载机制,在运行时对被修改过的类进行重新载入。

实现方式:在容器启动的时候起一条后台线程,定时的检测类文件的时间戳变化,如果类的时间戳变掉了,则将类重新载入。

适用场景:热加载会直接修改jvm中的字节码,这种方式对既有代码行为的影响难以控制,风险较大,几乎不会在生产环境使用该方案。

二、热部署

原理:热部署是指在服务器运行时重新部署项目,它是直接重新加载整个应用,这种方式会释放内存,比热加载更加干净彻底,但同时也更费时间。

实现方式:Weblogic、tomcat都可以通过配置支持热部署,但主要用于开发测试环境,较少应用于生产环境。

适用场景:热部署大大简化了发布操作,在开发和测试环境使用很普遍;但由于开通热部署后会增大系统开销,因此较少在生产环境使用。

三、集群分批部署

原理:利用nginx、apache等代理服务器自动对后端服务器的有效性进行判断,转发请求到有效的服务器上。在此基础上对后端服务器先后逐个更新,达到不停机部署的目的。

实现方式:在集群的前端代理服务器上配置有效性检测和自动剔除失效的后端服务器。

适用场景:适用于多台后端服务器的集群环境,该方案普遍应用于生产环境。

方案对比:

方案名称

优点

缺点

适用的环境

热加载

每次只重新加载变化的文件,发布速度较快。

1.  直接修改jvm中的字节码,风险较高。

2.  需要开发监控和加载服务。

一般用于重启速度较慢的测试环境,基本不会应用于生产环境。

热部署

中间件支持,风险相对较低。

内存释放重建,更加干净彻底。

重新加载所有的文件,耗时较长。

增大了中间件的系统开销。

一般用于开发和测试环境,较少应用于生产环境。

集群分批部署

服务不中断,用户无感知。

无法支持一个后端服务器的情况。

手动操作,相对繁琐

普遍应用于生产环境

方案选择:

基于安全方面的考虑,我们建议选择“集群分批部署”的方案。

集群分批部署的原型

架构图如下:

Nginx上配置上游服务器,示例如下:

原型验证

目的:验证并发访问时,剔除或停止某个应用服务器,请求会不会丢失。

过程:

a)         编写应用程序,应用的服务端即时打印接收到的请求,并返回给前端jsp页面,前端jsp页面收到后也打印出请求信息。

b)         关键代码:

c)

d)

e)         部署该应用到两个tomcat:192.168.8.112:1880 和 192.168.8.112:28080。

f)          模拟3个用户分别不间断地发送1万个请求给服务器。

g)         在请求发送的过程中,修改nginx的配置文件ngxin.conf,剔除其中一个服务器,然后重新加载配置文件。

h)         在请求发送的过程中,对其中一个tomcat进行关闭,1分钟后重启。

i)          统计服务端的接收到的请求总数,统计值为30000。

j)          统计前端jsp页面接收到请求总数,统计值为30000。

3.结论:在集群运行过程中,主动剔除,或直接停止某个应用节点做发布,请求不会丢失。

spring不停机部署_关于不停机部署方案的选择相关推荐

  1. sql server 部署_将程序包部署到SQL Server集成服务目录(SSISDB)

    sql server 部署 Starting with SQL Server 2012, Integration Services (SSIS) packages can now be deploye ...

  2. deployer部署_使用Deployer轻松部署PHP应用程序

    deployer部署 This article has updated for the most recent version of Deployer on March 26th, 2017. 本文已 ...

  3. nacosk8s部署_在K8S中部署Nacos配置中心

    点击上方 蓝字 关注我们 服务注册和配置中心是运维工作中经常遇见的字眼,配置中心要实现的一个基本理念是配置修改的时效性.动态性.一致性:服务注册和发现是为了解耦服务之间的依赖关系和便于服务管理. 为什 ...

  4. openshift 部署_在OpenShift上部署Java EE微服务

    openshift 部署 我昨天用WildFly Swarm在博客上发布了有关简单JAX-RS微服务的博客. 您学习了如何使用Maven构建所谓的"胖子",还使用Maven Doc ...

  5. pycharm python部署_使用PyCharm配合部署Python的Django框架的配置纪实

    安装软件安装 Python 2.7.PyCharm.pip(Python包管理工具).Django ( pip install Django) 部署PyCharm 新建Django工程 完成后,其目录 ...

  6. flume java 安装部署_[Hadoop] Flume安装部署与简单使用

    1. Flume Flume是一个分布式的日志收集框架,针对日志数据进行采集汇总,把日志从A地方搬运到B地方去. 使用场景: RDBMS ==> Sqoop ==> Hadoop 分散在各 ...

  7. 微服务开发及部署_简简单单基于docker部署微服务网关

    ❝ 本文整理于今年3月,收录在个人开源仓库JavaScriptCollection中,其中很多概念不乏借鉴.摘抄自官网,便于复习相关概念,有兴趣的可以直接去仓库Clone文档学习.参考! ❞ 基本概念 ...

  8. A054_Linux本地部署_华为云远程部署

    目录 1.内容介绍 2.Linux本地部署 2.1.引入 2.2.上传所需文件 2.3.安装jdk 1.8 2.4.安装mysql 2.4.1.Mysql卸载 2.4.2.Mysql安装 2.4.3. ...

  9. python热部署_定时任务-Quartz(热部署、冷部署)

    1 packagecom.sh.test;2 3 importorg.quartz.CronTrigger;4 importorg.quartz.JobDetail;5 importorg.quart ...

  10. kubernetes 部署_用于Kubernetes部署的10种反模式

    kubernetes 部署 As container adoption and usage continues to rise, Kubernetes (K8s) has become the lea ...

最新文章

  1. 【总结】IE6,IE7,IE8,Firefox兼容的css hack 补充!
  2. 一个线程池中的线程异常了,那么线程池会怎么处理这个线程?
  3. Docker Swarm集群config集中管理配置文件
  4. 列表根据下标取值_Python基础知识点——list(列表)讲解
  5. VTK:PolyData之CleanPolyData
  6. XMPP协议简单介绍
  7. 用.NET Core实现一个类似于饿了吗的简易拆红包功能
  8. vue 跳添加编辑页面传两个值_vue两个组件间值的传递或修改方式
  9. BugTracker.NET安装指南
  10. 自动爬取中国大学mooc的pdf文档
  11. (一) 双目立体视觉介绍
  12. scrapy[skp]快速入门
  13. 如何将NCM转换成MP3 - NCM转MP3转换软件
  14. Jprofiler激活码
  15. android入门-MMS-短彩信发送/接收流程【图】
  16. 抖音关键词排名怎么靠前,抖音关键词怎么优化?
  17. 兄弟连 linux 学习记录
  18. 三、在eclipse项目中添加Junit4
  19. arm汇编标号globl和word解释
  20. 如何实现一个小程序版本的老虎机

热门文章

  1. 矢量网络分析仪是什么?矢量网络分析仪的组成
  2. 专访李华明:90后IT程序员的奋斗之路
  3. Python采集《惊奇先生》, 下载你想看的高质量漫画
  4. 最大公约数简便算法_最大公约数算法
  5. 智能药盒的设计与实现
  6. 山西省计算机教师招聘试卷,山西教师招聘考试试题(一)
  7. C# Control.Refresh的解释是什么意思?
  8. 小程序封装请求工具http.js
  9. 在阿里云云虚拟主机上个人网站的Https访问配置
  10. 如何在Windows 10上不用鼠标使用文件资源管理器