一、平滑发布与灰度发布

目录

一、平滑发布与灰度发布


一、平滑发布与灰度发布

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

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

灰度发布与平滑发布其实是关联的。当服务器的数量只有一台的时候,不存在灰度发布,一旦发布了就是所有用户都更新了, 所以这个时候只有平滑发布。当服务器数量大于一台的时候,只要每台服务器都能达到平滑发布的方式,然后设定好需要 发布的服务器占比数量,就可以实现灰度发布了。

单台服务器的平滑发布模式: 单机状态下,应用的持续服务主要依靠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.conf
 ​
 ​
     步骤2:停止app1应用
     平滑重新加载一下nginx: 
     service nginx reload
     或者:
     /usr/local/nginx/sbin/nginx -s reload
 ​
     此时所有的请求都转到了app2了;
 ​
     步骤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进行内部测试,以确保应用的正确性;
 ​
     步骤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有宕机自动检测功能, 只需要在每台服务器上先停止发布,然后更新文件,再启动就可以了; 如果选择部分的服务器进行更新,那就是灰度了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值