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

简介: 软件开发一般不会上来就是最终版本,而是会一个版本一个版本的迭代。新版本上线前都会经过测试,但就算这样,也不能保证上线了不出问题。所以,在公司里上线新版本代码一般都是通过灰度系统。新版本代码的上线基本都会用灰度系统,可以逐步放量的方式来保证上线过程不会出大问题,也可以用来做产品 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。

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

    目录
    相关文章
    |
    安全 测试技术 BI
    最齐全不接受反驳、常用BUG管理工具系统
    最齐全不接受反驳、常用BUG管理工具系统
    845 0
    最齐全不接受反驳、常用BUG管理工具系统
    |
    搜索推荐
    推荐5款经过时间验证的神级软件
    今天来给大家推荐5款良心软件,每款都是经过时间检验的精品,用起来让你的工作效率提升飞快,各个都让你觉得相见恨晚!
    125 0
    推荐5款经过时间验证的神级软件
    |
    Ruby Perl
    Cocoapods迄今为止的安装使用方法,更新下网上众多有些过时的操作
    Cocoapods迄今为止的安装使用方法,更新下网上众多有些过时的操作
    996 0
    |
    存储 前端开发 网络安全
    一个“@”引发的“reply-all 事件”:让 GitHub 变身发骚扰邮件的“僵尸网络”!近 40 万开发者受影响
    一个“@”引发的“reply-all 事件”:让 GitHub 变身发骚扰邮件的“僵尸网络”!近 40 万开发者受影响
    221 0
    一个“@”引发的“reply-all 事件”:让 GitHub 变身发骚扰邮件的“僵尸网络”!近 40 万开发者受影响
    |
    开发者
    微软更新 Microsoft Store 策略:重点“打击”欺诈付费版的非官方开源程序
    微软更新 Microsoft Store 策略:重点“打击”欺诈付费版的非官方开源程序
    146 0
    微软更新 Microsoft Store 策略:重点“打击”欺诈付费版的非官方开源程序
    |
    存储 数据可视化 Linux
    PHP 依赖镜像出问题后,阿里工程师的一顿“神操作“令人叫绝!
    上个月,PHP开发者在网上纷纷反映出现 Composer 镜像无法访问的问题。阿里云内部一位 90 后工程师顾咏连夜开工排查,快速解决问题后,他在问题群里收到了一大波来自用户的红包。顾咏最后谢绝了红包,接受了阿里技术的邀请,来聊一聊这次事件问题背后的技术。
    14770 0
    PHP 依赖镜像出问题后,阿里工程师的一顿“神操作“令人叫绝!
    |
    安全
    微软紧急发布10个IE补丁 用户应火速升级
    3月30日,微软紧急发布MS10-018安全更新,此安全更新可消除9个秘密报告的漏洞以及一个公开披露的漏洞,其中多个漏洞被评级为“危急”。金山卫士安全中心已经在第一时间升级了漏洞特征库,为用户提供相应的漏洞修复服务。
    780 0
    |
    Web App开发 Windows
    IE9最终版透露IE10信息 或将自动在线升级
    IE9才刚刚发布几天,互联网上已开始了对IE下一个版本的猜测。 今天,在IE9最终版里发现的一些隐藏资源显示,微软已有了对IE10的预先计划。俄罗斯网站TheVista.ru披露了一个提及IE10的对话框,内容如下: “Internet Explorer 10已可使用、立即将IE9在线升级到IE10,体验更快、更清洁、更值得信赖的上网浏览。
    819 0
    |
    算法 Android开发 iOS开发
    微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉
    1、微信超级Bug 大家好,给大家介绍一下,这是Bug: 应该有很多Android的用户熟悉上面这图。 (本文同步发布于:http://www.52im.net/thread-1099-1-1.html) 2、事件背景 国庆前几天,微信Android大量用户反馈接收或发送类似“15。
    1783 0

    热门文章

    最新文章