1.      背景介绍

策略开发人员在完成策略之后,在全流量上线之前要评估新的策略的优劣,常用的评估方法是A-B测试,做法是在全流量中抽样出两份小流量,分别走新策略分支和旧策略分支,通过对比这两份流量下的各指标的差异,我们可以评估出新策略的优劣,进而决定新策略是否全流量。我们把抽样的过程分为流量切分和流量筛选两个步骤。流量切分的逻辑较为复杂,包含多种切分类型和多层嵌套,另外为了保证灵活性,层的组合应该是任意的。

为了便于流量管理,我们需要将这个过程平台化,这样就需要找到一种形象化的表现方式,将多层流量切分这个过程表现出来,显然这种需求下,简单的输入框、下拉框等控件是不能满足需求的,这就需要构建出可视化的多层流量切分功能,使流量切分这个复杂的动作变得低学习成本、便于理解。

图1.1 可视化流量切分示意图

上图是多层流量切分的一个效果假象图,为了便于理解和管理,我们将多层流量切分过程中使用的到的元素划分为三种:水平层、垂直层、抽样节点这三个元素,为了方便使用,我们会将其封装为基本的控件,供用户直接拖拽使用,下面我们介绍一下各个元素的含义,以方便下文的直接使用。

水平层:水平层是指不进行任何流量的切分的层,它是抽样节点以及子层的承载者,如上面的2、3、4号层。在其内部可以建立子水平层、子垂直层和抽样节点,但是水平层中不能即含有子层又含有抽样节点,不能既含有水平层又含有垂直层。

垂直层:垂直层是用来切分流量的,它将父层的流量切分,变成多个子流量层,这些被切分出来的流量层内部可以采用不同的流量切分类型。垂直层中不能直接包含抽样节点,必须在其内部建立水平层,才能建立抽样节点,在其内部不能直接包含子垂直层,必须建立水平层,例如,图1.1中的5、6、9、10、11号层。

抽样节点:抽样节点是流量切分的流量块单位,每个抽样节点对应着一个流量区间和一个抽样id,抽样id是自增的,且不能修改,同时抽样节点上面可以配置condition,condition的作用就是我们上文提到的流量筛选功能。

2.      架构设计

可视化多层流量切分采用的Flex技术实现,Flex 是一个高效、免费的开源框架,可用于构建具有表现力的 Web 应用程序,这些应用程序利用 Adobe Flash Player和 Adobe AIR, 运行时跨浏览器、桌面和操作系统实现一致的部署。可以通过智能编码、交互式遍历调试以及可视设计用户界面布局等功能加快开发。

可视化多层流量切分功能采用MVC模式实现,其模块结构如下图所示,数据管理中心模块的功能包括数据模型的构建、通过HTTP交互模块与服务端交互数据、算法的封装;逻辑控制模块是数据管理中心与展现模块之间沟通的桥梁,它可以分派用户的请求并选择恰当的展现方式以用于显示,同时它也可以解释用户的操作并将它们映射到数据管理中心模块,数据管理中心模块予以计算。

图1.2 可视化流量切分架构设计

3.      关键模块实现介绍

3.1.  数据管理中心模块设计

上文介绍的多层流量切分功能中用到的基本元素——水平层、垂直层、抽样节点在数据管理中心模块中都建立了相应的数据模型,当初始化程序的时候,数据管理中心模块通过HTTP交互模块与服务端交互获取初始化数据,并将数据填充至基本的数据模型。

那么这些基本元素的数据模型如何实现呢?我们可以从这些元素的特性着手分析,如图1.1所示,整个可视化界面中,将层分为垂直层和水平层,垂直层是如5、6号可以将完整层分割开的层,水平层是如2、3、4号占满父层的层,可以抽象层和数据节点为树结构,可以看作是一种不完全的红黑树,注意这里的红黑树是一种不完全符合规范的红黑树,我们可以将水平层看作为黑色节点,垂直层看作为红色节点,数据节点看作为叶子节点,创建树的时候,我们自动将不包含的抽样节点的空层去掉,那么从图1.2结构就可以转化为图1.3的结构。

图1.3 三种元素在数据管理中心的数据结构

有了上面的数据结构模型,我们就可以在此基础上封装一些常用的功能函数了,我们下面列举几个封装的计算的例子:

计算两个抽样节点是否会复用流量:

两个抽样节点复用流量是指一次请求同时命中了这两个抽样节点,从图1.4上面来看,如果两个抽样节点复用流量,我们形象的表示为,从垂直方向上划一条线,我们约定每一个子层中我们只能够经过一个抽样节点,在这种情况下,每条线可以经过多个抽样节点,也可以不经过任何抽样节点,如果两个抽样节点同时被穿中,就表示这两个抽样节点可能会复用流量。

图1.3 流量复用示意图

判断两个抽样节点是否可能会同时命中比较麻烦,我们可以换一下思维,为什么会有两个节点不能被同时命中,比较容易想到的就是他们位于同一个父层中,这种情况下,两个抽样节点是不可能同时命中的了,还有一种情况就是他们位于不同的父层中也有可能不能同时被命中,究其原因主要是因为他们被垂直层隔开,例如,5、6两个层中的数据节点是不可能同时划中的。按照上面这个思路,我们可以编程序实现判断过程,逻辑如下:

i.              判断这两个节点是否位于同一个父层节点中

ii.              追溯叶子节点的父节点,一直追溯到根节点,获取到其中红色节点,判断红色节点中是否有兄弟节点。比如,D1->7->5->2->1 红色节点是5, D3->8->6->2->1,红色节点是6,判断红色节点是否是兄弟节点,判断方法为是否父节点相同。

计算某层中是否可以添加其他元素

有了上面的数据结构,判断某层中是否可以添加其他元素的实现思路比较简单,按照我们之前的约定,三种元素在某一个父层中是不能共存的,例如,不能在同一个层中即包含水平层又包含垂直层,同时也不能在一个父层中即包含层又包含抽样节点,因此,这里我们的算法实现逻辑就是,获取到该父层中的所有的元素,判读其类别是否唯一即可。

计算任意两个抽样节点的相互影响概率

在多层流量切分的架构中,有机会流量复用的抽样节点都是有一定的相互影响的概率,为了方便用户抉择流量分层以及抽样节点的排放位置,我们需要计算出各个抽样节点之间的相互影响概率,计算的数据结果也是基于上面介绍的结构,算法步骤如下:

i.              追溯这两个抽样节点的父层路径,一直追溯到共同的父层为止,例如D1可以追溯为D1->7->5->2->1,D8可以追溯为D8->12->9->4->1,这样我们就追溯到了他们的共同的父层1,这里我们首先复用一下上面计算两个抽样节点是否会复用流量的算法,计算一下这两个抽样节点是否可能复用流量。如果没有机会复用流量,则直接返回0%。

ii.              如果这两个抽样节点有机会复用流量,按照追溯的父层路径计算相互影响概率,如上面的例子,D1和D8的相互影响概率为:

(D1的流量百分比*7号层的百分比*5号层的百分比*2号层的百分比)*(D8的流量百分比*12号层的百分比*9号层的百分比*4号层的百分比)

计算层或者抽样节点的插入点

插入点判断也是基于上面这个数据结构算法封装的算法,它的实现思想是遍历需要插入的父层中的所有的子元素,依据上面的约定,同一父层下的元素类型是唯一的,因此,我们只需要遍历一下各元素之间缝隙,如果可以空间大小可以插入某一元素,则我们可以将该元素插入到指定的位置。

上面我们举例列举了4种数据管理中心模块中封装的算法,数据管理中心中,根据上面的数据结构,我们还可以封装出其他的数据基础算法,供逻辑控制模块使用。

3.2.  展现模块的设计

展现模块封装了展现绘图的基本方法,实现的思想是从小粒度到整体的渲染过程,首先,我们实现了三种基本元素的展现样式,例如,垂直层和水平层是统一的展现样式,它的基本绘图单元是矩形,垂直层和水平层为了做区分,它们的填充色是不一样的,抽样节点的基本绘图单元是图片,抽样节点再每种不同的状态下,展现的图片是不一样的。

展现模块接收的绘图数据格式是上面介绍的树状结构,因此,展现界面渲染其实就是一个树的遍历的过程,我们采用的遍历方式是前序遍历,例如,如果传如的数据格式为图1.2的形式,那么前序遍历的结果就是:

1->2->5->7->D1->D2->6->8->D3->D4->3->D5->D6->D7->4->9->12->D8->D9->15->D15->10->13->D10->D11->16->D16->11->14->D12->D13->D14

1.动态渲染过程中的元素大小自动调节问题

渲染过程会有一个问题,这是从外向内的一种渲染方式,我们必然会先固定一个最外层的高度和宽度,那么这样就会导致初始设定的高度或宽度过小,放不下内部的各个元素,针对这个问题,首先为了处理简单,我们可以将每层的高度固定下来,宽度是可变的,基于这种前提,我们处理上面这个问题的方案有二,一种是预先计算好渲染所需要的宽度,另一种是方法是绘图过程中动态的调整最外层的宽度,如果数据量比较大的情况下,选用方案一的效率较高,如果数据量不大,这两种方案的差异是不大的,两种渲染方式的实现逻辑如下图所示。

图1.4 动态渲染过程中的元素大小自动调节方案,预先计算结果(左),渲染过程中自动调节(右)

2.控件拖拽与双击的实现

控件的拖拽与双击实现比较简单,主要通过事件的方式来实现,预先在绘图面板上面增加了onCanvasMouseDown(鼠标按下),onCanvasMouseMove(鼠标移动),onIconMouseDown(控件鼠标按下),onIconDoubleClick(控件双击)等事件,在不同的情况下展现的样式做出调整即可。

by randy_yao

数据库 流量切分_一种基于flex的可视化多层流量切分界面的实现相关推荐

  1. 论文研读-AI4VIS-可视化推荐-VizML: 一种基于机器学习的可视化推荐方法

    VizML: 一种基于机器学习的可视化推荐方法 1 论文概述 1.1 摘要 1.2 引言 2 问题陈述 3 相关工作 3.1 基于规则的可视化推荐系统 3.2 基于机器学习的可视化推荐系统 4 数据 ...

  2. python小波分析法检测火焰_一种基于小波分析的网络流量异常检测方法

    一种基于小波分析的网络流量异常检测方法 杜臻 ; 马立鹏 ; 孙国梓 [期刊名称] <计算机科学> [年 ( 卷 ), 期] 2019(046)008 [摘要] 对大量网络流量数据进行高质 ...

  3. teradata查看正在运行的进程_一种基于greenplum数据库的状态检查及性能监控工具.doc...

    一种基于greenplum数据库的状态检查及性能监控工具 开发中心 导师责任制结业论文 题目:一种基于GreenPlum数据库的状态检查及性能监控工具 学员姓名: 导 师: 部 门: 非功能集成测试处 ...

  4. mysql数据库加密设备_一种基于MySQL数据库加密方法与流程

    本发明涉及数据库加密技术技术领域,具体的讲涉及一种基于MySQL数据库加密方法. 背景技术: 聚通达DBSecurity是一款基于透明加密技术的数据防泄漏产品,该产品能够实现对数据库中的敏感数据加密存 ...

  5. Mysql出租车轨迹的分析_一种基于出租车轨迹数据的交通出行共现现象的可视化分析方法与流程...

    本发明涉及交通数据可视化领域,尤其涉及一种基于出租车轨迹数据的交通出行共现现象的可视化分析方法. 背景技术: :城市中人类移动规律中的共现现象是指来自两个区域的人们在同一个时间段内访问同一个城市区域. ...

  6. 服务器基线加固脚本_一种基于WebLogic的安全基线加固方法与流程

    本发明涉及一种安全基线加固方法,尤其涉及一种基于weblogic的安全基线加固方法. 背景技术: weblogic是一个基于javaee架构的中间件,用于开发.集成.部署和管理大型分布式web应用.网 ...

  7. gis快速接地开关_一种基于扫描电镜和能谱仪的GIS放电异物来源分析方法

    扫描电镜(SEM)及其附带的能谱仪(EDS)可以用来进行金属的组织形貌观察和微区成分分析.扫描电镜具有景深大.图像立体等优点,图像放大倍数范围为8~300000倍,试验人员可以通过调节扫描电镜的相关参 ...

  8. java头像交互式差分演变_一种基于交互式差分进化计算的用户知识需求获取方法与流程...

    本发明属于知识服务领域,具体涉及一种基于交互式差分进化计算的用户知识需求获取方法. 背景技术: 在多数企业拥有庞大的知识数量和优质的知识资源的情况下,如何利用推送系统将知识主动推送给设计人员以提高企业 ...

  9. html webservice数据交互_一种基于WebService的数据交换方法

    一种基于WebService的数据交换方法 [专利摘要]本发明涉及数据交换[技术领域],特别涉及一种基于WebService的数据交换方法.本发明是以Web服务为依托,通过定义参数的方式进行传入内容和 ...

最新文章

  1. 关于成功的因素-----谨记
  2. 从经济学与市场机制中,AI可以学到什么?| 美国三院院士迈克尔乔丹教授
  3. spark Tachyon
  4. perl随机打乱数组
  5. window 任务管理器
  6. 国际版Azure搭建Windows多种类型***_一.简介及安装服务
  7. 滴滴滴,测试工程师简历模板分享一波
  8. android 更新apk 应用为安装,应用未安装!从Android Studio构建安装APK时出错 - java
  9. python直方图显示图例_python-Matplotlib,图例未出现在直方图中
  10. 安卓股票悬浮窗_股票悬浮窗的安卓应用
  11. 【考研日记1】:看到2016年数学考的如此之难后
  12. 正交试验案例分析全步骤
  13. 智能展示技术在淘宝封面图的应用
  14. 安卓zip解压软件_纯C语言编写的开源免费解压压缩软件——拥有极致性能的 7-zip...
  15. 10激活网页被劫持_新手学习SEO需掌握的10大SEO技能
  16. python 怎么实现3d 动画_python – 使用matplotlib的3D动画
  17. Sonatype Nexus Repository Manager
  18. 电脑计算机界面打开后无法缩小,技术编辑演示win10系统iE网页界面大小无法缩放的办法...
  19. StarRocks安装及性能测试 - 好记性不如烂笔头
  20. SpringBoot单元测试之mock静态方法

热门文章

  1. lawson算法_案例研究:Lawson合并后整合架构的新方法
  2. ChatGPT到底是个啥 - 它甚至会和狗说话
  3. hackbar黑客插件
  4. 2014 年终总结:即使艰难,也要始终怀揣梦想
  5. HELLO WORLD! 但是javac找不到文件?
  6. 计算机科学系职业规划,计算机专业的职业生涯规划书
  7. 出现警告:warning Replace `‘xxx‘` with `“xxx“` prettier/prettier,关闭Prettier代码格式化工具
  8. 【贪玩巴斯】大一暑假自学Linux笔记记录Day4 //纯新手入门基于ubantu
  9. 名悦集团:女司机第一辆车买手动挡还是自动挡?
  10. JDK里的“SPI”是什么意思