广告业务系统 之 框架沉淀 —— “数据消费型服务框架”

news2024/11/18 14:50:02

文章目录

    • 广告业务系统 之 框架沉淀 —— “数据消费型服务框架”
      • 数据消费型服务统一框架
        • 主流程
        • Plugin 构建

广告业务系统 之 框架沉淀 —— “数据消费型服务框架”

数据消费型服务统一框架

由于 ADX 系统中,大量数据以流式涌动,整个链路中出现了 “多处流转都需要以消费中间件数据的模式完成“ 的奇观。为了提升代码的复用性、及可扩展性,我们将 ”数据消费“ 逻辑做抽象隔离成统一框架,业务逻辑以 “组件” 的形式进行嵌入。

在具体的实现中,需要用到的就是 Goland 中的 Plugin 功能。

主流程

我们将消费中间件数据的逻辑 确认后,在处理数据的时候,以 抽象函数做接口 实现。

在这里插入图片描述
如图,我们把消费数据放置于 channel 中,在 抽象函数 Deal() 中做数据处理。各个业务服务只需实现 Deal() 函数 以组件形式构建就可以直接复用 公共库A’ 。

Plugin 构建

在业务服务 A\B\C 中,我们需要实现对应的 处理函数 Deal()。

在这里插入图片描述
在 服务 A 中,除了 消费处理 Deal () 外,还可以覆盖实现 主流程中的 Init() 函数,做一切附带的其他功能实现。

#!/bin/bash

# build
export GOPROXY=https://goproxy.cn,direct
export GONOPROXY=*XXXX*
export GOINSECURE=*XXXX*

mkdir -p target/bin

git config --global url."ssh://git@XXXX:PPPP".insteadOf "https://XXXX"
GOBIN=`pwd`/bin go install XXXX/A'
mv bin/A' bin/A'_consumer

go build -buildmode=plugin -o bin/A.so  ./main
if [[ $? -eq 0 ]]; then
    echo "succeed to build."
else
    echo "fail to build!!!"
fi

实际构建中,我们将 公共库A’ 进行构建后,在把 业务A 以组件模式进行构建。这时构建路径中会存在两个文件,一个为 公共库A’ 的编译文件,一个以 .so 结尾的组件文件。

此时,执行 主流程/公共库A’ 的启动命令即可。

在 ADX 系统中,涵盖多条数据链路,且流转经历的微服务繁多。总结归类,在最大程度提升服务的可维护性,健壮性的同时,降低人智、资源成本 也是我们追寻的目标之一。


见后续文章!

推荐阅读:
暨 广告、推荐、搜索 三大顶级复杂业务之 “广告业务系统详叙”
广告业务系统 之 承前启后 —— “消息中心”
广告业务系统 之 数据中转站 —— “日志中心-实时服务监控”
广告业务系统 之 数据桥梁 —— “日志中心-曝光数据流转结算”
广告业务系统 之 核心通道 —— “日志中心-s2s监测上报”
广告业务系统 之 辅助决策 —— “ AB 实验平台”


三行代码搞定 —— 反转链表…
Kafka 高吞吐、高性能核心技术及最佳应用场景…
HTTPS 如何保证数据传输安全 —— TLS 协议…
五分钟搭建基于 Prometheus + Grafana 实时监控系统…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MMCME4_ADV与PLL4_ADV原语

MMCM与PLL ​ UltraScale器件中时钟管理模块(CMT)包含mixed-mode clock manager (MMCM) 和phase-locked loops (PLLs) 。PLL主要用来生成I/O时钟,也包含一部分MMCM的功能。 ​ 其中MMCM输出时钟相位调整语VCO频率相关。 MMCME4_ADV原语 ​ MMCM原语包含MMCME3_B…

2023年最新版Java入门教程,一套很哇塞的Java基础课

所谓天道好轮回,鬼畜饶过谁。最近B站学习区也沦陷了,由此诞生出了一种让人闻所未闻的冷概念:鬼畜教学法!这种奇怪的组合让人匪夷所思,但架不住网友们的推荐!!!爱嘤嘤嘤斯坦:早看到这些视频,妈妈就再也不用担…

东南亚跨境电商迅猛发展,商机转瞬即逝!

2022年中国跨境电商进入了转型调整期,前几年高歌猛进的发展势头似乎有所减弱。回顾2022年,跨境电商卖家们都表示心情复杂,过去一年,卖家们经历许多大事件,比如9月份拼多多强势推出Temu奔向北美市场,10月份字…

Linux权限和粘滞位

目录 一.权限概念 二.用户分类 三.文件权限 1.执行操作的人的分类 2.文件类型和访问权限(事物属性) 03.文件权限值的表示方法 四.目录权限与粘滞位 一.权限概念 操作系统用来限制对资源访问的机制,一件事情是否可以被“谁”做&#x…

【观察】浪潮信息龙蜥联合实验室:打造下一代操作系统,筑牢基础软件创新根基...

毫无疑问,在当今世界日益复杂的竞争环境下,随着中国企业数字化转型的加速和自主创新进程的加快,再加上开源和云计算已成为行业发展的大趋势之下,如何在“变局中开新局”?如何解决中国在核心基础软件领域面临的各种挑战…

Java语法七:文件操作---IO

目录 1.File概述 1.1:File概述的方法 2:文件内容的读写 2.1:字节流 2.1.1:读--InputStream 2.1.2:写---OutputStream 2.2:字符 前言: 这一篇我们将讲文件操作的相关方法,以及…

详解Reflect:Reflect和Object的异同,Reflect的一些内置方法以及方法注意点

Reflect Reflect拥有Object对象的一些内部方法,某些方法会同时在Object对象和Reflect对象上部署,也就是说Object对象上存在的方法,通过Reflect也可以访问到。 单论Reflect的话,可以这么理解,Reflect就是继承了Object的…

C语言学习前序 - VS Code安装

要想学习一门编程语言,首先要有一个好的编程工具,推荐大家使用VS Code。 截止到现在,是我最喜欢的代码编辑工具。 工具下载。 官网地址:https://code.visualstudio.com/ 开始下载了,但是很慢很慢。 下载很慢可以直…

【Leetcode面试常见题目题解】4. 盛最多水的容器

题目描述 本文是LC第11题:盛最多水的容器。 题目描述如下: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多…

.Net 线程安全 (细粒度锁定、无锁机制以及lock)

.Net 线程安全最省事的lock关键字线程安全对象测试环境例子使用Queue源码和结果运行效果使用ConcurrentQueue的源码和结果运行效果volatile关键字易失性内存和非易失性内存的区别易失性内存:非易失性内存:volatile 关键字可应用于以下类型的字段&#xf…

<C++>AVL数

文章目录1. AVL树的概念2. AVL树节点的定义3. AVL树的插入4. AVL树的旋转5. AVL树的验证6. AVL树的性能1. AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素&#xff0…

MySQL中alter命令知识

MySQL中alter命令知识 文章目录MySQL中alter命令知识(一) 删除、添加、修改字段1、删除表中的字段数据2、添加新字段指定字段插入位置3、修改字段类型和名称(二)、修改表名(三)、修改存储引擎创建copy_emp表,便于后面案…

Prompt Learning 简介

最近去参会,看到了大量关于Prompt相关的论文,或者说跟NLP NLU相关的新论文或多或少都使用到了Prompt learning的一些思想或者设置。由于本人主业不是是做NLP的,所以对NLP顶会的这一现象觉得很有意思,趁闲暇学习了一下Prompt learn…

对话 BitSail Contributor | 姚泽宇:新生火焰,未来亦可燎原

2022 年 10 月,字节跳动 BitSail 数据引擎正式开源。同期,社区推出 Contributor 激励计划第一期,目前已有 12 位开发者为 BitSail 社区做出贡献,成为了首批 BitSail Contributor。 江海的广阔是由每一滴水珠构成的,Bi…

【高阶数据结构】手撕哈希表(万字详解)

🌈欢迎来到数据结构专栏~~手撕哈希表 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句…

【jqgrid篇】jqgrid.setCell 改变单元格的值 改变单元格的样式设置单元格属性

setCellrowid,colname, data, class, propertiesjqGrid对象 改变单元格的值。rowid:当前行id;colname:列名称,也可以是列的位置索引,从0开始;data:改变单元格的内容,如果为空则不更 …

将GO、Pathway富集结果整合在一张高颜值圆圈图上

富集分析是生物医学论文中非常常见的一类分析,例如GO富集分析,Pathway富集分析等。其结果一般包括以下几个要素:1,名字(GO term或者KEGG description);2,该名字所包含的基因数目&…

400G数据中心短距离传输方案:400G QSFP-DD SR8光模块

随着更快、更高可靠性的网络需求增加,400G将是下一代骨干网升级和新建设的方向。400G光模块在构建400G网络系统中起着至关重要的作用。前面我们为大家介绍了短距离单模应用的400G QSFP-DD DR4光模块,本期文章,我们一起来了解一下短距离多模光…

自定义类型:结构体,枚举,联合(2)

TIPS 1. 类型的定义可以考虑放在头文件里头。 2. 一个汉字存储的时候占两个字节空间 3. 关于结构体变量初始化的一些细节 4. 关于结构体内存对齐的补充 1. 2. S1和S2类型的成员一模一样,但是S1和S2所占空间的大小有了一些区别。 3. 这两个结构体类型成员都…

【Linux】六、Linux 基础IO(一)|重谈文件|C语言文件操作|操作系统文件操作(系统文件I/O)|文件描述符

目录 一、重谈文件 二、C语言文件操作 2.1 重谈C语言文件操作 2.2 补充细节 三、操作系统文件操作(系统文件I/O) 3.1 文件相关系统调用:close 3.2 文件相关系统调用:open 3.2.1 open 的第二个参数 flags 3.2.2 open 的第…