请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答

2回答

一般很难做到不停服务更新 你得去了解程序运行机制,需要把程序加载到内存去执行,并且对于java程序来说,代码发生变动之后需要重新编译,编译后你想生效还需要改动内存里的程序,所以几乎是非常难的。建议重新发布。一般正常的做法是多个实例通过一个bns来负载均衡去访问 这样其中一个更新程序的时候可以暂时不访问它 好了之后恢复服务再去弄另外一个 这样对外来说是无损的。听不懂的话可以查下水平扩容以及负载均衡 主备等

0 回复 有任何疑惑可以回复我~
  • 提问者 321121254 #1
    如果是tomcat集群,比如说两个服务器吧。我把第一个服务器先挂掉,然后修改应用,完事儿后再挂上。那么这个时候用户访问,刷新一下到了新版应用的服务器,再刷新一下又到了旧版应用的服务器,也就是第二个还没有更新的服务器,会不会出现这种情况。另外,nginx重启的这段时间会不会造成网站无法访问?
    回复 有任何疑惑可以回复我~ 2018-04-04 07:59:51
翔仔 2018-04-04 10:29:49

这里跟你说一个原理,就是一般情况下,会把多ip和其端口号设置成一个组,然后请求过来的时候,随机均衡从组里取出一个ip和端口进行访问(即你理解的其中一个tomcat),如果当实例需要升级,则将一半的实例对应的ip和端口从组里移除,外来的访问就访问不到它们了,原来的继续提供服务。等那一半升级完成之后,和组里的另外一半切换,切换之后另外一半被换出来,这样服务就是最新的了。最新被切换出来的那一半就去做升级,升级完重新上线,这样服务就一直是最新的。前提你得保证一半实例能扛得住访问的压力。这只是其中一种比较简单的做法,其他做法你可以去研究一下

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信