软件公司发新版本前会做些什么?

简介: 软件开发一般不会上来就是最终版本,而是会一个版本一个版本的迭代。新版本上线前都会经过测试,但就算这样,也不能保证上线了不出问题。所以,在公司里上线新版本代码一般都是通过灰度系统。新版本代码的上线基本都会用灰度系统,可以逐步放量的方式来保证上线过程不会出大问题,也可以用来做产品 AB 实验。我们可以用 nginx 实现这样的功能。nginx 有反向代理的功能,可以转发请求到应用服务器,也叫做网关层。我们可以在这一层根据 cookie 里的 version 字段来决定转发请求到哪个服务。

 其他系列文章导航

Java基础合集

数据结构与算法合集

设计模式合集

多线程合集

分布式合集

ES合集


文章目录

其他系列文章导航

文章目录

前言

一、灰度系统

1.1 灰度系统含义

1.2 灰度系统实现

1.3 如何设置cookie

二、nginx配置cookie实现分流示例

三、总结


前言

软件开发一般不会上来就是最终版本,而是会一个版本一个版本的迭代。

新版本上线前都会经过测试,但就算这样,也不能保证上线了不出问题。

所以,在公司里上线新版本代码一般都是通过灰度系统。


一、灰度系统

1.1 灰度系统含义

灰度系统是用来帮助 API 服务在上线时按照受众从小到大最终至全量的发布,实现功能的灰度上线,用来保证发布的服务的质量的系统。

灰度系统可以把流量划分成多份,一份走新版本代码,一份走老版本代码。

如下图所示:

image.gif编辑

而且灰度系统支持设置流量的比例,比如可以把走新版本代码的流量设置为 5%,没啥问题再放到 10%,50%,最后放到 100% 全量。

这样可以把出现问题的影响降到最低。

不然一上来就全量,万一出了线上问题,那就是大事故。

而且灰度系统不止这一个用途,比如产品不确定某些改动是不是有效的,就要做 AB 实验,也就是要把流量分成两份,一份走 A 版本代码,一份走 B 版本代码。

1.2 灰度系统实现

那这样的灰度系统是怎么实现的呢?

其实很多都是用 nginx 实现的。

Nginx是一款高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,在同类型的网页服务器中表现较好。

Nginx能做以下几件事:

    1. 反向代理:请求不会直接到达真正的服务器(比如tomcat),而是先经过nignx服务器,在由nignx服务器转发到正真的tomcat服务器上。
    2. 负载均衡:为减少单个服务器访问压力,往往设置多个服务器,nignx恶意根据一定的策略(轮训、ip_hash、权重)来决定将该请求转发到哪一个服务器。
    3. 动静分离:动态页面(jsp)和静态资源(html/css/jpg)可以分别放在不同的服务器,这样nignx可以根据不同类型的资源请求,将请求转发到不同的服务器。

    nginx 是一个反向代理的服务,用户请求发给它,由它转发给具体的应用服务器。

    如下图所示:

    image.gif编辑

    这一层也叫做网关层。

    由它负责转发请求给应用服务器,那自然就可以在这里控制流量的分配,哪些流量走版本 A,哪些流量走版本 B。

    1.3 如何设置cookie

    但现在还有一个问题:

    什么时候设置的这个 cookie 呢?

    比如想实现 80% 的流量走版本 1.0,20% 的流量走版本 2.0

    其实公司内部一般都有灰度配置系统,可以配置不同的版本的比例,然后流量经过这个系统之后,就会返回 Set-Cookie 的 header,里面按照比例来分别设置不同的 cookie。

    比如随机数载 0 到 0.2 之间,就设置 version=2.0 的 cookie,否则,设置 version=1.0 的 cookie。

    这也叫做流量染色。

    完整的灰度流程是这样的:

    image.gif编辑

    第一次请求的时候,会按照设定的比例随机对流量染色,也就是设置不同 cookie。

    再次访问的时候会根据 cookie 来走到不同版本的代码。

    这就实现了灰度功能,可以用来做 5% 10% 50% 100% 这样逐步上线的灰度上线机制。

    也可以用来做产品的 AB 实验。

    公司里都会用这样的灰度系统。


    二、nginx配置cookie实现分流示例

    当使用Nginx作为灰度系统时,可以通过配置cookie来实现用户分流和追踪。以下是一个示例的Nginx配置文件,用于设置灰度系统的cookie:

    http {  
        # 定义默认的 cookie 参数  
        cookie_domain example.com;  
        cookie_path /;  
        cookie_expires 60s;  
        cookie_secure off;  
        cookie_httponly on;  
        # 定义灰度分组  
        map $http_cookie $gray_group {  
            default "";  
            ~gray1 "group1";  
            ~gray2 "group2";  
            ~gray3 "group3";  
        }  
        server {  
            listen 80;  
            server_name example.com;  
            location / {  
                # 根据 cookie 分组,将请求转发到不同的后端服务器  
                if ($gray_group) {  
                    proxy_pass http://backend_$gray_group;  
                }  
                proxy_pass http://backend;  # 默认转发到所有后端服务器  
            }  
        }  
    }

    image.gif

    在上述配置中,我们首先定义了默认的cookie参数,包括域名、路径、过期时间等。然后,使用map指令将HTTP请求中的cookie进行映射,将其中的gray1gray2gray3的cookie值映射为不同的灰度分组。

    接下来,在location块中,我们使用if指令判断请求中是否存在灰度分组cookie,如果存在则将请求根据不同的分组值转发到相应的后端服务器。如果请求中没有灰度分组cookie,则默认将请求转发到所有的后端服务器。

    请注意,上述配置仅是一个示例,实际应用中可能需要根据具体需求进行调整。另外,确保在Nginx配置文件中启用http_cookie模块,否则cookie配置将无法生效。


    三、总结

    新版本代码的上线基本都会用灰度系统,可以逐步放量的方式来保证上线过程不会出大问题,也可以用来做产品 AB 实验。

    我们可以用 nginx 实现这样的功能。

    nginx 有反向代理的功能,可以转发请求到应用服务器,也叫做网关层。

    我们可以在这一层根据 cookie 里的 version 字段来决定转发请求到哪个服务。

    在这之前,还需要按照比例来给流量染色,也就是返回不同的 cookie。

    不管灰度系统做的有多复杂,底层也就是流量染色、根据标记转发流量这两部分,我们完全可以自己实现一个。

    目录
    相关文章
    |
    6月前
    |
    监控 安全 数据管理
    轻松掌握员工工作状态,试试这几款公司电脑监控软件
    本文推荐了几款优秀的公司电脑监控软件,如WorkWin、Ekran System和InterGuard,以提升工作效率和保障信息安全。WorkWin侧重时间统计与行为监控,确保合规并优化工作流程;Ekran System强调带宽管理、敏感文件访问监控及系统设置监控;而InterGuard则提供安全审计和详细报告功能。这些工具通过实时监控、权限控制、远程管理和移动部署等手段,助力管理者有效管理员工,维护公司安全和生产力。
    178 2
    |
    安全 文件存储 数据安全/隐私保护
    回应小伙伴们的咨询,5款好用的小软件
    最近陆陆续续收到好多小伙伴的咨询,这边也是抓紧时间整理出几个好用的软件,希望可以帮到大家。
    101 0
    |
    安全 测试技术 BI
    最齐全不接受反驳、常用BUG管理工具系统
    最齐全不接受反驳、常用BUG管理工具系统
    813 0
    最齐全不接受反驳、常用BUG管理工具系统
    |
    数据安全/隐私保护
    分享五款没什么名气却意外好用的软件
    噔噔噔噔,作为一个黑科技软件爱好者,电脑里肯定是不会缺少这方面的东西,今天的5款优质软件闪亮登场了。
    162 0
    分享五款没什么名气却意外好用的软件
    |
    开发者
    微软更新 Microsoft Store 策略:重点“打击”欺诈付费版的非官方开源程序
    微软更新 Microsoft Store 策略:重点“打击”欺诈付费版的非官方开源程序
    136 0
    微软更新 Microsoft Store 策略:重点“打击”欺诈付费版的非官方开源程序
    |
    缓存 Linux 数据库
    Linux安装软件时90%的人会遇到这个报错,如何解决?
    Linux安装软件时90%的人会遇到这个报错,如何解决?
    172 0
    Linux安装软件时90%的人会遇到这个报错,如何解决?
    |
    移动开发 小程序
    怎么做论坛软件
    在目前这个发达的互联网时代,行业论坛已近比较成熟了,各个行业都有做得比较好的论坛,行业论坛也是很多创业者的标配,所以我们目前看到了很多像汽车类论坛网站、美妆类论坛网站、地方类论坛网站、电商技术交流类论坛网站
    295 0
    怎么做论坛软件
    |
    安全
    微软紧急发布10个IE补丁 用户应火速升级
    3月30日,微软紧急发布MS10-018安全更新,此安全更新可消除9个秘密报告的漏洞以及一个公开披露的漏洞,其中多个漏洞被评级为“危急”。金山卫士安全中心已经在第一时间升级了漏洞特征库,为用户提供相应的漏洞修复服务。
    773 0
    |
    Web App开发 Windows
    IE9最终版透露IE10信息 或将自动在线升级
    IE9才刚刚发布几天,互联网上已开始了对IE下一个版本的猜测。 今天,在IE9最终版里发现的一些隐藏资源显示,微软已有了对IE10的预先计划。俄罗斯网站TheVista.ru披露了一个提及IE10的对话框,内容如下: “Internet Explorer 10已可使用、立即将IE9在线升级到IE10,体验更快、更清洁、更值得信赖的上网浏览。
    812 0

    相关实验场景

    更多