热部署和热加载

2018-8-22
今天入职第二天,看到老大在群里发了一个go热加载实现的链接,之前没有听说过热加载,所以搜索了一下,下面是关于热部署和热加载的相关整理。

引言

在项目线上更新时,可能会遇到需要热部署的情况,虽然现在大多数公司由于业务量大采用了分布式集群,可以分批次的重启更新。但是还是有需要热部署

热部署和热加载的区别

比较 热部署 热加载
部署方式 热部署在服务器运行时重新部署项目 热加载在运行时重新加载class
实现原理 热部署直接重新加载整个应用 热加载在运行时重新加载class
使用场景 热部署更多的是在生产环境使用 热加载则更多的实在开发环境使用(节省开发的时间和调试的时间)
安全性 热加载几乎没有
操作前后变化 会清空session ,释放内存 不清空session ,不释放内存。要考虑内存溢出的情况

热加载:依赖类的加载机制,在容器启动的时候后台会启动一个线程,定时间的检测类时间戳的变化,如果累的时间戳发生了变化,就将类重新带入,侧重的是运行时通过重新加载改变类的信息,直接改变程序的行为。

热部署

就是已经运行了项目,更改之后,不需要重新tomcat,但是会清空内存,重新打包,重新解压war包运行

可能好处是一个tomcat多个项目,不必因为tomcat停止而停止其他的项目

热加载

是基于字节码进行更改的,不释放内存,开发可用,上线不可用,比如修改类了,原先的类内存不会释放,新的类还会增加内存。

更改字节码的意思是应该更改exploded war包中的.class文件.

热加载不重启tomcat,不重新打包

更新静态资源

更新静态资源是更改exploded war的静态资源,和热加载归到一起。

参考

  1. 热部署和热加载
  2. 热部署和热加载的区别
  3. 热部署与热加载的配置