IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 项目灰度发布功能设计 -> 正文阅读

[系统运维]项目灰度发布功能设计

平台项目迭代发布过程中,有一些功能发布时会产生较大的影响,一旦出现问题,会影响用户使用体验,降低产品信誉。为了解决这一问题,在重要功能发布时需要引入灰度发布功能,借助一小部分用户在生产环境进行功能的验证,平稳运行一段时间,一般是一周后再大规范应用到生产环境的所有用户。

基于nginx+lua(openresty)可以在nginx网关上进行灵活的业务逻辑处理,本文也使用openresty实现。常见的灰度发布是对指定ip网段进行特定的路由处理,但是公司内网的某个网段范围仍然较大,涉及人员较多,本文使用平台管理员(二十多个用户)作为灰度用户,让“自己人”先验证一下重要功能。由于openresty难以获取请求的用户信息,所以需要在header中加入用户信息,仅用在灰度功能,不存在用户信息泄露的安全问题。Openresty实现灰度功能流程图如下图所示:

?灰度实现逻辑功能代码如下所示:

upstream portalBackend {
    server 10.1.1.1:8081;
    server 10.1.1.2:8081;
    check interval=3000 rise=2 fall=5 timeout=2000 type=http;
    check_http_send "HEAD / HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx http_4xx;
}
upstream portalBackendGray {
    server 10.1.1.3:8081;
    check interval=3000 rise=2 fall=5 timeout=2000 type=http;
    check_http_send "HEAD / HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx http_4xx;
}
location ~/api/(.*) {
     #...............error.log......notice
            rewrite_log on;
    #...............account_is_include(userAccount, check_userAccount)
           #rewrite ^/api/(.*)$ /$1 break;
			set_by_lua_block $my_ups {
				function account_is_include(value, tab)
				   local table = json.decode(tab)
				   for k,v in ipairs(table) do
					  if string.lower(v) == string.lower(value) then
						   return true
					  end
				   end
				   return false
				end

				local headers = ngx.req.get_headers()
			    local userAccount = headers["grayAccount"]
			    if userAccount == nil then
				  return "portalBackend"
			    end
			    check_userAccount = ngx.shared.portalCache:get("userAccountList")
			    if check_userAccount ~= nil and account_is_include(userAccount, check_userAccount) then
				   local key = ngx.shared.portalCache:get("switchKey")
				   if key == "gray" then
					  return "portalBackendGray"
				   else 
					  return "portalBackend"
				   end
			    else
					return "portalBackend"
				end
           }
            proxy_pass http://$my_ups/$1$is_args$args;
            proxy_redirect    off;
            proxy_set_header  Host $host;
            proxy_set_header  X-real-ip $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            #websocket
            proxy_set_header Origin '';
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";

    }

最后,介绍一下灰度发布的流程图:

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:59:52  更:2022-03-08 23:03:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:14:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码