比如有5台服务器跑了5个node项目,然后前面使用nginx做负载均衡
比如项目访问量很大,然后增加了一些新的功能,项目需要升级 5台服务器逐个升级,怎么能保证在升级的过程中不会影响访问
例如 现在要升级A服务器上的node项目,但是A服务器上有许多请求 如果直接升级的话,请求可能就会没有响应,如果项目涉及到对数据库操作,可能会产生脏数据
我能想到的一种方案是 事先发公告 没有流量的时候再升级
我想请问还没有其它方案,在不影响用户请求的情况下对服务进行升级呢
认证0级讲师
只是无响应 (我猜是tcp连接中断) 比较简单,nginx切换配置时可以graceful restart的,这样可以撤掉一台后端--升级后端--加回去。
但是"不影响访问" 不止要解决这个,你还需要让旧版本的前端和新版本的服务器可以共用。
脏数据是另一个问题了。不应该期待每个请求都正常结束,清理脏数据 (现场或事后) 的机制总归是应该有的。
当你的服务器支持平滑重启,这就比较方便了。平滑重启可能是你自己实现的,也可能是框架或者库提供的。
你这么想本来就是错的,除非你5台机器上部署的是不同的项目,那么升级只能停机,不然还能怎么办你说。你这个意思是5台机器上部署同一个项目,那么升级的时候你考虑怎么能不影响服务,你的出发点应该在这儿,那这里就有一个问题,对于一个请求你是怎么做分发到5台机器上的,你怎么做的然后就在哪里调整就是了,在低谷的时候把5台改成4台,然后升级成功之后再加回去,如果担心升级过程中响应不过来,那么就调整缓存时间,都5台机器了,不会没缓存把。。。
升级一般都是凌晨升级,因为如果出了什么问题,都不会影响那么大
负责均衡下掉一台服务器,升级,然后再up
完全不影响是不可能,只有尽可能的让影响看不出来,你观察一下京东就会发现,它家的服务器经常凌晨升级,升级的时候你打开它的菜单是刷不出东西来的,就看不停的转圈,但是就是不出内容。所以基本都是升级的时候把服务器切换到友好的不出内容界面,升级完再换回来。
逐台升级,升级过程中把流量引导其他服务器
我们项目是用pm2发布和做进程管理的
发布的时候不会影响用户是用
热部署
灰度发布
只是无响应 (我猜是tcp连接中断) 比较简单,nginx切换配置时可以graceful restart的,这样可以撤掉一台后端--升级后端--加回去。
但是"不影响访问" 不止要解决这个,你还需要让旧版本的前端和新版本的服务器可以共用。
脏数据是另一个问题了。不应该期待每个请求都正常结束,清理脏数据 (现场或事后) 的机制总归是应该有的。
当你的服务器支持平滑重启,这就比较方便了。平滑重启可能是你自己实现的,也可能是框架或者库提供的。
你这么想本来就是错的,除非你5台机器上部署的是不同的项目,那么升级只能停机,不然还能怎么办你说。你这个意思是5台机器上部署同一个项目,那么升级的时候你考虑怎么能不影响服务,你的出发点应该在这儿,那这里就有一个问题,对于一个请求你是怎么做分发到5台机器上的,你怎么做的然后就在哪里调整就是了,在低谷的时候把5台改成4台,然后升级成功之后再加回去,如果担心升级过程中响应不过来,那么就调整缓存时间,都5台机器了,不会没缓存把。。。
升级一般都是凌晨升级,因为如果出了什么问题,都不会影响那么大
负责均衡下掉一台服务器,升级,然后再up
完全不影响是不可能,只有尽可能的让影响看不出来,你观察一下京东就会发现,它家的服务器经常凌晨升级,升级的时候你打开它的菜单是刷不出东西来的,就看不停的转圈,但是就是不出内容。所以基本都是升级的时候把服务器切换到友好的不出内容界面,升级完再换回来。
逐台升级,升级过程中把流量引导其他服务器
我们项目是用pm2发布和做进程管理的
发布的时候不会影响用户是用
热部署
灰度发布