web项目升级怎么样避免用户请求无响应

比如有5台服务器跑了5个node项目,然后前面使用nginx做负载均衡

比如项目访问量很大,然后增加了一些新的功能,项目需要升级 5台服务器逐个升级,怎么能保证在升级的过程中不会影响访问

例如 现在要升级A服务器上的node项目,但是A服务器上有许多请求 如果直接升级的话,请求可能就会没有响应,如果项目涉及到对数据库操作,可能会产生脏数据

我能想到的一种方案是 事先发公告 没有流量的时候再升级

我想请问还没有其它方案,在不影响用户请求的情况下对服务进行升级呢

阅读 5.8k
9 个回答

只是无响应 (我猜是tcp连接中断) 比较简单,nginx切换配置时可以graceful restart的,这样可以撤掉一台后端--升级后端--加回去。

但是"不影响访问" 不止要解决这个,你还需要让旧版本的前端和新版本的服务器可以共用。

脏数据是另一个问题了。不应该期待每个请求都正常结束,清理脏数据 (现场或事后) 的机制总归是应该有的。

当你的服务器支持平滑重启,这就比较方便了。平滑重启可能是你自己实现的,也可能是框架或者库提供的。

你这么想本来就是错的,除非你5台机器上部署的是不同的项目,那么升级只能停机,不然还能怎么办你说。你这个意思是5台机器上部署同一个项目,那么升级的时候你考虑怎么能不影响服务,你的出发点应该在这儿,那这里就有一个问题,对于一个请求你是怎么做分发到5台机器上的,你怎么做的然后就在哪里调整就是了,在低谷的时候把5台改成4台,然后升级成功之后再加回去,如果担心升级过程中响应不过来,那么就调整缓存时间,都5台机器了,不会没缓存把。。。

升级一般都是凌晨升级,因为如果出了什么问题,都不会影响那么大

负责均衡下掉一台服务器,升级,然后再up

完全不影响是不可能,只有尽可能的让影响看不出来,你观察一下京东就会发现,它家的服务器经常凌晨升级,升级的时候你打开它的菜单是刷不出东西来的,就看不停的转圈,但是就是不出内容。所以基本都是升级的时候把服务器切换到友好的不出内容界面,升级完再换回来。

逐台升级,升级过程中把流量引导其他服务器

我们项目是用pm2发布和做进程管理的

发布的时候不会影响用户是用

  1. 热部署

  2. 灰度发布

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题