Nginx+Lua实现代码灰度发布

Nginx+Lua实现代码灰度发布

使⽤ Nginx 结合lua实现代码灰度发布

灰度发布是⼀种将新版本的软件或功能逐步推⼴给⼀⼩部分⽤户,以进⾏测试和评估它们的反应的⽅法。实
际上,它是⼀种渐进式的部署⽅法,可以逐步将新版本或功能逐步发布给不同的⽤户群体,直到所有⽤户都
可以使⽤这个新版本或功能。

这种⽅法通常⽤于⼤规模应⽤程序和⽹站,以确保新的功能和修复⼯作的质量,并降低和减少出现故障或负
⾯反应的⻛险。在灰度发布期间,团队可以监测应⽤程序或⽹站的性能并调整它们,以便可以全⾯推⼴给所
有⽤户。

按照⼀定的关系区别,分不分的代码进⾏上线,使代码的发布能平滑过渡上线

1.⽤户的信息cookie等信息区别
2.根据⽤户的ip地址, 颗粒度更⼴

实践架构图

image-20230609102116061

执⾏过程:

1.⽤户请求到达前端代理Nginx, 内嵌的lua模块会解析Nginx配置⽂件中Lua脚本
2.Lua脚本会获取客户端IP地址,查看Memcached缓存中是否存在该键值
3.如果存在则执⾏@java_test,否则执⾏@java_prod
4.如果是@java_test, 那么location会将请求转发⾄新版代码的集群组
5.如果是@java_prod, 那么location会将请求转发⾄原始版代码集群组
6.最后整个过程执⾏后结束

实践环境准备:

系统 服务 地址
CentOS7 Nginx+Lua+Memached 192.168.1.170
CentOS7 Tomcat集群8080_Prod 192.168.1.152:8080
CentOS7 Tomcat集群9090_Test 192.168.1.152:9090

1.安装两台服务器 Tomcat ,分别启动 8080 和 9090 端⼝

jdk下载
链接: https://pan.baidu.com/s/1rBd5lAIn0Cn-JrgJDy00IQ?pwd=94he 提取码: 94he

192.168.1.152服务器操作

[root@tomcat-node1-20 ~]# pwd
/app/soft
[root@tomcat-node1-20 ~]# ll
-rw------- 1 root root 194151339 4⽉ 28 21:20 jdk-8u231-linux-x64.tar.gz
[root@tomcat-node1-20 ~]# tar xf jdk-8u231-linux-x64.tar.gz -C /app
[root@tomcat-node1-20 ~]# cd /app/ && mv jdk1.8.0_231 jdk1.8
[root@tomcat-node1-20 ~]#cat /etc/profile.d/jdk.sh
export JAVA_HOME=/app/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

[root@tomcat-node1-20 ~]# chmod +x /etc/profile.d/jdk.sh
[root@tomcat-node1-20 ~]# source /etc/profile
[root@tomcat-node1-20 ~]# java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

#安装tomcat
[root@tomcat-node1-20 ~]# mkdir /soft/src -p
[root@tomcat-node1-20 ~]# cd /soft/src
[root@nginx ~]# wget https://mirrors.tuna.tsyuanhua.edu.cn/apache/tomcat/tomcat-9/v9.0.74/bin/apache-tomcat-9.0.74.tar.gz --no-check-certificate

[root@tomcat-node1-20 src]# tar xf apache-tomcat-9.0.74.tar.gz -C /soft
[root@tomcat-node1-20 src]# cd ..
[root@tomcat-node1-20 soft]# mv apache-tomcat-9.0.74/ tomcat-8080
[root@tomcat-node1-20 soft]# /soft/tomcat-8080/bin/startup.sh

#启动9090
[root@tomcat-node1-20 soft]# cp -r tomcat-8080 tomcat-9090
[root@tomcat-node1-20 soft]# cd tomcat-9090/conf/
[root@tomcat-node1-20 soft]# vim server.xml
#修改⼀下内容
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
/>
#最新的内容
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="9090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444"
maxParameterCount="1000"
/>

[root@tomcat-node1-20 conf]# cd ..
[root@tomcat-node1-20 tomcat-9090]# cd bin/
[root@tomcat-node1-20 bin]# sh startup.
sh: startup.: 没有那个⽂件或⽬录
[root@I bin]# sh startup.sh
Usyuan CATALINA_BASE: /soft/tomcat-9090
Usyuan CATALINA_HOME: /soft/tomcat-9090
Usyuan CATALINA_TMPDIR: /soft/tomcat-9090/temp
Usyuan JRE_HOME: /app/jdk1.8
Usyuan CLASSPATH: /soft/tomcat-9090/bin/bootstrap.jar:/soft/tomcat-9090/bin/tomcat-juli.jar
Usyuan CATALINA_OPTS:
Tomcat started.
[root@tomcat-node1-20bin]# netstat -lntup |egrep 9090
tcp6	 0 		0 :::9090 		:::* 		LISTEN
19153/java
//注意tomcat默认监听在8080端⼝, 如果需要启动9090端⼝需要修改server.xml配置⽂件

#修改9090站点⻚⾯
[root@tomcat-node1-20]# cd /soft/tomcat-9090/webapps/ROOT
[root@@tomcat-node1-20 ROOT]# vim index.jsp
<title>9090-tomcat <%=request.getServletContext().getServerInfo() %></title>

image-20240826212117372

image-20240826212235102

image-20240826212315430

posted @ 2024-08-26 21:39  hhhaaa12138  阅读(2)  评论(0编辑  收藏  举报