AB测试中的痛点

新功能上线,产品要求按照规则进行AB测试,但是规则随着业务的推进不断变化(上线前也无法完全确定)。例如:第一天要求产品价格>100的走A场景,第二天要求:在上午10到下午18之前的走B场景,第三天要求产品编码为(1001,1002,1003)的走A场景… 传统方案:修改规则后发版,这就导致开发工作量增加,频繁上线,时效性也很差。 在这种情况下GrayScale 应运而生…

介绍

com-grayscale-annotation  (注解模块,快速下线是使用)
com-grayscale-client  (客户端demo 依赖 com-grayscale-annotation )
com-grayscale-core     (核心模块依赖 com-grayscale-annotation )
com-grayscale-dashboard (控制台,服务查看,规则配置)

GrayScale是一套轻量、高可用、配置友好的灰度程序管理器,内置20多个常用规则,用户可以按照业务场景快速开发自己的规则,离线模式满足高并发场景的需求。在实际业务场景中针对AB测试,开发一个B方法。并使用GrayScale的注解为A方法指定切量方法B,GrayScale会更具用户自定义的规则来选择执行A方法还是B方法 ,目前,GrayScale定义了3个维度的规则,服务全局开关、方法开关、方法规则 。

功能架构

  • 提供标准规则库,用户可按照需求扩展
  • 提供Dashboard,查看服务和规则、动态配置规则,自动同步到在线节点
  • 高可用支持:规则本地持久化,规则变更后通过zookeeper监听机制动态刷新本地缓存,支持开启离线模式(直接本地获取规则不连接zk)
  • 使用简单,快速接入,代码O侵入(只需一个注解+一个配置),支持更换jar包快速下线,无需修改业务代码

技术架构

如何接入?

第一步:准备zk集群

搭建好zk集群,GrayScale在zk集群中使用的根目录为 grayscale,接入请确保该目录没有被占用

第二步:Dashboard下载和启动

指定zk地址
– grayscale.zookeeper.connect-url 指定zookeeper地址.

java -jar com-grayscale-dashboard-1.0.jar grayscale.zookeeper.connect-url=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

配置参数详解

user.username 登录名(默认:admin)
user.password: 密码(默认:123456)
grayscale.clientRegister 是否注册服务(false)控制台不注册
grayscale.zookeeper.connect-url zk集群地址(默认:127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183)

启动后访问地址: http://localhost:8888/index.html

功能预览
登录

首页

服务列表

接口服务列表

接口服务规则

接口服务规则配置

规则列表

第二步:服务接入

引入maven支持:打包com-grayscale-core (上传到自己的私服,可根据项目情况调整依赖jar版本)

<dependency><groupId>com.grayscale.core</groupId><artifactId>com-grayscale-core</artifactId><version>1.0</version></dependency>

参数配置

# 必须参数
server.port  服务端口 (默认8080)
spring.application.name 服务编码
spring.application.code 服务名称
grayscale.zookeeper.connect-url zk地址
grayscale.offlinePath 本地配置信息路劲(默认/grayscale/${spring.application.code})
grayscale.offlineMode 是否开启离线模式(默认false)

– 配置切量方法

/**
* TestController中调用sFunction1,按照GrayScale配置规则在满足条件的情况下切换到sFunction1GrayScale
* 这2个方法的形参必须一样
* @author liuli31
* @date 2022/2/9
*/
@Service
public class Server1Impl implements Server1 {@Override/*** 如不指定 grayScaleMethod 默认:该方法名+GrayScale* @GrayScaleFunction(grayScaleMethod="sFunction1GrayScale")* */@GrayScaleFunctionpublic void sFunction1(String productCode, String userId, double price, PamsVo pamsVo) {System.out.println("sFunction1=不切量");}@Overridepublic void sFunction1GrayScale(String productCode, String userId, double price, PamsVo pamsVo){System.out.println("sFunction1GrayScale=切量");}}

第三步:实例

参考:https://gitee.com/wenwang2000/grayscale

服务下线

服务快速下线:

一、把core替换成annotation 无需修改业务代码,摘除grayscale

二、关闭grayscale.zookeeper.connect-url(如项目不再需要zk)等配置

 <dependency><groupId>com.grayscale.core</groupId><artifactId>com-grayscale-annotation</artifactId><version>1.0</version></dependency>

2.0 规划

  • 扩展更多规则库
  • 增加数据统计功能

说明:

  • 由于作者时间有限,后期项目升级,博客内容未必能同步更新,请参考gitee开源项目 :grayscale
  • 如果你喜欢该项目、或该项目对你有用,请在gitee上 给个start

GrayScale灰度切量系统 【AB测试】相关推荐

  1. 蓝绿发布金丝雀发布灰度发布滚动发布AB测试

    金丝雀不是说它外形漂亮或有特点,而是说它对瓦斯很灵敏. 这些名字玄而又玄,逼格十分高大上.到底是些啥?好像不了解一下,就完全看不懂当下流行的吹哔哔技术PPT了. 一.蓝绿发布 不停老版本,部署新版本然 ...

  2. 蓝绿部署、金丝雀发布(灰度发布)、AB测试……

    点击关注公众号,Java干货及时送达 来源 | https://www.jianshu.com/p/0df88fe4a1e3 随着微服务架构的普及,线上服务越来越多,随之而来的就是部署越来越频繁:随着 ...

  3. 常见的部署类型(停机部署、蓝绿部署、滚动部署、灰度部署、AB测试等)

    目录 一.常见部署类型 二.停机部署 三.蓝绿部署 四.滚动部署 五.灰度部署(金丝雀) 六.AB测试 一.常见部署类型 停机部署(Big Bang / Recreate): 把现有版本的服务停机,然 ...

  4. 蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别...

    蓝绿部署.红黑部署.AB测试.灰度发布.金丝雀发布.滚动发布的概念与区别 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangyinghong_2 ...

  5. 通过变量指定少量用户实现AB测试(灰度测试):split_client模块

    前言 灰度测试或者AB测试,这个概念我相信大家都不陌生了,也是互联网公司常见的迭代方式.最近公司有个很老的SDK项目,完全的面向过程方式,很难维护和管理,所以决定在此基础上对此SDK项目进行重构,使用 ...

  6. 数据应用系列(1)-ab测试

    作者/五花肉 作者介绍 前网易出口大数据产品经理一枚 负责过数据采集.bi系统.ab测试.画像平台等应用层平台搭建 酷爱健身.钟爱咖啡.喜爱摩托.热爱生活 01 为什么需要ab测试 大家在日常工作中是 ...

  7. AB 测试平台的设计与实现

    AB 测试(以下称为「试验」),本质是把选择权交给用户,让用户决定什么是最好的.我们给参与试验的不同用户,分配不同的方案,收集用户数据并加以分析,最终确定最优方案. 试验方案的分配可抽象为一个哈希函数 ...

  8. 第八章 流量复制/AB测试/协程

    流量复制 在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线.这其实就需要进 ...

  9. 辛普森悖论如何影响AB测试

    Simpson's paradox occurs when we observe a certain trend in the aggregate data but not in the underl ...

最新文章

  1. hp惠普笔记本电脑黑屏大小写锁定键闪烁报错无法开机怎么办?
  2. 开源 免费 java CMS - FreeCMS1.7 栏目管理
  3. 用python写helloworld_Python Helloworld程序简单实现
  4. 【Java】基于Socket的C/S聊天程序
  5. CSS深入浅出(三)
  6. atm机存款场景图_被ATM机吞掉的钱
  7. java subset_Java中的TreeSet的subSet()方法 Java.util.TreeSet.subSet() - Break易站
  8. 偶然翻开旧日记本,发现了好多的情诗!!!!
  9. openCV5-getTickCount
  10. Android系统在超级终端下必会的命令大全(adb shell命令大全)
  11. Windows下安装HDFView
  12. nmake、makefile、cmake学习笔记
  13. c语言两矩阵相乘算法,用c语言实现两个矩阵相乘怎么做?
  14. Nginx+php+mysql超时问题总结
  15. 51单片机游戏(推箱子)
  16. SwiftUI 如何解决Generic parameter ‘SelectionValue‘ could not be inferred
  17. c语言中要让音乐暂停还用什么指令,【Android】Broadcast控制音乐暂停继续等
  18. ArcMAP实现矢量数据平移
  19. QQ群互通(QQ_Bot)程序配置教程
  20. android 手电筒开关,Android 系统开关,wifi、手电筒等的开关

热门文章

  1. 鬼知道NOI会不会成为下一个奥数
  2. 论研究生教育——蒲慕明所长在神经所2005年会上的讲话
  3. 2022年全球市场盐酸普萘洛尔总体规模、主要生产商、主要地区、产品和应用细分研究报告
  4. 记一次fegin远程调用 object is not an instance of declaring class
  5. SVN客户端安装+配置
  6. 产品经理认证NPDP考试心得
  7. Linux学习笔记-段错误与内存转储
  8. html大赛ppt,HTML表与表单.ppt
  9. QT输入窗口之QDial(仪表盘)
  10. shell 浮点数计算使用bc