场景
当版本切换的时候,后端服务器不可能瞬间同时进行代码更新,这样就会出现客户在短暂时间内访问到不同版本的服务。
使用以下流程可以避免上述问题:
1.后端设立两个的主机组(A_CLUSTER,B_CLUSTER),以及一个ALL_CLUSTER包含两个主机组提供服务。
2.当要发布前,将所有的流量切换到B_CLUSTER。
3.切换完毕后升级A_CLUSTER代码。
4.将流量再切换到A_CLUSTER。
5.再升级B_CLUSTER的代码。
6.最后将流量再切换至两CLUSTER。
要完成上述操作,在代码更新方面有jenkins等发布工具来实现。但前端切换流量的在传统中只能通过手动修改nginx配置文件来实现。
openresty提供了一个可编程的nginx,通过lua可以实现对于nginx的”在线修改”,从redis获取信息从而选择将请求发送到后端指定的upsteam。而如何指定所需要的upstream?这时就需要redis,或者其他的中间件或其他lua可以调用的接口来实现。
准备工作
1.安装redis
2.安装openrestry
3.安装lua
4,安装lua的redis驱动
配置分享
nginx.conf:
http {
lua_shared_dict vtimes 10m;
upstream a_cluster {
server 192.168.1.200:8888;
}
upstream b_cluster {
server 192.168.1.203:8080;
}
init_by_lua_block {