关于平滑发布与灰度发布的理解

【灰度发布与平滑发布】
2017/2/24 xmhexinginx

平滑发布:
    什么叫平滑:在发布的过程当中不影响用户的使用,系统不会因发布而暂停对外服务,不会形成用户短暂性没法访问;服务器

灰度发布:
    什么叫灰度:发布后让部分用户使用新版本,其它用户使用旧版本,逐步扩大影响范围,最终达到所有更新的发布方式 ;app

灰度发布与平滑发布实际上是关联的。当服务器的数量只有一台的时候,不存在灰度发布,一旦发布了就是全部用户都更新了,
因此这个时候只有平滑发布。当服务器数量大于一台的时候,只要每台服务器都能达到平滑发布的方式,而后设定好须要
发布的服务器占比数量,就能够实现灰度发布了。负载均衡


单台服务器的平滑发布模式:
    单机状态下,应用的持续服务主要依靠Nginx的负载均衡及自动切换功能;
    为了可以切换应用,须要在服务器中建立两个相同的独立应用,分配两个不一样的端口,
    例如:app1,端口801; app2,端口802;
    在Nginx中,将app1,app2做为负载均衡加载:
    upstream myapp{
          server 127.0.0.1:801; //app1
          server 127.0.0.1:802; //app2
    }测试

    而后设置代理超时为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;
    }
}
    以上内容写在单独的配置文件中:/vhost/pub/pub_app.conf
    在nginx.conf里包含进去:
    include /vhost/*.conf;代理


    如今系统会均衡地分配用户访问app1与app2。
    接下来咱们进行平滑发布,咱们先把app1中止,而后将新版本发布到app1中:
    步骤1: 准备发布app1配置文件
    新作一个配置文件 pub_app1_down.conf,内容中把app1中止掉:
    upstream myapp{
          server 127.0.0.1:801 down; //app1
          server 127.0.0.1:802; //app2
    }
    
    将这个文件内容覆盖掉在原有的pub_app.conf
    cp -f /vhost/pub/pub_app1_down.conf /vhost/pub_app.confserver


    步骤2:中止app1应用
    平滑从新一下nginx: 
    service nginx reload
    或者:
    /usr/local/nginx/sbin/nginx -s reloadip

    此时全部的请求都转到了app2了;rem

    步骤3:更新app1
    如今能够经过各类方式来更新应用了,例如:压缩包方式:
    wget http://version.my.com/appudate/myapp/myapp-v3.2.32.tar
    unzip -o -d /home/wwwroot/app1/ myapp-v3.2.32.tar
    其中:-o:不提示的状况下覆盖文件;-d:指定解压目录
    
    步骤3.5 内部测试
    若是须要的话,能够在这一步对app1进行内部测试,以确保应用的正确性;get

    步骤4:准备发布app2配置文件;
    此时app1已是最新版本的文件了,能够切换到app1来对外,

    建立一个新的nginx配置文件:pub_app2_down.conf,设置为app1对外,app2中止便可:
    
    upstream myapp{
          server 127.0.0.1:801; //app1
          server 127.0.0.1:802 down; //app2
    }

    将这个文件内容覆盖掉在原有的pub_app.conf
    cp -f /vhost/pub/pub_app2_down.conf /vhost/pub_app.conf

    步骤5:切换到app1新版本应用 
    平滑从新一下nginx: 
    service nginx reload
    或者:
    /usr/local/nginx/sbin/nginx -s reload

    此时全部的请求都转到了app1了,新版本开始运行;

    步骤6:更新app2
    与第3步同样,解压就能够了,这里能够省去下载过程
    unzip -o -d /home/wwwroot/app2/ myapp-v3.2.32.tar

    步骤7:恢复app1,app2同时对外:
    cp -f /vhost/pub/pub_app.conf /vhost/pub_app.conf
    
    平滑从新一下nginx: 
    service nginx reload
    或者:
    /usr/local/nginx/sbin/nginx -s reload

    至此,整个应用都已经更新。

    将各步骤中的脚本汇总一下:

    [pub.sh]
    #============ 平滑发布 v1.0 ===============
    #step 1
    cp -f /vhost/pub/pub_app1_down.conf /vhost/pub_app.conf
    
    #step 2
    service nginx reload
    
    #step 3
    wget http://version.my.com/appudate/myapp/myapp-v3.2.32.tar
    unzip -o -d /home/wwwroot/app1/ myapp-v3.2.32.tar
    
    #step 4
    cp -f /vhost/pub/pub_app2_down.conf /vhost/pub_app.conf
    
    #step 5
    service nginx reload
    
    #step 6
    unzip -o -d /home/wwwroot/app2/ myapp-v3.2.32.tar
    
    #step 7
    cp -f /vhost/pub/pub_app.conf /vhost/pub_app.conf
    service nginx reload
    #============ 平滑发布 v1.0  ===============    

    备注:也能够充分利用nginx的宕机检测,省去步骤1,2,4,5,7;
    简化后的脚本以下:

    [pub_mini.sh]
    #======== 简化版脚本 =============
    wget http://version.my.com/appudate/myapp/myapp-v3.2.32.tar
    unzip -o -d /home/wwwroot/app1/ myapp-v3.2.32.tar

    unzip -o -d /home/wwwroot/app2/ myapp-v3.2.32.tar
    #========= over ===========

多台服务器平滑发布模式:
    有了单台平滑发布模式的基础,多台服务器就简单了。
    每台服务器看成应用进行发布就能够了,因为nginx有宕机自动检测功能,
    只须要在每台服务器上先中止发布,而后更新文件,再启动就能够了;
    若是选择部分的服务器进行更新,那就是灰度了。

 

纯属我的理解,上面的脚本还须要检测;

相关文章
相关标签/搜索