【高时效通路】

2024-05-25 18:28
文章标签 通路 时效

本文主要是介绍【高时效通路】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 高时效通路

1.1 pathchdumper

实时数据拉取、实时数据处理、5分钟微批dump来加速时效性,具体来说:

  1. 实时数据拉取(Fetcher):基于Databus Fetcher基建,直接对接F0层实时拉取最新数据,保证该节点常态秒级延迟;
  2. 实时数据处理(AdTable):面向Databus数据格式,有效实践是类似于BS广告库服务,基于AdTable实时加载和用户UDF能力保证数据处理秒级延迟;
  3. 5分钟微批dump(Logger):新增Logger功能,通过记录增量数据触发的表结构变化,并经过数据格式转换形成下游所需增量文件;
  4. 数据固化(Uploader):复用Databus Uploader基建,将5分钟级Patch文件写入AFS。

说人话:

  • 定时执行heart_beat操作(可配置),对全局idea_map进行遍历(跟随ideatable更新),根据status对大宽表进行insert、remove

  • insert/remove的过程中执行logger,将大宽表数据存入buffer,buffer以idea_id为key,在dump固化到磁盘前,再次logger,新数据可覆盖旧数据

  • loader读增量文件至文件切换时dump buffer中数据,固化到磁盘

  • uploader上传文件至afs

    1.1.1 为何使用大宽表
    • 一条完整的广告增量是<winfo, idea>,而不是某个单一层级,这就决定了高时效通路中需要有可做层级join的能力。一条广告是基于idea层级从同unit下优选出一条winfo

    • ann建库时最终用户(数据使用方)拿到的是一条完整Join好的有效数据。这意味着,下游拿到的一条Patch数据Record中,包含了有效的Idea层级、Unit层级、Plan层级数据

    1.1.2 Heartbeat如何工作

    custom_heart_beat的具体逻辑:

    定期执行heart_beat操作(可配置),对全局idea_map进行遍历,根据其status对大宽表进行增删改

    主函数 custom_heart_beat(FeedBsTables* p_handle)

    遍历全局创意map, for (auto& [idea_id, status] : context._global_idea_map)

    然后判断idea对应的状态标记

    1. 状态为需要移除

    • 从宽表中删除该广告
    • 从全局的创意映射表中移除该创意

    2、状态为其他

    • 插入、更新、无变化,调用completeness_check方法进行检查, completeness_check(p_handle, status.first, idea_id);

    其中,completeness_check函数

    1. get_common_info读取广告基础信息(user_id、plan_id、unit_id、user_main_version、plan_main_version、unit_main_version、winfo_main_version)

    2. 校验USER、PLAN、UNIT、WINFO 四个层级的version,通过check_version函数进行主辅表verison状态判断:

      1. 辅表version不存在(辅表已下发删除增量),需要删除业务宽表VERSION_UNEQUAL_REMOVE

      2. 主辅表version相同,表示字段没有变动VERSION_EQUAL

      3. 主辅表version不相等, 需要更新业务宽表VERSION_UNEQUAL_UPDATE

    3. 判断主辅表状态

      1. 如果结果是VERSION_UNEQUAL_REMOVE

        1. 表示辅表join失败不做操作

        2. return 0;

      2. 如果结果是VERSION_UNEQUAL_UPDATE

        1. 如果在宽表中的一定不是新广告, 仅更新version

        2. 1. winfo优选choose_best_winfo_id

          1. 优选条件 target_type == 32 && intent_type == 16 && intent_name_id == 999999, 表示智能定向广告

          2. 不符合则随机抽一条

        3. 2. 业务宽表字段填充fill_wide_idea_tuple

        4. 3. 多样性控制winfo_customer_control

          1. get_freq, 使用map实现频率计数,并设定key的过期时间

        5. 4. 新广告插入到业务宽表中 p_handle->wide_idea_table()->insert(tuple);

        6. 5. version更新update_version

    dump服务中,dump的框架需要能够实现周期性 dump base,patch数据的能力,以及根据业务需求可以根据定期(按照处理条数或时间间隔)触发提条heartbeat消息的能力,这样业务可以根据 heartbeat 消息来实现一些特定的业务逻辑。

    那么 trigger 应该由谁来触发呢?

    • 对于业务需求的 heartbeat 而言,则需要单独增量一个条数和时间的计数器,以便在到达用户配置的条件时,生成一条heartbeat数据,该逻辑在 loader 中实现也比较合理。

    综上,需要在 loader 中增加 trigger 的能力,来 cover 上述场景。

    trigger 只需要在加载增量时进行触发即可(应该会有返回值,告诉上游,什么时候可以开始启动服务了)

    1.1.3 Logger是如何实现的

    对于patch 数据,我们是需要记录下对 table 的修改,相当于记录一个 log。 log则是以5分钟的粒度(和增量文件的粒度对接)进行组织。

    增量数据到来后,会对两类Table 进行修改: MemDataTable 和 IndexTable,因此我们只需要对这两类 Table 的 modify接口进行封装,在数据更新时,将数据同时也更新到patch logger 中,就可以实现对table的修改记录。

    • MemDataTable的 modify 接口包括:

      • insert(tuple)

      • remove(tuple)

    • IndexTable 的 modify接口包括:

      • insert(key, tuple)

      • remove(key)

    为了保证数据记录Patch Logger的性能,需要在内部为每个需要 dump 的table 配置一个buffer(buffer 大小可配,不同 table可以配不同的 buffer size)。当 buffer满时,可以自动 spill 到本地磁盘。在 trigger patch dump 时,会将 buffer全部 flush 到本地磁盘。因为 Loader 在处理增量时是单线程的,所以当 Loader 触发 dump 时,上一条数据已经被处理完,不会有数据丢失的问题。

    Buffer 用HashMap来实现,这样,对于同一个 key 对应的数据,我们可以只保留最新的一个修改,以实现一定程度的 compaction。注意:这里如果一次 patch数据量过多,可能生成多轮 buffer,那么最终的dump 文件中还是可能造成数据的重复的。

    1.1.4 patchdump何时工作

    5分钟增量文件读完后开始dump

    • 我们希望 patch的粒度可以和databus 的增量文件对齐,那么loader 来触发 adtable 的 dump 是一个很直接的想法。当loader可以识别到增量文件的切换,当文件发生切换时,向 PatchLog 发送一次 dump 请求,PatchLog将本次Patch的数据 flush到本地目录。

    • 对于base dump,为了可以和 patch 的时间对齐,同样也使用增量文件的切换来触发 base 数据的 dump,即,当前一个5分钟的增量文件处理完成后,此时满足需要 dump 的周期,则触发一次table表的dump到本地目录。

1.1.3 不同表的版本同步问题

CDC(Change Data Capture)数据同步:

  • https://en.wikipedia.org/wiki/Change_data_capture

  • Change Data Capture (CDC): The Complete Introduction | Confluent

基准:ETL

独立业务宽表的方案,将主表和基于主表的业务宽表独立。

[流程图]

如图所示,在这种方案中,我们一共有三种表:

  1. 主表:IdeaTable。该表包含所有主表的业务字段,此外还需要存储相关Right Join辅表的数据版本version。

  2. 辅表:Right Join的业务表,如UnitTable,PlanTable。该表包含辅表自身的业务字段,此外还包含没调记录的数据version。

  3. 业务大宽表:业务大宽表为最终的业务方也需要的物理实体宽表,该表对接Logger,用于产出最终分片,其上挂载了业务方所需要的所有主表和辅表Field。

1.2 processor

1.3 xct

1.4 indexplus

这篇关于【高时效通路】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002279

相关文章

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

图像处理---二义性、通路长度、Dm距离的概念

---------------------------------------------------------------------------------------------------------————————————----— 今天终将成为我们回不去的昨天!想做就做,就是现在! ----------------------------------

快递时效新视角:‌批量分析派件与签收策略

在快递行业日益竞争的今天,‌时效成为了衡量快递服务质量的重要指标之一。‌对于商家和消费者而言,‌了解快递从到达最后站点到派件以及签收的时效,‌对于优化物流流程、‌提升客户体验具有重要意义。‌本文将介绍如何利用快递批量查询高手软件,‌批量分析快递到最站后的派件时效与签收时效,‌为快递时效管理提供新的策略与思路。 下面今天我们先下这个表格里面数据是如何分析出来,表格上有派件前、派件后,总时效,签收时

科研绘图系列:R语言富集火山图和通路图(volcano plot pathway)

介绍 火山图是一种用于可视化基因表达差异的分析工具,它通过二维坐标系展示基因的表达量变化和统计显著性。该图谱的x轴表示基因表达的对数变化,而y轴表示其统计显著性。利用火山图,研究者能够快速识别出在不同条件下显著差异表达的基因。 随后,通过KEGG数据库提供的通路图,研究者可以进一步分析这些差异表达基因在生物学通路中的富集情况。KEGG数据库是一个包含丰富基因和蛋白质信息的资源,涵盖了代谢、

科研绘图系列:R语言富集通路棒棒图(lollipop plot)

介绍 在进行基因本体(Gene Ontology, GO)富集分析的结果可视化时,我们采用了棒棒图(lollipop Chart)作为展示手段。在此图表中,X轴展示的是负对数转换后的FDR(False Discovery Rate)值,即log10FDR,用于表示统计显著性的大小。每个点在X轴上的位置对应了其FDR值的大小,而Y轴通常用来表示富集到的GO术语或通路。通过这种图形表示,我们可以

hdu((1116))欧拉回路和通路。。

题目大意:给你n个单词,要你判断这些单词能不能首尾相连。 把每个单词的首尾字母有一条有向边相连,记录每个字母的入度和出度把每两个能连的单词用一条有向边边相连,既是要判断该有向图图是否有欧拉通路, 至于欧拉回路和欧拉通路的判定可以总结为如下: 1)所有的点联通 2)欧拉回路中所有点的入度和出度一样。 3)欧拉通路中终点的入度 - 出度 = 1,起点的 初度 - 入度 = 1, 其他的所有点入度

hdu 1116 Play on Words 并查集+欧拉通路

本题的题意就是拼接单词,只要单词的首个字母与另一个单词的末字母相同他们就能拼接在一起; 最后若能把所有的单词拼接在一起(可以形成一个圈)就可以了; 所以首先这些首末字母得连通,其次若形成了一个欧拉通路即形成了一个环,则所有初度和入度都相等; 如果形成了一条链,则链的第一个和最后一个字母的入度和初度的值差一,链中间字母的入度和初度都相等;   #include"stdio.h" #incl

KEGG 下载 Pathway 通路数据

进入KEGG物种列表,网址:https://www.kegg.jp/kegg/catalog/org_list.html 这里以小鼠为例,点击Ctrl+F查找物种小鼠的拉丁名Mus musculus 这里也可以用mouse来搜索,不过可以看到在kegg中含有三种鼠的信息。为了信息准确,最好使用拉丁名作为搜索条件。 点击Brite hierarchy 进入KEGG Ortholo

Android Q - 音频通路调试

对于当前模块不是很清楚,刚好有个项目这方面有点问题,根据展锐支持文档一步步检查就可以了。首先得先弄清楚硬件具体是怎么连接的,比如文档提到的案例:sprd codec speaker output 连接外部 PA。 耳机接的是什么,speaker接的是什么,receive接的是什么。 本文可能涉及到的文件路径信息参考如下:  kernel/arch/<arch name>/boot

cpu-tlb-缓存-窗口通路

平台介绍: mips架构4核cpu 当cpu要访问物理内存时,对于tlb,缓存,窗口,这个设置有什么先后顺序吗? 先说一下每个部件的主要作用: tlb    : 是存储的表项,记录虚拟地址到物理地址的转换,没有数据 缓存: 存储的是数据,加速cpu取数据时的速度 窗口:主要是对转后的物理地址进行一个路由功能,决定了这个地址能访问到什么地方去。 过程: cpu初始化完成后,肯定