如何平滑部署JavaWeb项目,让客户端不掉线?网上搜不到答案。。。
RT,Java的Web项目在生产环境部署总是需要重启一下,而每次重启后,客户端所有操作都会丢失。
很多数据都未保存,业务逻辑中断,甚至还会引发业务数据一致性问题。
很多数据都未保存,业务逻辑中断,甚至还会引发业务数据一致性问题。
请问各位大神知道有什么好的解决办法吗?
不知道像阿里巴巴这样的公司,那么多的JavaWeb项目是怎么部署更新的呢。如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(18)
Nginx后面有两台Web服务器和一台DB服务器,开了ip_hash,可能是session的原因。
回复
iphash是很不合理的,万一用户ip用着用着变了,还不是丢了
LZ你有没有用
nginx负载均衡?难道你发布的项目只有一台服务器?
是session丢失的原因
回复
既然是集群,那session丢不了把,除非你的轮训模式特殊,集中式session不会丢
集中session,重启保证不退出。集群,避免业务中断
你们事务处理都没做好 考虑这个真的是想多了
-_-# 项目经理喜欢使用MySQL的MyISAM引擎,我开发的时候只在和资金有关的几张表里使用InnoDB,而且还是手动管理的事务
好像有个叫什么 nodejs的可以
你们不会是只有一个点吧?
有事务,怎么会丢数据呢,伪命题。即使应用服务器重启了,也不会造成数据不一致的问题。
有集群,怎么会造成业务中断呢,伪命题。
做HA不就行了?
重启的时候,使用备用的服务器吧,只要保证业务不中断,数据不丢失,不冲突就好!
1. Java Web应用需要改造成无状态的。
2. 用户Session数据一定不要保存在Java应用中,重启或者crash都会导致会话失效。
3. 常见的用户Session存储使用Memcached集群,Redis有点大材小用了。
4. 反向代理是用户请求的第一站,推荐nginx。
5. 应用部署的第一步就是关流量,保证没有请求到需要重新部署的服务实例上。
用Spring的话,有什么好的Session管理框架吗?
回复
spring-session-data-redis基于redis搞的分布式session管理,搜搜资料,不过我没搞过.
回复
我一向喜欢简单的东西。 想使用session无非就是保存登陆token啥的, 直接使用cookie保存登陆token就搞定了。
1)不要直接使用java的 Http Session。
2) 在Tomcat 前面配置一层代理nginx, 通过 upstream 的负载,一个个更新。