灰度发布

DNA图谱 / 问答 / 标签

灰度发布数据库字段不统一

涉及到数据的灰度服务,一定会使用到数据库,使用到数据库就会涉及到你使用数据库前后的表字段不一致。如果灰度前后数据库的字段保持不变,那么新旧两套系统使用同一套数据库就可以了.如果前后数据不一致,需要处理的情况就比较复杂。

nginx如何实现负载均衡、限流、缓存、黑白名单和灰度发布

1.负载均衡配置 2.失败重试配置 在fail_timeout时间内失败了max_fails次请求后,认为上游服务器不可用,就会将服务地址剔除掉,fail_timeout时间后会再次将服务器加入存活列表进行重试。 limit_req_zone指令设置参数 参数说明 limit_req_zone定义在http块中,$binary_remote_addr表示保存客户端IP地址的二进制形式。 Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息约1MB,例子区域可以存储160000个IP地址。 Rate定义最大请求速率。示例中速率不能超过每秒10个请求。 设置限流 burs排队大小,nodelay不限制单个请求间的时间。具体使用可以查看高并发场景如何使用nginx实现限流-实战篇 不限流白名单 该配置说明 192.168.1.0/24网段的ip访问是不限流的,其它限流。ip后面数字的含义 24表示子网掩码:255.255.255.0 16表示子网掩码:255.255.0.0 8表示子网掩码:255.0.0.0 1.浏览器缓存 静态资源缓存用expire Response Header中添加了Expires和Cache-Control 所谓的静态资源一般包括一直不变的图像,如网站的logo,js、css静态文件还有可下载的内容,媒体文件 协商缓存(add_header ETag/Last-Modified value)包括html文件,经常替换的图片,经常需要修改的js、css文件和基本不变的api接口 不需要缓存包括用户隐私等敏感数据,用户经常变动的api接口 2.代理层缓存 在本地磁盘创建一个文件目录,根据我们的配置把请求资源以k(key自定义,这边用url的hash值)->v形式缓存到目录里,并根据需求对内容设置缓存时长,比如状态码为200缓存10分钟,其余的缓存1分钟等待。要清理缓存可以借助purger的功能。如果ab测试/个性化需求时应禁用浏览器缓存,否则会因为缓存导致误差。 方式一 方式二 lua+redis动态黑名单(openresty) 配置(/usr/local/openresty/nginx/conf/nginx.conf) lua脚本编写(ip_blacklist.lua) 1.根据cookie实现灰度发布 根据cooke查询version值,根据version跳转到对应的host,如果没有匹配上的就跳转到默认配置。 2.根据来路ip实现灰度发布

网站里面灰度发布是什么意思?

网站里面灰度发布是什么意思?告诉你就是要发布一个很高很好的东西,让大家来参与。

灰度发布的步骤

1)定义目标2)选定策略:包括用户规模、发布频率、功能覆盖度、回滚策略、运营策略、新旧系统部署策略等3)筛选用户:包括用户特征、用户数量、用户常用功能、用户范围等4)部署系统:部署新系统、部署用户行为分析系统(web analytics)、设定分流规则、运营数据分析、分流规则微调5)发布总结:用户行为分析报告、用户问卷调查、社会化媒体意见收集、形成产品功能改进列表6)产品完善7)新一轮灰度发布或完整发布

iOS实现灰度发布App

1、进入 App Store Content ,输入 Apple 开发者账号登录。 2、登录成功之后,选择"我的 App",进入 App 列表。(如果没有 App,需要创建 App) 3、选择"TestFlight",“新群组”,“构建版本”,“选择要测试的构建版本”,“测试信息”,提交审核。 4、审核通过之后,选择“开启链接”,将“https”替换成“itms-beta”即可。 【 TestFlight 公开链接 】 转 【 TestFlight 安装链接 】 iOS 跳转 TestFlight 实现

crm灰度发布能力是什么?

灰度 API 的能力就是指灰度系统能根据不同的灰度规则来转发 API 请求到不同的后端服务器的能力按照 URI 前缀来区分不同的服务在我所处的部门,提供的 API 有十多个服务,但是我们提供出去的 API 是通过一个域名提供的,而不同服务之间则是通过 URI 前缀来区别的,因此,这里提供了根据 URI 前缀来区分不同的服务的功能请求转发到后端服务器组时,请求的 URI 前缀会被截断掉自定义后端服务器组可以在界面上自己添加服务器组,指定 API 服务器的 IP、端口和权重(为什么要说明这个呢,是因为在上家公司的时候,灰度系统做的极其简陋,每次我们的服务要换机器或者加机器的时候,都要去找灰度系统的维护人员,让他们去线上机器改配置,麻烦死了,跟他们的 leader 提过几次说希望能够写个后台让我们可以自己修改,节省大家的时间,他说真的没空,有太多其他需求了,也是,这个需求不产生任何 KPI 啊,过了一年多,到我离职的时候都没做出来过)

istio,让灰度发布从未如此简单

ServiceMesh解决什么问题? SM本质是 业务服务 与 底层技术体系 的 解耦 : Istio是ServiceMesh的产品化落地。 Istio的分层架构设计如何? Istio采用 实施与控制分离 的数据平面与控制平面两层架构。 数据平面 控制平面 整个架构的核心是envoy与pilot。 今天起,聊聊Istio的 流控 ,典型如灰度发布。 就如同ServiceMesh的设计初衷,是技术体系与业务服务解耦一样, Istio流控模型的本质 ,是流量控制与服务实例扩展的解耦,更具体的: 如上图所示,最开始时,ServiceA访问旧版的ServiceB。 画外音,业务与底层解耦: (1)灰色圆形为业务Svc服务; (2)紫色六边形为Envoy代理; (3)服务与代理之间都是本地访问; (4)跨网段之间都是Envoy代理交互(蓝色箭头); 如何进行灰度发布呢? 如上图所示,服务A调用服务B,服务B要发布一个灰度版本,需要5%的流量打到服务B的新版本,只需要: (1)部署服务B的新版本; (2)控制平面Pilot上进行策略配置,策略同步到Envoy; (3)数据平面Envoy接收到策略配置,实时分流策略; 画外音:图形上没有画出Pilot和Envoy的交互。 搞定,这个过程 业务服务与流量控制策略完全解耦 ,完美! 除了基于按流量比例分流的灰度发布,基于应用层的灰度发布通过Istio也非常容易实现。 如上图所示,服务B要发布一个灰度版本,需要把iPhone的流量打到B的新版本,操作流程完全一样(部署服务,Pilot控制,Envoy实施),非常方便。 如果Envoy原来只支持按照流量比例分流,不支持基于应用层协议分流,此时只需要: (1)升级Envoy的分流策略,以及策略控制端Pilot; (2)调用方服务A不需要升级; (3)服务方服务B也不需要升级; 业务与底层基础设施完全解耦 ,完美!

苹果官方提供的灰度发布机制

如果你登录 itunes 后台,你就可以看到在应用版本号的最下方,有“Phased Release for Automatic Updates” 一项。如下图: 这个 Phased Release for Automatic Updates,就是苹果提供的灰度机制,只是苹果把这个叫做自动更新的分阶段发布。点击上图中的 “Learn More",你可以看到这个功能的详细说明。 该灰度发布机制将灰度分为七天,七天共七个阶段。第一天发布 1%的用户,第二天发布 2%,之后快速上升,第六天发布 50%用户,最后一天发布到所有用户。具体的进度表格如下: 当你在灰度发布时发现严重的 Bug 怎么办?别着急,苹果允许你暂停当前的版本发布。按官方的文档描述,你可以在灰度开始后的 30 天内无限次暂停发布。暂停发布之后,你可以选择提交一个新的版本来修复这个 Bug。 但是,需要注意的是,已经升级到你的灰度版本的用户,是无法让他回退应用版本的。具体为什么,大家可以想想。我觉得很可能是因为很难保证应用回退时数据是兼容的。这也是为什么 iOS 的备份也不能降低恢复到低版本中的原因。 觉得 7 天灰度太慢?没关系,苹果也考虑到了这一点。你可以在灰度阶段的任何时候,选择直接 100% 发布。这样你可以提前结束掉灰度的过程。 详情可阅读官方文档: https://itunespartner.apple.com/en/apps/faq/Managing%20Your%20Apps_Submission%20Process

蓝绿发布、红黑发布、灰度发布和滚动发布

总结: 蓝绿发布、红黑发布、灰度发布和滚动发布组最终的目标都是避免因发布导致流量的丢失或服务不可用的问题 四种方式均可以做到平滑式升级,在升级过程中服务仍然保持服务的连续性,升级对外界是无感知的。那生产上选择哪种部署方法最合适呢?这取决于哪种方法最适合你的业务和技术需求。如果你们运维自动化能力储备不够,肯定是越简单越好,建议蓝绿发布,如果业务对用户依赖很强,建议灰度发布。如果是K8S平台,滚动更新是现成的方案,建议先直接使用。 蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚。 红黑发布: 申请新环境,删除老版本 灰度发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本。 滚动发布:按批次停止老版本实例,启动新版本实例。 项目逻辑上分为AB组,在项目系统时,首先把A组从负载均衡中摘除,进行新版本的部署。B组仍然继续提供服务。 当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署。A组重新提供服务。1.如果出问题,影响范围较小; 2.发布策略简单; 3.用户无感知,平滑过渡; 4.升级/回滚速度快。 1.需要准备正常业务使用资源的两倍以上服务器,防止升级期间单组无法承载业务突发; 2.短时间内浪费一定资源成本; 3.基础设施无改动,增大升级稳定性。 当前服务都运行在集群A上 在云上申请一个黑色集群 B,在 B 上部署新版本的服务; 等到 B 升级完成 最后一次性地把负载均衡全部指向 B,并把 A 集群从负载均衡列表中删除,并释放集群 A 中所有机器。 可以看到,与蓝绿部署相比,红黑部署只不过是充分利用了云计算的弹性伸缩优势,从而获得了两个收益:一是,简化了流程;二是,避免了在升级的过程中,由于只有一半的服务器提供服务,而可能导致的系统过载问题。 1.从LB摘掉灰度服务器,升级成功后再加入LB; 2.少量用户流量到新版本; 3.如果灰度服务器测试成功,升级剩余服务器。 1.保证整体系统稳定性,在初始灰度的时候就可以发现、调整问题,影响范围可控; 2.新功能逐步评估性能,稳定性和健康状况,如果出问题影响范围很小,相对用户体验也少; 3.用户无感知,平滑过渡。 自动化要求高 滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本。 1.保证整体系统稳定性,在初始灰度的时候就可以发现、调整问题,影响范围可控; 2.新功能逐步评估性能,稳定性和健康状况,如果出问题影响范围很小,相对用户体验也少; 3.用户无感知,平滑过渡。 自动化要求高

F5提出的“灰度发布”是什么意思呢?

灰度发布是在软件开发过程中交付的一种方式F5率先提出在应用交付控制器中支持“灰度发布”,并进一步完善了灰度发布的实现形式,除支持传统的A/B测试场景外,还可在线复制生产系统的流量到测试系统。在互联网产品的发布过程中也较多采用此种发布方式:产品的发布过程不是一蹴而就,而是逐步扩大使用用户的范围,从公司内部用户->忠诚度较高的种子用户->更大范围的活跃用户->所有用户。在此过程中,产品团队根据用户的反馈及时完善产品相关功能。此种发布方式,按照中国特色的叫法被冠以“灰度发布”、“灰度放量”、“分流发布”。请采纳!

灰度发布(二)

继续上一篇的灰度发布,本文重点讲述kong网关是如何配置灰度发布规则的。 一、Kong网关在灰度发布中的重要作用 1、校验用户的htttp请求是否为灰度请求; 2、灰度规则的配置,允许多个规则的拼接; 3、需要为同一个service配置两个upstream,一个是正常的,另一个是灰度的。 二、主要流程 下面以用户服务为示例,演示在kong上面的操作。 1、新建UserService 2、新建两个upstream 三、配置灰度规则 支持多个规则,规则之间可以是“且”“或”的关系。 rules是一个数组结构:示例如下 passway可以是header, parameter, cookie。 paramName就是我们说的Key值。 rule_type 是表示多个规则之间的逻辑关系。 至于判断是否匹配规则,是Lua的global.lua中的load()方法。 如果请求匹配上了灰度规则,下一步要做的就是设置对应的upstream了。 默认取的upstream是ngx.ctx.balancer_data.host,如果填写的不是它,则取UserServiceGray这个对应的upstream。 最后给请求打上灰度标签。

Spring微服务灰度发布(热部署)的实现(二)

接着上篇说,我们微服务中用到的nepxion discovery主要采用了三种灰度发布方式,一种是web图形化界面发布,二是zuul过滤器灰度发布,三是业务参数策略灰度发布。下面将重点介绍三种方式的实现。 一、web图形化界面灰度发布 因为我们项目用到了eureka注册中心,所以选择web图形化界面灰度发布比较合适。 1) 首先需要建立一个discovery控制台工程console, 端口为2222,控制台工程负责web图形化界面请求的处理,运行console工程。 2) 下载discovery ui,地址:https://github.com/Nepxion/DiscoveryUI,运行discovery UI,端口为8090 3)浏览器中输入localhost:8090,即可打开控制台,如下 注意:全链路灰度发布需要在“配置中心”下才可用。灰度发布配置中心,负责存储全链路灰度发布规则,并将规则推送到各个微服务中。而配置中心可用nacos,redis等,Discovery 中提供了相应配置中心的插件包。 二、zuul网关过滤器灰度发布 通过网关过滤器传递Http Header的方式传递全链路灰度路由规则。下面代码只适用于Zuul和Spring Cloud Gateway网关,Service微服务不需要加该方式。 三、业务参数在策略类中自定义灰度路由规则 通过策略方式自定义灰度路由规则。下面代码既适用于Zuul和Spring Cloud Gateway网关,也适用于Service微服务,同时全链路中网关和服务都必须加该方式 上面说了具体灰度规则发布方式,那究竟怎么定义灰度规则呢?? 规则是基于XML或者Json为配置方式,存储于本地文件或者远程配置中心,可以通过远程配置中心修改的方式达到规则动态化。其核心代码参考discovery-plugin-framework以及它的扩展、discovery-plugin-config-center以及它的扩展和discovery-plugin-admin-center等,规则示例 XML示例(Json示例见discovery-springcloud-example-service下的rule.json) 黑/白名单的IP地址注册的过滤规则 微服务启动的时候,禁止指定的IP地址注册到服务注册发现中心。支持黑/白名单,白名单表示只允许指定IP地址前缀注册,黑名单表示不允许指定IP地址前缀注册。规则如何使用,见示例说明 最大注册数的限制的过滤规则 微服务启动的时候,一旦微服务集群下注册的实例数目已经达到上限(可配置),将禁止后续的微服务进行注册。规则如何使用,见示例说明 黑/白名单的IP地址发现的过滤规则 微服务启动的时候,禁止指定的IP地址被服务发现。它使用的方式和“黑/白名单的IP地址注册的过滤规则”一致 版本访问的灰度发布规则 版本权重的灰度发布规则 全局版本权重的灰度发布规则 区域权重的灰度发布规则 全局区域权重的灰度发布规则 网关端全链路路由策略的灰度发布规则 注意 路由策略的入口有三个(以{"discovery-springcloud-example-a":"1.0", "discovery-springcloud-example-b":"1.0", "discovery-springcloud-example-c":"1.0;1.2"})为例: 其作用的优先级为外界传入>网关Filter指定>配置中心或者本地rule.xml配置 您可以根据自己需求,自由定义灰度发布规则,灵活实现微服务的灰度发布。 源码位置:https://github.com/Nepxion/Discovery

为什么灰度发布又叫金丝雀发布?

作为技术人员,肯定听说过 灰度发布 这个技术术语,它指的是发布版本 (黑) 与线上版本 (白) 之间,能够平滑过渡的一种发布方式。 一般来说,随着一个产品不断地快速迭代开发上线,必然会有一方面要保证线上版本稳定,另一方面又要保证新版本上线的需求,这时候就需要设计一套灰度发布系统,让大部分用户继续使用原来的线上版本,少量用户或内部测试人员使用新版本功能,并且一旦出现问题可以很快的控制影响,如果没有不良的反馈意见,则继续逐步扩大范围,把所有用户都迁移到新版本上面来。 灰度发布可以保证整体业务的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,实现更好的风险控制。 这种发布形式非常实用,包括Google都在使用,并在书中有详细介绍,是不少成长型技术组织和互联网公司的主流发布方式。 金丝雀发布 这个说法其实来自欧美,以前旷工矿工开矿,在下矿洞时面临的一个重要危险就是矿井中的毒气,于是他们想到一个办法来辨别矿井中是否有毒气,矿工们下矿井时随身携带一只金丝雀 (Canary) 。 由于金丝雀对毒气的抵抗能力比人类要弱,在毒气环境下会先挂掉起到预警的作用,这种风险控制背后的原理暗合灰度发布的根本需求,即:

简单的前端灰度发布方案

灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。 灰度发布的核心就是分流,一部分用户能看到,一部分用户看不到。所以主要实现的核心分流算法。在实现这个需求的时候,我想到了抽签。比如在1-100的数字中抽到1-30的用户进入beta版本,抽到31-100的用户进入stable版本。这样就相当于是30%的流量进入灰度版本。 首先实现产生1-100的整数的随机函数。 然后实现灰度流量的判断 至此,简单的灰度方案就做好了。在进入页面时先调用 isShowGray 函数判断进入哪个方案。这样就可以做到简单的用户分流。

计算机术语中“灰度发布”的英文是什么?

Gray released in computer terms。灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。灰度分布让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。注意事项灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。对于一般的小系统并不需要单独的灰度发布引擎,可以参考A/B测试中做法,在页面JavaScript或服务器端实现分流的规则即可。但对于大型的互联网应用而言,单独的用于管理用户分流的发布引擎就很有必要了。

灰度发布(一)

一、术语 1、灰度周期,由测试/用户决定 2、金丝雀的故事 3、产品说的AB测试 4、客户端APP的灰度,版本更新交由后台控制 5、Java Agent 6、互联网APP常见的玩法 最后灰度发布是什么? ---- 灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。 二、灰度能做什么 1、白天发布,不用等到晚上11点,夜深人静的时候。 2、应用程序的新旧版本需要共存一段时间,用于做AB测试。 3、把新版本程序当做金丝雀,不影响真实用户的请求。 三、灰度不能做什么 1、应用程序在发布的时候,重启的时候足够安全吗,会影响线上用户吗? 2、线上灰度验证的时候,发现出问题然而开发不能及时修复,程序需要回滚,假如有已执行的数模,也需要回滚,怎么办? 3、它能够帮助我们远程断点或btrace新版本的应用程序吗? 四、灰度的实现 1、必备的条件有: 2、染色的流程 3、灰度规则 支持按流量比例和精准分配两种。精准可以是userId、IP、设备号等,只要http header能取出的key,都将支持配置到灰度规则。 4、传递灰度标识 在网关层进行打上标签,常用做法就是http header增加一个key。(kong plugin 安装灰度插件) 按链路访问顺序,由上往下进行传递,这里为了减少业务方的接入成本,采用java agent技术,做到对业务的完全透明。(java应用程序加载灰度agent的jar包) 5、灰度发布的流程 五、发布的方式有哪些 除了灰度发布,还有重要的蓝绿发布。 (灰度是允许新旧版本同时存在,蓝绿则规定在同一个环境下,要么是新版本,要么是回滚到旧版本)。 一般地,建议在预发环境下,实现蓝绿发布。在预发环境未验证通过前,预发环境是新版本,而生产环境是旧版本。 六、灰度发布带来了哪些问题 1、预期的流量是要打到灰度节点的,最后却打到正常节点了。如何核实? 现在一般的做法是通过traceId,查询kibana的日志。 2、灰度标识在全链路的整个链路传递的过程中,容易被服务或组件丢失。如何排查到底是哪个组件导致的? 3、日志与监控 日志需要采集,做法和jvm日志一样采用ELK。日志中需要包含程序的版本号、IP等关键信息。