Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题
Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题
原文地址:https://m.oschina.net/question/737237_2203576
现在容器用的是tomcat,做维护比较多,因为程序老是要升级,更新了class文件,必须要重启环境,这样的话用户体验就非常差,而且耽误时间,实际开发中我用了jrebel插件倒是没什么问题,但是生产环境好像都不推荐这个东西,想问下大型的项目是如何做到的呢?
一般是这样,首先,网站架设成,负载均衡器+应用服务器+Session服务器的模式。Session服务器常见的用redis、memcache都有。更新的时候,先把一部分(比如1/3)应用服务器下线,更新应用,再重新上线。之后再逐步更新剩下的部分。一次更新1/3的话就分三次上线完成。
可以使用nginx做一台backup服务器,先更新backup服务器,测试完成以后,更新其他非backup服务器。
那现在2/3的服务器上是新代码,1/3的服务器上是老代码。 访问这两组的用户看到的功能是不是不一样?这个怎么解决呢?
tomcat、glassfish、jboss等都是支持热部署的,修改一个类是不用自己手动重启web服务器的,只有修改外部jar包中的类则必须重启,不然jar包会冲突,不会替换,当然这种热部署是重新加载web容器,性能不佳。生产环境是不建议开启热部署的。
你可以在网上搜索一下java服务器代码class类热更新,有一大堆资料,当然你也可以用groovy、jruby、scale这些本身运行于jvm而且可热更新的脚本语言,甚至jdk自带一套解析运行js脚本的引擎,还有一种方案就是用业务规则引擎,比如Drools,不过这个也要学习另外一种脚本。
大且稳健和高并发的项目往往不是单一的语言能做好的,需要多方面的结合,java组件框架这么多,就需要优秀的架构师去利用整合了。我们并不一定能生成开发出多么优秀的东西,但应该合理利用其它优秀的东西。
影响有多大,你一台Tomcat,估计用户也不会多到哪里去吧,凌晨进行。几秒种而已
1、session可以挂Redis或者Memcached.应用服前面挂nginx或者haproxy做负载均衡。或者只做反向代理也行,nginx和haproxy基本是秒起的,不过不建议这么做。
2、tomcat是可以开启热加载的,不过一般不建议开启,热加载易导致PermGen space溢出。
3、jdk7以后开始可以做classloader的卸载,jdk8以后从permgen替换到了metaspace,理论上可以避免permgen的溢出问题,有兴趣可以试试自己写一个应用服务器实践一下。
1:旧数据兼容新功能问题。
升级后,比如报表功能新增了字段,那么历史数据可能没有新增加的字段的功能。
2:升级的时候session的问题。
升级的时候,如果负载均衡使用的是黏性策略(session不共享),那么升级服务的时候,肯定有些用户的功能会断掉的,所以一般选择晚上,或者人少的时候升级系统。
升级的时候如果负载均衡策略是session共享,同样有问题,有的用户前一秒连上服务器A,下一秒连上服务器B,那么如果B服务器上的功能是新的,但是还不流程并不兼容之前的老服务,那么用户的操作可能进行不下去。
最好的策略是黏性策略和Nginx搭配起来用,首先一部分服务器空出来,直到没人用这些空出来的服务器之后,开始进行升级。升级之后。已经连接上旧服务的用户,还是使用之前的服务器进行连接,新接入的用户,旧转接到新的服务器上去。等旧服务所在的服务器已经没有人用的时候,再将旧服务器进行更新。
Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题的更多相关文章
- Java Web项目中连接Access数据库的配置方法
本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...
- 怎么将java web 项目导入idea 中
1.将 java web 项目导 入idea 中, 显示 然后进行 Configure 配置. 2. 点击 open module settings. 3. 4. 选择jar包. 5. 6. 配置to ...
- 在cmd命令行使用Maven Archetype插件 generate命令创建简单的java web项目
前提: 1.下载apache-maven:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache ...
- Java Web项目报错java.lang.NullPointerException at org.apache.jsp.front.index_jsp._jspInit(index_jsp.java:30)
环境:myeclipse+tomcat6+jdk6 今天搭建了一个Java Web项目,访问index.jsp时报如下错误: 严重: Servlet.service() for servlet jsp ...
- 使用Spring Boot来加速Java web项目的开发
我想,现在企业级的Java web项目应该或多或少都会使用到Spring框架的. 回首我们以前使用Spring框架的时候,我们需要首先在(如果你使用Maven的话)pom文件中增加对相关的的依赖(使用 ...
- Linux(Centos)之安装tomcat并且部署Java Web项目
1.准备工作 a.下载tomcat linux的包,地址:http://tomcat.apache.org/download-80.cgi,我们下载的版本是8.0,下载方式如图: b ...
- 阿里云部署Java web项目初体验(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何在阿里云上安装JDK.Tomcat以及其配置过程.最后以一个实例来演示在 ...
- 【转】Java Web 项目获取运行时路径 classpath
Java Web 项目获取运行时路径 classpath 假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/java/下, 那么ja ...
随机推荐
- 01python简介
目录 1. Python起源 2. 解释器 3. Python 的设计目标 4. Python 的设计哲学 5. 为什么选择 Python ? 6. Python 特点 7. Pyth ...
- java对文件操作之实用
创建文件 package com.pre; import java.io.File; public class WJ { public static void main(String[] args) ...
- mysql之 slow log 慢查询日志
一. 相关参数: • slow_query_log ◦ 是否开启慢查询日志 • slow_query_log_file ◦ 慢查询日志文件名, 在 my.cnf 我们已经定义为slow.log,默认是 ...
- Mysql5.6 for Centos6.5源码编译安装
## 说明 不同服务器需要改变 server_id ,同一台机器上需要改变 port 1. 关闭防火墙[root@mysql ~]# service iptables status --查看防火墙状态 ...
- docker save/load、export/import 区别
区别: save的对象是image,产生的文件需要用load来生成image: export的对象是container,产生的文件需要用import来生成image. save Save one or ...
- Jenkins进阶-用户权限管理(10)
在版本发布的由于大家的分工不同,所以想通过控制用户的账号达到权限管理,对每个角色进行权限控制,最初通过"项目矩阵授权策略"的策略对每个项目进行单一的权限控制,当时也满足了效果,随着 ...
- RedHat7安装vmware虚拟机启动报错
提示错误如下: Kernel Headers for version 3.10.0-229.14.1.el7.x86_64 were not found.If you.... 安装kernel dev ...
- Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(
application.class要放在根目录下,否则会发生以下错误
- centos7 tomcat自启动
第一步: vim /lib/systemd/system/tomcat.service [Unit] Description=tomcat After=network.target [Service] ...
- NAND FLASH控制器
一.nand flash访问原理 地址空间概念 nand的编址 nand命令 命令,地址,数据 使用S3C2440的nand flash控制器访问nand flash 前几个编译出来的文件都小于4k ...