线上版本灰度发布策略
从接触运维开始,最苦逼的事情就是业务上线,为什么这么说? 就是因为有了很多的大坑队友。不是因为开发的童鞋漏提代码,就是因为测试童鞋线下测试的不到位导致代码扔到线上后出现各种问题,各种404。近期和各位童鞋研究了应对这种现象的解决方案,得到了如下结果:
上线分为如下几种等级:测试发布、预发布、灰度发布、正式发布,下面分来来针对这四种发布介绍下区别。
测试发布:写完程序在线下测试,测试的过程和结果成为测试发布。
预发布:程序经历过测试发布后要把代码在线上部署一套(和生产环境一模一样的环境),使用生产环境的数据库等等应用,测试人员在线上进行测试,测试的过程不影响生产环境使用.
灰度发布:程序经历过预发布后下一步就是灰度发布。使用线上的生产环境进行测试,使用对象是部分客户,这种过程称之为灰度发布。
正式发布:代码经历过上述三种测试后,基本可以确定ok了,就可以进行代码正式发布了。环境使用生产环境,客户是全部客户。
以上讲述了四种发布的区别以及作用,接下来继续说说前几天预发布的过程。
预发布的意思是,我们自己的测试人员使用线上的环境线上的数据进行线上测试,但是还不能影响线上正常用的使用,解决办法如下:
根据公网ip进行反向代理,本部门的公网ip是固定的,那么当客户访问的时候,如果是本部门的公网ip的话,nginx进行方向代理到新代码tomcat上,如果非本部门的公网ip,那么代理到原有tomcat上,拓扑如下:
nginx代码:动态请求的规则下面这么写
upstream jljerp { server 192.168.1.190:8001 weight=20 max_fails=2 fail_timeout=30s; ip_hash; } upstream jljerp_rc { server 192.168.1.190:8004 weight=20 max_fails=2 fail_timeout=30s; ip_hash; } server { listen 80; server_name jljerp.jinlejia.com; root /var/www/index; index index.html index.htm; location / { 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 600; proxy_read_timeout 600; proxy_send_timeout 600; # 预发布规则,这个地址是部门内部公网地址,当这个地址过来的请求转发到新tomcat上 if ($remote_addr ~* "202.106.0.20") { proxy_pass http://jljerp_rc; } # 如果不是本部门ip请求,按照原有规则进行原有生产环境进行转发 proxy_pass http://jljerp; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
nginx代码:静态请求的规则这么写(换汤不换药)
server { listen 80; server_name www.a.com; root /var/www/a; index index.html index.htm; location / { # 预发布规则,如果是本部门的公网的ip,访问这个目录下的地址 if ($remote_addr ~* "202.106.0.20"){ root /var/www/b; } } # 由于字体使用跨域的方式进行的调用,默认浏览器拒绝访问,加上这个location就可以在其他域名下访问这个域名的字体了 location ~* \.(eot|ttf|woff|svg|otf|woff2)$ { add_header Access-Control-Allow-Origin *; } error_page 404 500 502 503 504 /404.html; location = /404.html { root /usr/share/nginx/html; } }
上述就是整个过程,并非权威,有问题欢迎大家指正

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
中控考勤机二次开发小记
最近公司更换了一批考勤机,但是居然无法上传和下载指纹等数据。我们的系统用的是广东一家人力资源系统,问了一下,说他们的系统不支持最新中控更新了固件的考勤机。我KAO了他NN个熊,不支持居然?特别是还要收好几千大洋的费用,问题我们还交着服务费呢?要不就在他们哪买卡机,免费给我们升级,哪还是一样吗?他们卖的考勤机可不是市场上的价格,是贵 一半的价格。 好吧, 其实要钱也不是要我给,但公司也不愿意给啊,这样的申请过不去啊。人事部也在闹,扯来扯去的。我用中控几年前发布的ZKTIME5.0这款自带的软件操作,发现可以啊?我们的系统怎么不可以,如果几年前的ZKTIME都可以操作,说明固件没什么大的变化,应该不影响才对。但无可奈何,人家就是不支持,要支持,给钱开发插件来,还不是在原来 的人事系统上更新功能。 我看重新开发一小程序,NND,我找来了中控的考勤 机SDK看了一下,提供了很多功能,但并不复杂,我想以我战五渣的写程序能力,应该可以搞定他。(这里赞一个中控二次开发部门的一个工程师,态度很好的帮助我解决了一个问题(请忽略我写程序的能力))。 经过二天的努力(抓头),好吧,小学生作文的程序出炉,功能...
- 下一篇
python自动化巡检
#!/usr/bin/envpython #-*-coding:utf-8-*- #__author__="chenhao" #Email:312779641@qq.com #Date:2017/8/22 importparamiko defsftp_exec_command(host,port,username,password,command): ssh=paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=host,port=port,username=username,password=password) stdin,stdout,stderr=ssh.exec_command(command) list=[] foriteminstdout.readlines(): list.append(item.strip()) returnlist ssh.close() defsftp_down_file(host,port,usernam...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- 2048小游戏-低调大师作品