灰度发布的定义

互联网产品需要快速迭代开发上线,又要保证质量,保证刚上线的系统,一旦出现问题可以很快控制影响面,就需要设计一套灰度发布系统。灰度发布系统的作用,可以根据配置,将用户的流量导到新上线的系统上,来快速验证新的功能,而一旦出现问题,也可以马上的修复,简单的说,就是一套A/B Test系统。灰度发布允许带着bug上线,只要bug不是致命的,当然这个bug是不知道的情况下,如果知道就要很快的改掉

简单灰度发布系统的设计

灰度简单架构如上图所示,其中的必要组件如下:1、策略的配置平台,存放灰度的策略2、灰度功能的执行程序3、注册中心,注册的服务携带ip/Port/name/version有了上面三个组件,才算一个完整的灰度平台

灰度的策略

灰度必须要有灰度策略,灰度策略常见的方式有以下几种1、基于Request Header进行流量切分2、基于Cookie进行流量切分3、基于请求参数进行流量切分举例:根据请求中携带的用户uid进行取模,灰度的范围是百分之一,那么uid取模的范围就是100,模是0访问新版服务,模是1~99的访问老版服务。灰度发布策略分为两类,单策略和组合策略单策略:比如按照用户的uid、token、ip进行取模组合策略:多个服务同时灰度,比如我有A/B/C三个服务,需要同时对A和C进行灰度,但是B不需要灰度,这个时候就需要一个tag字段,具体实现在下文详述

灰度发布具体的执行控制

在上面的简单灰度发布系统架构中我们了解到,灰度发布服务分为上游和下游服务,上游服务是具体的执行灰度策略的程序,这个服务可以是nginx,也可以是微服务架构中的网关层/业务逻辑层,下面我们就来分析一下不同的上游服务,如何落地

Nginx

如果上游服务是nginx,那么就需要nginx通过Lua扩展nginx实现灰度策略的配置和转发,因为nginx本身并不具备灰度策略的执行通过lua扩展实现了灰度策略的执行,但是问题又来了,nginx本身并不具备接收配置管理平台的灰度策略,这个时候应该怎么办呢?解决方案:本地部署Agent(需要自己开发),接收服务配置管理平台下发的灰度策略,更新nginx配置,优雅重启Nginx服务

网关层/业务逻辑层/数据访问层

只需要集成配置管理平台客户端SDK,接收服务配置管理平台下发的灰度策略,在通过集成的SDK进行灰度策略的执行即可

灰度发布复杂场景

下面举例两个稍微复杂的灰度发布场景,灰度策略假设都按照uid取模灰度百分之一的用户,看一下如何实现。

场景1:调用链上同时灰度多个服务

功能升级涉及到多个服务变动,网关层和数据访问层灰度,业务逻辑层不变,这个时候应该如何进行灰度?解决方案:经过新版本网关层的请求,全部打上tag T,在业务逻辑层根据tag T进行转发, 标记Tag T的请求全部转发到新版数据访问层服务上,没有tag T的请求全部转发到老版数据访问层上。

场景2:涉及数据的灰度服务

涉及到数据的灰度服务,一定会使用到数据库,使用到数据库就会涉及到你使用数据库前后的表字段不一致,我老版本是A/B/C三个字段,新版本是A/B/C/D四个字段。这时新版的灰度,就不能往老版的数据库进行修改了,这个时候就需要把数据copy一份出来做这个事情了数据库其实并没有灰度的概念,这个时候我们只能把数据重新拷贝一份出来进行读和写,因为这时你的写必须是全量的(双写),不能说90%的数据写入到老版本,10%的数据写入到新版本,因为这个时候你会发现两个数据库的数据都不是全量的。离线全量复制数据的过程中一定会有数据丢失,这个时候就需要业务逻辑层写一份数据到MQ中,等数据同步完成之后,新版的数据访问层再将MQ的数据写入到新版本的DB中,实现数据的一致性,这个也是引入MQ的主要目的。

灰度过程中需要对两个数据库的数据进行对比,观察数据是否一致。这样不管是灰度失败,放弃新版DB,还是灰度成功切换到新版DB,数据都不会产生丢失。

java灰度发布系统_灰度发布系统架构设计相关推荐

  1. Java生鲜电商平台-商品基础业务架构设计-商品设计

    Java生鲜电商平台-商品基础业务架构设计-商品设计 在生鲜电商的商品中心,在电子商务公司一般是后台管理商品的地方.在前端而言,是商家为了展示商品信息给用户的地方,它是承担了商品的数据,订单,营销活动 ...

  2. Java生鲜电商平台-商品中心的架构设计与源码解析(小程序/APP)

    Java生鲜电商平台-商品中心的架构设计与源码解析(小程序/APP) 说明:Java生鲜电商平台中,由于商品的架构很大程度决定了电商的扩展性与伸缩性.对此根据自己多年的生鲜电商经验,整理了以下的商品中 ...

  3. MySQL信息发布系统_信息发布系统

    系统介绍 由盾华科技自主研发的,用于在网络环境下,对多媒体信息进行编辑处理和控制发布的专业系统平台.联网多媒体信息发布系统融合网络技术.信息技术和多媒体技术,可对音视频.图片.流媒体等多种素材编辑制作 ...

  4. java jsp交友系统_交友网站系统的设计与实现(JSP,MySQL)(含录像)

    交友网站系统的设计与实现(,MySQL)(含录像)(开题报告,毕业论文12700字,程序代码,MySQL数据库) 摘  要 随着中国老龄化的加快,越来越多的人进入了退休后的晚年生活,人这一群体也加入到 ...

  5. java在线书城系统_二手书城系统 本设计为基于JAVA的网上书店系统 - 下载 - 搜珍网...

    压缩包 : e3e5162e046943e353d52817670.zip 列表 二手书城系统/ 二手书城系统/book_system/ 二手书城系统/book_system/book/ 二手书城系统 ...

  6. Java界面排号系统_【前端系统】javaweb技术的医院门诊在线预约及排号管理系统的实现...

    描述 本系统着力于实际生活需求,介绍基于javaweb技术的医院预约门诊挂号系统信息化软件工程思想,分析设计与实现该系统的需求.力在解决医院门诊优化,看诊用户挂号等待时间长问题,优化门诊效率,从而提高 ...

  7. java设计一个秒杀系统_面试宝典系列-怎么设计一个秒杀系统

    方向:将请求尽量拦截在系统上游 思路:限流和削峰 1.限流:屏蔽掉无用的流量,允许少部分流量流向后端. 2.削峰:瞬时大流量峰值容易压垮系统.常用的消峰方法有异步处理.缓存和消息中间件等技术 异步处理 ...

  8. 外网访问arm嵌入式linux系统_嵌入式Linux系统移植的四大步骤

    最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命 ...

  9. 快递包裹自动化分拣系统_包裹识别系统的类型

    快递包裹自动化分拣系统 包裹识别码的类型 (Types of Parcel identifiers) There are several classes or parcel identificatio ...

最新文章

  1. mysql中的意向锁IS,IX
  2. javascript创建对象 1
  3. python的GUI之Tkinter的Label组件
  4. java 调用本地接口_JAVA通过本地接口调用C++
  5. class meta
  6. 如何优雅的关闭Golang Channel?
  7. 初识OPPM一页纸项目管理
  8. Ubuntu14.04(LTS)gitHub客户端安装
  9. DirectX11学习笔记五 摄像机类
  10. Matlab闪退打不开解决方法
  11. simulink常用模块
  12. 《咏怀古迹五首·其三》.唐.杜甫
  13. 在misc中涉及的二维码
  14. 计算机语言表示教师节快乐,教师节快乐的祝福语38句
  15. 切分数组--荷兰国旗问题
  16. Transformers预测未来:关注下一帧和时间序列预测
  17. GARCH模型案例分析
  18. TinyRTC DS1307 的使用
  19. C++ 集合set 详解
  20. 在excel中绘制甘特图

热门文章

  1. 哈夫曼树的正确打开方式
  2. 抖音数据统计_2019年抖音数据报告的分析探究
  3. 十二星座匹配对象_处女座和十二星座的爱情配对,看看谁是处女座的理想对象?...
  4. 承蒙厚爱,我回归啦!未来也请继续加油鸭!
  5. 强化学习丨蒙特卡洛方法及关于“二十一点”游戏的编程仿真
  6. linux usb代码,Linux USB Host Controller的初始化代码框架分析
  7. Windows 桌面图标显示异常
  8. 腾讯的微生活、阿里淘点点、饿了吗相关前景分析
  9. 3D渲染中纹理映射技术与贴图制作技巧简介
  10. 接收机中的非线性因素来源与模型