发布方式
1.平滑发布
在发布的过程中不影响用户的使用,系统不会因发布而暂停对外服务,不会造成用户短暂性无法访问;保障服务一直可以持续使用
在单机模式下,启动多端口。如有
upstream myapp{
server 服务1:8080; //app1
server 服务2:8080; //app2
}
用负载均衡ngnix合理分配各个通道。可以通过修改ngnix配置先停止服务1,
upstream myapp{
server 服务1:8080 down; //app1
server 服务2:8080; //app2
}
这样Ngnix会将请求都发给服务2.
当服务1发布启动成功后用同样的步骤将服务2升级。这就是简单的平滑发布
可以使用nginx的宕机检测直接将服务1停止升级
设置代理超时为1秒,以便在某个应用停止时及时切换到另一个应用:
server {
listen 80;
server_name localhost;
location /{
proxy_pass http://myapp;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 1;
proxy_read_timeout 1;
proxy_send_timeout 1;
}
}
优点:
可以快速高效平滑的完成版本更新迭代
可以确认保障新版本服务能正常运行
出现问题不会影响全网用户,适合大规模应用发布
缺点:
发布和回滚周期较长
如果生产故障需要运行一段时间后出现,当全部进程升级成功后。没有版本可以及时回退。可能会导致生产不可以用。所以接下来介绍一下灰度发布
2.灰度发布(金丝雀发布)
灰度发布似于平滑发布。但又有不一样的地方。
什么叫灰度:发布后让部分用户使用新版本,其它用户使用旧版本,逐步扩大影响范围,最终达到全部更新的发布方式 ;
这样发布可以快速将服务全部回滚回旧的服务。避免生产大规模服务宕机
灰度是用上面那种发布方式先升级一部分主机,确认一段时间运行后没问题再逐步全部修改。
优点:
可以快速高效平滑的完成部分主机的版本更新迭代
可以长时间确认保障新版本服务能正常运行
缺点:
全部版本更新缓慢,热版本无法快速马上上线
3.蓝绿发布
设置2个服务集群,一个为绿环境一个为蓝绿环境。绿环境为正常的生产环境,蓝绿环境为生产测试环境。当蓝绿测试通过后。可以将大部分应用的负载均衡、反向代理、路由指向蓝环境。如果运行良好,就可以删除绿环境使用的资源。如果运行出现了问题,可以通过负载均衡器指向快速回滚到绿色环境。
优点:升级切换和回退比发布回滚迅速
缺点:成本较高,需要部署两套环境。如果新版本中基础服务出现问题,会瞬间影响全网用户;如果新版本有问题也会影响全网用户