发布方式

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个服务集群,一个为绿环境一个为蓝绿环境。绿环境为正常的生产环境,蓝绿环境为生产测试环境。当蓝绿测试通过后。可以将大部分应用的负载均衡、反向代理、路由指向蓝环境。如果运行良好,就可以删除绿环境使用的资源。如果运行出现了问题,可以通过负载均衡器指向快速回滚到绿色环境。

优点:升级切换和回退比发布回滚迅速
缺点:成本较高,需要部署两套环境。如果新版本中基础服务出现问题,会瞬间影响全网用户;如果新版本有问题也会影响全网用户