链路1:终端mq ---> starrocks(大数据)-->mq-->过计费服务(生成revenue信息)-->mq-->落starrocks
链路2:终端mq ---> holo(我们自己处理(无revenue信息))
//
AdPaymentBillingService计费服务:
消息队列offset位置,和计费的mysql余额等表做成事务保证消息不丢失,不重复的话id打到对应实例去,内存去重和redis去重
//
AdFastLinkService服务:
定时任务定时从mysql表拉数据写入缓存
接口:
1、通过country从缓存获取所有快链广告信息
2、for循环 decode出素材
3、生成clickid(里面带adid等信息,上报后可以归因)
4、缓存中存一份short clickid 到 long clickid的映射
5、通过clickid和素材的clickurl生成深度事件url
6、返回处理好的下发素材和深度事件url等
AdBrandIndex服务:
通过country、scene、revenuetype召回n个,4个入参,数据在一个syncMap中。有个定时任务,从mysql表拉取品牌且非快链数据后,再通过开始结束时间过滤单子,按country、scene、revenuetype生成索引后放入syncMap中,有排序逻辑,按品牌广告开始时间顺序排,这是它初始化做的,然后监听事件:定时事件到时同步,版本号被更新时同步。
AdBrandProcesser服务:
有个接口,支持快链的批量上单和下线:如果是上单,校验账户和钱包,正常后插入(初始状态为unfrozen和enable),若是关闭订单就disable,如果是上单就插入到一个mysql表中t_ad_brand_order_item这张表,是专门做冻结相关的事情
一、冻结定时任务
拉取所有账户的所有未冻结/冻结失败/冻结失败因为账户预算/冻结中的单子,冻结成功的不冻了,冻结中的也是,拉取账户可用余额,开始冻结,如果不行,就挑几个小的单子冻结,完了更新状态。
二、扣冻结费、解冻定时任务
定时拉closed的ad进行解冻,投放时间未到的都能进行解冻,再看之前是不是冻结状态,是就解冻;定时拉deliverying的ad进行扣费,先看看扣费没有(生成到今天为止的所有扣费记录和实际已经扣费的记录做比较),因为cpt是每天扣一次,调用AdPaymentBillingService扣费。
三、定时更新品牌广告状态到订单表
payment的冻结分为 : 冻结未知/冻结失败/冻结中/冻结成功,获取订单在payment的状态,用它更新ad的状态。
//
AdBoolIndex服务:
构建过程:
1、通过原子变量保证只有一个构建任务在执行
2、mysql拉取投放中的ad
3、两层索引构建
ad1,ad2,ad3,ad4定向条件为a and b, c and d and e, a and b ,f
构建conjunction,把定向条件完全相同的作为一个conjunction_id,如conjunction1对应ad1和ad3,conjunction2对应ad2,conjunction的size为属于的个数(不属于不算),当一个用户信息来时,如果用户只有2个标签,那么size=3的广告都不会被返回,
size 条件 属于的conjunctionid
1 hh=2 1
2 xx=3 2
hh=2 3
3 hh=2 4,5
xx=3 4,5,6
tt=4 4
yy=7 4,5,6
直接从第一级的布尔索引去拉取数据(用match函数),获取conjunctionid,再从第二层索引去取具体的ad数组,第一次全量构建,增量构建:定时时间到了或者版本号更新了都会触发。如果用户是两个特征,k=2看能命中哪些(感觉就是多个满足的取交集),k=1看能命中哪些,然后一起返回对应的ad。
///
AdRecallProxy服务: todo
AdRankProxy服务:todo
广告系统代码阅读笔记
于 2024-09-23 16:10:13 首次发布