还原火山引擎 A/B 测试产品——DataTester 私有化部署实践经验
作为一款面向ToB市场的产品——火山引擎A/B测试(DataTester)为了满足客户对数据安全、合规问题等需求,探索私有化部署是产品无法绕开的一条路。在面向ToB客户私有化的实际落地中,火山引擎A/B测试(DataTester)也遇到了字节内部服务和企业SaaS服务都不容易遇到的问题。在解决这些问题的落地实践中,火山引擎A/B测试团队沉淀了一些流程管理、性能优化等方面的经验。本文主要分享火山引擎A/B测试当前的私有化架构,遇到的主要问题以及从业务角度出发的解决思路。
火山引擎A/B测试私有化架构
- 业务服务: 主要是直接向用户提供界面或者功能服务的, 例如实验管理、实验报告、OpenAPI、数据接入等。
- 基础服务: 不直接面向用户,为上层服务的运行提供支撑,例如支持实验报告的计算引擎、为指标创建提供元信息的元信息服务;基础服务同时还会充当一层对基础设施的适配,用来屏蔽基础设施在 SaaS 和私有化上的差异, 例如 SaaS 采用的实时+离线的 Lambda 架构, 私有化为了减少资源开销,适应中小集群部署只保留实时部分, 计算引擎服务向上层屏蔽了这一差异。
- 基础设施: 内部团队提供统一私有化基础设施底座 minibase,采用宿主机和 k8s 结合的部署方式,由 minibase 适配底层操作系统和硬件, 上层业务直接对接 minibase。
私有化带来的挑战
挑战 1:版本管理
为了将周期内集中完成的工作分散到 Feature 开发阶段,重新规范了分支使用逻辑、完善私有化流水线和上线流程,让研发和测试的介入时间前移。
解法:
- 推动了具体 Feature 的研发从技术方案设计层面考虑不同环境的 Diff 问题,减少了后期返工的成本
- 测试同学的工作化整为零,避免短时间内的密集测试
- 减少研发和测试同学的上下文切换成本,SaaS 和私有化都在 Feature 开发周期内完成
挑战2:性能优化
解法:
- 分析的日期区间及过滤条件
- 选择合适的指标来评估实验带来的收益
- 实验版本和对照版本
- 报告类型, 例如:做多天累计分析、单天的趋势分析等
指标如何定义呢?
- 由用户行为产生的事件及属性
- 预置的算子
- 四则运算符
如何区分用户命中哪一组呢?
- 曝光事件和普通事件存储在一张事件表中量级大
- 曝光事件需要搜索第一条记录,扫描的分区数会随着实验时间的增加而增加
- 曝光事件可能反复上报,计算口径中仅仅第一条曝光为有效事件
- 用户表不存在时间的概念,数据增长=新用户增速,规模可控
- 用户表本身会作为维度表在原模型中引入,这类情况下减少一次 join 运算 模型优化后经测试 14 天以上实验指标多天累计报告查询时长减少 50%以上,且随实验时长增加提升。
- 指标、报告类型、实验版本是可枚举且预先知晓的
- 实验命中和人绑定,版本对比先划分出进入对照组和实验组的人,然后做指标比较
- 基于假设检验的置信水平计算需要按人粒度计算方差
- 现有的指标算子均可以先按人粒度计算(按....去重除外)
是否能够通过一次全量数据的扫描计算出人粒度的所有指标和实验版本?
挑战3:稳定性
总结
还原火山引擎 A/B 测试产品——DataTester 私有化部署实践经验的更多相关文章
- 华为云对Kubernetes在Serverless Container产品落地中的实践经验
华为云容器实例服务,它基于 Kubernetes 打造,对最终用户直接提供 K8S 的 API.正如前面所说,它最大的优点是用户可以围绕 K8S 直接定义运行应用. 这里值得一提是,我们采用了全物理机 ...
- 火山引擎MARS-APM Plus x 飞书 |降低线上OOM,提高App性能稳定性
通过使用火山引擎MARS-APM Plus的memory graph功能,飞书研发团队有效分析定位问题线上case多达30例,线上OOM率降低到了0.8‰,降幅达到60%.大幅提升了用户体验,为飞书的 ...
- 工作流引擎在vivo营销自动化中的应用实践 | 引擎篇03
作者:vivo 互联网服务器团队- Cheng Wangrong 本文是<vivo营销自动化技术解密>的第4篇文章,分析了在营销自动化业务引入工作流技术的背景和工作流引擎的介绍,同时介绍了 ...
- 史上最全存储引擎、索引使用及SQL优化的实践
史上最全存储引擎.索引使用及SQL优化的实践 1 MySQL的体系结构概述 2. 存储引擎 2.1 存储引擎概述 2.2 各种存储引擎特性 2.2.1 InnoDB 2.2.2 MyISAM 3. 优 ...
- 阿里巴巴如何进行测试提效 | 阿里巴巴DevOps实践指南
编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电 ...
- C#脚本引擎 CS-Script 之(三)——如何部署
本文不但介绍了CS-Script如何部署,还介绍了CS-Script的部署后面的原理,并用一个框图详细介绍了部署中的各种细节. 一.获取资源 1.从官网上下载编译好的csscript资源:cs-scr ...
- 使用C#动态生成Word文档/Excel文档的程序测试通过后,部署到IIS服务器上,不能正常使用的问题解决方案
使用C#动态生成Word文档/Excel文档的程序功能调试.测试通过后,部署到服务器上,不能正常使用的问题解决方案: 原因: 可能asp.net程序或iis访问excel组件时权限不够(Ps:Syst ...
- 学习笔记TF022:产品环境模型部署、Docker镜像、Bazel工作区、导出模型、服务器、客户端
产品环境模型部署,创建简单Web APP,用户上传图像,运行Inception模型,实现图像自动分类. 搭建TensorFlow服务开发环境.安装Docker,https://docs.docker. ...
- springboot测试、打包、部署
本文使用<springboot集成mybatis(一)>项目,依次介绍springboot测试.打包.部署. 大多数朋友是做后端的,也就是为其他系统或者前端UI提供Rest API服务. ...
- 心知天气数据API 产品的高并发实践
心知天气数据API 产品的高并发实践 心知天气作为国内领先的商业气象服务提供商,天气数据API 产品从公司创立以来就一直扮演着很重要的角色.2009 年API 产品初次上线,历经十年,我们不断用心迭代 ...
随机推荐
- NOIP2015 普及组 洛谷P2671 求和 (数学)
一道数学题...... 采用分组的思想,我们要统计答案的数对满足两个条件:同奇偶,同颜色.所以可以按这两个要求分组. 然后就是分组处理了,对于每组(有k个数),这里面的任意两对数都是满足条件的,可推出 ...
- for循环小九九乘法表
for(int i=1;i<=9;i++) { for(int j=1;j<=i;j++) { System.out.print(i+"*"+j+"=&quo ...
- java集合框架复习----(2)List
文章目录 三.List集合 listIterator:迭代器 List实现类 1.泛型类 2.泛型接口 三.List集合 特点 有序,打印输出的顺序和添加时的顺序一致(不会帮你自动排序) 有下标,可以 ...
- 彻底学会Selenium元素定位
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/63099961.html 你好,我是测试蔡坨坨. 最近收到不少初学UI自动化测试的小伙伴私信,对于元素的定位还是有些头疼,总 ...
- Codeforces Round #827 (Div. 4) A-G
比赛链接 A 题解 知识点:模拟. 时间复杂度 \(O(1)\) 空间复杂度 \(O(1)\) 代码 #include <bits/stdc++.h> #define ll long lo ...
- BI系统打包Docker镜像及部署的技术难度和实现
BI系统打包Docker镜像及部署的技术难度和实现 随着容器化技术盛行,Docker在前端领域也有着越来越广泛的应用:传统的前端部署方式需要我们将项目打包生成一系列的静态文件,然后上传到服务器,配置n ...
- 系统启动后bond配置不生效问题定位
背景描述 为了适配新功能,裸金属服务的磁盘镜像中做了如下修改: dracut添加network, iscsi模块 grub添加rd.iscsi.firmware=1参数 删除网卡配置文件/etc/sy ...
- Aspose.Words利用Word模板导出Word文档
今天工作中遇到了导出Word文档的问题,但是在搜索Aspose.Words 导出Word文档时发现网上的方法都是有头没尾的,有的只有一小段实例,让人看着摸不着头脑.借着https://www.cnbl ...
- Go语言核心36讲04
我们已经知道,环境变量GOPATH指向的是一个或多个工作区,每个工作区中都会有以代码包为基本组织形式的源码文件. 这里的源码文件又分为三种,即:命令源码文件.库源码文件和测试源码文件,它们都有着不同的 ...
- openssh编译rpm包(防火防盗防漏扫)
参考链接:https://www.jianshu.com/p/0882b0502960 openssh下载链接: wget https://cdn.openbsd.org/pub/OpenBSD/Op ...