有帮忙做阿里巴巴网站的吗/seo技术培训江门
作者 | 交易中台团队
导读
随着公司内容生态的蓬勃发展,内容产出方和流量提供方最关注的“收益结算”的工作,也就成为重中之重。本文基于内容分润结算业务为入口,介绍了实现过程中的重难点,比如千万级和百万级数据量下的技术选型和最终实现,满足了业务需求的同时,最终实现了高效,准确的资金结算,文章旨在抛砖引玉,希望能给读者带来思考和帮助。
全文5185字,预计阅读时间13分钟。
01 业务介绍
什么是内容分润平台呢?简单来说,百家号等平台负责内容的生产和引入,手百等渠道方负责内容的分发,凤巢等广告平台负责在此流量上进行变现。而分润平台,则是根据上述各方提供的数据,通过核心策略模型,赋予作者、媒体、小程序主和用户,合理的、差异化的、有竞争力的分润收益,以吸引更加优质的内容和流量的入驻和合作。通过这种多方相互协作模式,实现互惠共赢的目的。
1.1 三大功能点
针对上述的业务特点,结算系统需要包含三大功能,用于支撑内容分润业务的准确性、合规性、及时性。
功能一:结算模型
这是我们最关键的功能,它负责将出色的文章转化为作者的分润收益。该模型的输入数据包括数据中台生成的用户维度的日分润明细和日补贴明细,而输出则是每月的结算账单,这些账单会被发送到统一业务平台用于付款。在这个过程中,我们经历了一系列步骤,包括每日的计算、每月的总结、预提、计提和账单生成等,所有这些步骤都是按照不同的维度逐层计算和聚合的,最终实现了账单的付款。
功能二:C端内容交易平台
这个功能主要面向用户,旨在帮助作者及时查看他们的收益,并进一步激励他们的创作动力。作者只需登录平台,即可查看每日的预估收益、文章的分发情况、浏览量等数据,还可以查看每月实际的付款账单,提供发票等相关数据。
功能三:O端管理端平台
为了确保资金结算更加合规和准确,整个结算体系引入了运营管理和反作弊等不同角色。这些角色在管理端负责资金管控、发票审核、黑名单管理等各种操作,以确保整个过程的合规性。
1.2 名词解释
PALO:百度数据仓库,是基于开源ApacheDoris构建的企业级MPP云数据仓库,可有效地支持在线实时数据分析。
BNS(Baidu Naming Service):是指百度名字服务。BNS提供服务名称或服务组名称到服务所有运行实例的映射,你可以根据一个名字(服务名或服务组) 获取服务的信息,包括实例的主机名和IP、实例的运行状态、端口、负载、实例自定义配置标签以及其他实例自定义信息。用于满足服务交互中常见的资源定位、IP白名单维护、查询服务下的机器列表、负载均衡以及其他任何依赖于这些信息的开发、测试和运维需求。目前BNS已经在全百度各业务线中广泛使用,UB、RAL等框架的支持和各语言SDK也已经发布。
02 业务架构
2.1 架构分层介绍
图1是整个内容分润的业务架构。内容分润结算面向数据中台,业务方,用户(作者)和运营管理提供服务。
△图1.内容分润结算平台系统架构
2.2 关键汇总文件
对于数据中台,我们是直接下游,同时在整个内容分润流程的流程中,我们扮演的是最末端的角色。百家号、问一问、百度文库等业务会将作者的内容分发数据、广告贡献等给到数据中台,数据中台按照各种分润计算模型归一化数据结构,产出三份较为详细的明细文件,包括日分润明细,日内容分发明细,日补贴明细。
日分润明细:作者内容分发或流量贡献所获得的分润详情,明细中包括分润金额,文章分发渠道,父子账号等字段。
日补贴明细:基于运管管理的二次资金分配详情。
日内容分发明细:作者的内容分发贡献报表。
数据中台会将这些数据以离线文件的形式提供给我们,结算系统每日基于配置规则,进行离线计算,最终将数据进行降维汇总。后续每月月初,基于这些汇总数据,做二次汇聚产出用户收益账单。
2.3 服务提供方式
结算系统根据外部需求,提供多种接入方式。面对业务方,结算系统提供API、网页嵌入模式接入方式。若业务有其自建平台,可将结算系统提供的网页嵌入其平台内部,用于展示用户的收入信息或上传发票等。若无自建平台,也可API形式接入。新用户在业务侧申请入驻作者后,业务调用结算系统API完成用户注册,开通计费单元,维护财务信息等。后续作者在内容分润平台查看其收入,文章分发报表,重新维护财务信息等。若有重要变更或通知,系统通过站内信方式通知作者。
系统整体支持三种账号体系,面向作者提供两类百度常用账号登录方式,面向管理端提供内网账号登录方式,基于此账户体系做了灵活权限控制,不同用户登录管理端,看到的可操作菜单栏各不相同,避免出现越权操作。同时基于此账号体系,能灵活获取上下级,构建了自动化的审批流程。
结算系统的平稳、合规、高效运行离不开各类协同生态的合力支持。反作弊能力贯穿整个内容分润的始终,着力于打击黑产,识别作弊用户。OCR、发票平台为发票识别,发票鉴定提供了通用服务。财务的各类审核,业务的多维度监管则进一步为资金结算的合规安全保驾护航。各类角色、各个系统协同合作,促成了目前内容分润结算系统。
03 技术难点和细节
上文以整体的视角介绍了内容分润结算系统的架构设计,下面我们将枚举几种业务场景构建过程中的技术选型,来详细介绍该系统的技术落地。
3.1 千万级数据日度任务的技术选型
场景:每日上游会给我们产出明细数据,数据为细粒度,量级为大几千万级别,格式为AFS文件(离线文件),需要基于某些过滤规则和计算规则做二次汇聚,后续支持多维度查询,作者端展示报表。
3.1.1 DB批处理方案
最初任务是在物理机上通过sql批处理,任务串行执行,简单明了,同时成功同时失败。但随着数据量持续递增,串行执行可能面临着实效性问题。基于原始的DB思路,我们构建了基于DDBS(关系型分布式数据库系统)的解决方案,全部依赖于DB,因汇聚是基于用户维度,所以基于子账号uid计算shardingKey分表,过滤规则也落入库中,后续使用表之间连接过滤,相同分表中的同子用户数据汇聚。使用在线服务,按照分表规则,启动多线程执行任务,实时写入日汇总数据表。具体方案如图2。
△图2.基于DDBS的解决方案
3.1.2 离线计算
利用SPARK天然的分布式计算能力,采用离线计算方案,汇聚时使用SPARK计算。基于上游提供的离线文件,构建RDD1文件,后续基于一些过滤规则过滤数据和然后基于集合规则,使用reduceBykey聚合,产出新的RDD2文件。这个RDD2文件就是我们后续使用的日表数据。因有各类在线查询需求,需持久化到数据库中,又因产出的日表需支持各角色多维度查询,调研后采用PALO数据仓库,具体方案如图3所示。
△图3.基于SPARK+PALO+DB解决方案
对比两种方案后,我们最终选择方案二实施。方案二的优点比较突出:1.SPARK集群自带分布式计算能力,无需我们按照方案一方式自行实现分布式计算;2.数据存储于PALO,相比于传统的MYSQL,在大批量数据和多维度报表场景,PALO性能优势更加明显。3.方案一有一个最大也是我们最踩坑的性能问题,实时大批量写入DDBS数据库导致较高的主从延迟,影响了其他业务场景。
3.2 百万级数据的月度任务
场景:基于上述场景会产出月表,数据量大约在百万级别,遵循月度出账计算模型,产出最终的预提数据。日度任务和月度任务的最主要区别在于日度任务计算过程密集,月度任务过滤过程密集。
月度产出计提任务实际就是计算用户本月收入以及本月可结算的收入,可结算收入=以前累积未结算金额+本月收入。目前该任务输入的数据量相对较少,且以过滤为核心,因此此类任务未采用SPARK计算。而各类过滤规则与当前用户各种属性息息相关,因此任务围绕用户uid展开,采用以用户uid为底表,先通过各类策略过滤uid,后置再计算的方案。数据量虽然相对日度任务较少,但毕竟在百万级别,如果使用单一线程处理所有用户,速度会极其缓慢,所以必须拆分任务,使用并行计算的方式提升效率,而如何拆分任务,如何保障任务全部执行是月度任务模型需要考虑的核心问题。
3.2.1 幂等的分布式数据批处理框架master节点
我们设计了主从任务模型,用于支持上述任务拆分执行,主结点先置启动,用于数据备份、初始化出账任务,以及调度从节点。从结点则等待主结点启动子任务指令,启动后获取子任务执行。具体模型如下图4,5所示。
△图4.主节点生命周期
图5描述了主节点的生命周期,主节点收到出账指令后,优先做的是账户余额类表的数据备份,这个动作归因于我们月度任务的特殊性,月度任务产出的数据表在其他时间不会更新,即上个月出账结束后,账户余额类的相关表会在下一次出账完毕才更新。
备份表的环节非常重要:
1.是可以在月度任务结束后做数据总额验证工作;
2.是可以用于兜底,一旦月度任务产出数据异常,也可回退到备份数据,重新启动任务。
主节点任务的第二步则是确认出账任务的用户uid范围,我们系统为了既支持C端用户体系,也支持商家账号体系,重新设计了一套内部用户id,不论是用户账号还是商家账号的id均会唯一映射成一个内部uid,后文提到的该任务的uid均为内部uid。内部uid为自增id,因此查询数据库,即可获取到最大uid和最小uid,也就确定了我们本次任务的uid范围。在redis中设置两个key代表uid的最值。至此,出账任务的前置准备工作就完成了。主节点获取执行子任务配置的BNS,基于BNS解析出所有实例,发送子出账任务指令,子实例获取到指令后,启动N个线程执行任务,即假设有M个子实例,那最终就是M*N个线程同时执行任务。从主节点的任务可看出,该任务无其特殊性,即主节点实际和从结点是平等关系,任何实例都可成为主,也可成为从,这就为调度任务进一步提高了灵活性。
3.2.2 woker节点的任务流程
△图5.从节点生命周期
图5以上述实例中的一个线程作为示例,详细描述了线程启动后,执行的子任务的过程。首先获取目前的最大uid和最小uid,最大uid为主节点固定值,最小uid则是一个游标。若最小uid已经大于最大uid,则代表所有uid已经处理完毕,线程结束。若不满足上述条件,则继续执行任务,利用redis的incryBy指令,将最小uid向前移动N个数值,这N个uid就是本次子任务的执行范围。拿到uid后,先将uid变为N条任务批量落入Job表,并设置初始化状态。落库失败,引入报警机制。落库成功后,按照出账模型,启动过滤规则。所有被过滤的用户uid均批量写入job表,设置任务结束状态,并且标记过滤原因,便于后续运营查询。过滤规则执行完毕,剩余uid十不存一,此时我们利用sql计算本月用户结算金额。计算完毕,写入jobDB的临时产出表,设置job任务完结态,此时一轮子任务就执行完毕。线程继续重复执行上述过程,直至所有线程均结束,代表出账任务执行完毕。
3.2.3 出账确认任务
所有任务执行完毕后,主节点会收到出账任务确认指令。
△图6.出账确认任务
该任务的主要目的就是确认所有uid均执行完毕,无疏漏,具体如图6所示。上文提到,子任务执行时,都是先置落库job表的,确认任务的第一步:扫描job表,看是否有非完结态的任务,若有,则启动子任务,重新执行这批数据。确认任务第二步:获取job表中所有执行的uid数量和需要执行任务的uid数量,确认数量是否一致,若不一致,重新执行出账任务,任务基于uid和业务期间重入,已经被执行的任务会被跳过。多次兜底策略执行完毕后,数据总量校验一致后,会将临时月度产出数据写入正式DB,清理临时数据。之所以设置临时表:1.是为了数据校验工作,若数据校验异常,可快速清理该表,重新启动任务;2.若直接写入正式线上库,大量数据的并发写入会导致数据库的主从延迟,会影响其他线上实时业务场景。后置写入实现了另类的『读写分离』,任务过程中仅读正式表,任务完毕临时表往正式表写入数据。
04 总结
本文主要介绍了在构建结算系统过程中的几个技术重点和难点,而要维护整套系统的平稳运行,不仅有这些技术重点,也有看似微不足道但却环环相扣的细枝末节,保障每个环节不掉链子是运维工作的重要一环,后续我们将着力于提升运维效率,节省人力成本,向着运维自动化、智能化改造。另外目前的技术方案取决于我们的数据量级,未来业务蓬勃发展,业务架构也会持续迭代,期待我们向着更加完备的架构前进。
——END——
推荐阅读
小程序编译器性能优化之路
百度APP iOS端包体积50M优化实践(六)无用方法清理
基于异常上线场景的实时拦截与问题分发策略
极致优化 SSD 并行读调度
AI文本创作在百度App发文的实践
相关文章:

百度交易中台之内容分润结算系统架构浅析
作者 | 交易中台团队 导读 随着公司内容生态的蓬勃发展,内容产出方和流量提供方最关注的“收益结算”的工作,也就成为重中之重。本文基于内容分润结算业务为入口,介绍了实现过程中的重难点,比如千万级和百万级数据量下的技术选型和…...

【索引】常见的索引、B+树结构、什么时候需要使用索引、优化索引方法、索引主要的数据结构、聚簇索引、二级索引、创建合适的索引等重点知识汇总
目录 索引的分类 什么时候需要 / 不需要创建索引? 有什么优化索引的方法 MySQL索引主要使用的两种数据结构是什么 为什么 MySQL 采用 B 树作为索引 聚簇索引和二级索引 根据给定的表,如何创建索引比较好 索引的分类 普通索引:最基本的…...

Egg 封装接口返回信息
中间件封装 代码 const msgArr {"200":成功,"401":token失效 } module.exports (option, app) > {return async function(ctx, next) {try{//成功是返回的信息ctx.emit(code,data,msg)>{console.log(1111,code,data,msg)ctx.body {code,data:dat…...

Android AMS——创建APP进程(五)
接上一篇,在 ActivityTaskSupervisor 中会判断进程是否存在,如果进程不存在,则会创建进程,执行 startProcessAsync() 方法。如果进程存在,则执行 realStartActivityLocked() 方法。在APP 的启动时,进程是不存在的。所以我们先来分析一下进程不存在的情况。 一、创建进程…...

凉鞋的 Unity 笔记 102. 场景层次 与 GameObject 的增删改查
102. 场景层次 与 GameObject 的增删改查 在上一篇,我们完成了 Unity 引擎的 Hello world 输出,并且完成了第一个基本循环: 通过这次基本循环的完成,我们获得了一点点的 Unity 使用经验,这非常重要。 有实践经验后再…...

信息安全:网络安全审计技术原理与应用.
信息安全:网络安全审计技术原理与应用. 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。网络安全审计的作用在于建立“事后“安全保障措施,保存网络安全事件及行为信息,为网络安全事件分析提供线…...

嵌入式Linux应用开发-第十三章APP怎么读取按键值
嵌入式Linux应用开发-第十三章读取按键及按键驱动程序 第十三章 APP怎么读取按键值13.1 妈妈怎么知道孩子醒了13.2 APP读取按键的4种方法13.2.1 查询方式13.2.2 休眠-唤醒方式13.2.3 poll方式13.2.4 异步通知方式13.2.4.1 异步通知的原理:发信号13.2.4.2 应用程序之…...

Web 中间件怎么玩?
本次主要是聊聊关于 web 中间件, 分为如下四个方面 什么是 web 框架中间件 为什么要使用 web 中间件 如何使用及其原理 哪些场景需要使用中间件 开门见山 web 中间件是啥 Web 框架中的中间件主要指的是在 web 请求到具体路由之前或者之后,会经过一个或…...

HMTL知识点系列(4)
目录 1. 在你过去的项目中,你如何解决HTML的布局和样式问题?2. 你能否解释一下HTML的“文档对象模型”(DOM)是什么,以及它的重要性?3. 你有没有经验处理网页的兼容性问题,特别是在不同浏览器之间…...

CFS内网穿透靶场实战
一、简介 不久前做过的靶场。 通过复现CFS三层穿透靶场,让我对漏洞的利用,各种工具的使用以及横向穿透技术有了更深的理解。 一开始nmap探测ip端口,直接用thinkphpv5版本漏洞工具反弹shell,接着利用蚁剑对服务器直接进行控制,留下…...

【RabbitMQ实战】07 3分钟部署一个RabbitMQ集群
一、集群的安装部署 我们还是利用docker来安装RabbitMQ集群。3分钟安装一个集群,开始。 前提条件,docker安装了docker-compose。如果没安装的话,参考这里 docker-compose文件参考bitnami官网:https://github.com/bitnami/contai…...

PS 切片工具 选择切片 切片存储
上文 PS 透视裁剪工具 中 我们简单讲述了透视裁剪工具 今天 我们来讲他后面的切片工具 首先 他的用途还是很多的 例如 你有一个很大的图片 其中包括 轮播 导航 主题内容 但他们都在一个图片上 你就可以用切片工具 将完整的图片切成多个部分 这里 我们选择了切片工具 光标也会…...

Git版本控制系统
概念: 一个免费的 开源 分布式源码仓库,帮助团队维护代码 个人使用 多人联机使用 git安装: 这里直接看大佬的安装 文章 很不错的 git 安装配置https://blog.csdn.net/mukes/article/details/115693833 安装完毕之后: 使用命名git -v查看…...

Element UI搭建首页导航和左侧菜单以及Mock.js和(组件通信)总线的运用
目录 前言 一、Mock.js简介及使用 1.Mock.js简介 1.1.什么是Mock.js 1.2.Mock.js的两大特性 1.3.Mock.js使用的优势 1.4.Mock.js的基本用法 1.5.Mock.js与前端框架的集成 2.Mock.js的使用 2.1安装Mock.js 2.2.引入mockjs 2.3.mockjs使用 2.3.1.定义测试数据文件 2…...

What is an HTTP Flood DDoS attack?
HTTP 洪水攻击是一种针对 Web 和应用程序服务器的第 7 层分布式拒绝服务 (DDoS) 攻击。HTTP 洪水攻击通过使用 HTTP GET 或 HTTP POST 请求执行 DDoS 攻击。这些请求是有效的,并且针对可用资源,因此很难防范 HTTP 洪水攻击。 匿名…...

第 114 场 LeetCode 双周赛题解
A 收集元素的最少操作次数 模拟: 反序遍历数组,用一个集合存当前遍历过的不超过 k k k 的正数 class Solution { public:int minOperations(vector<int> &nums, int k) {unordered_set<int> vis;int n nums.size();int i n - 1;for (;; i--) {if…...

[Java框架] Java常用爬虫框架推荐
Selenium GitHub 截止 2023年9月份 Star数量27.7K Selenium是一款基于浏览器自动化的工具,它可以模拟用户在浏览器上的操作行为,并获取网页上的内容。Selenium支持多种浏览器,可以很好地处理JavaScript生成内容。但是Selenium相较于其他框架而…...

Kafka:安装与简单使用
文章目录 下载安装windows安装目录结构启动服务器创建主题发送一些消息启动消费者设置多代理集群常见问题 工具kafka tool 常用指令topic查看topic删除topic 常见问题参考文献 下载安装 下载地址:kafka-download windows安装 下载完后,找一个目录解压…...

029-从零搭建微服务-消息队列(一)
写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…...

Python2020年06月Python二级 -- 编程题解析
题目一 数字转汉字 用户输入一个1~9(包含1和9)之间的任一数字,程序输出对应的汉字。 如输入2,程序输出“二”。可重复查询。 答案: 方法一 list1[一,二,三,四,五,六,七,八,九] while True:n int(input(请输入1~9之间任意一个数字…...
差分放大器的精髓:放大差模信号 抑制共模信号
参考如图基本的差分放大电路,在R1R2 R3R4的条件下,其输出与输入的关系为 : 具体推导过程参考:差分运算放大器的放大倍数的计算及结论_正在黑化的KS的博客-CSDN博客 由这个式子我们可以发现,差分放大器放大的是同相端与…...

蓝桥等考Python组别九级006
第一部分:选择题 1、Python L9 (15分) 运行下面程序,可以输出几行“*”?( ) for i in range(6): for j in range(7): print(*, end ) print() 5678 正确答案:B 2、Python …...

初级篇—第五章子查询
文章目录 什么是子查询需求分析与问题解决子查询的基本语法结构子查询的分类 单行子查询单行比较操作符代码示例HAVING 中的子查询CASE中的子查询子查询中的空值问题非法使用子查询 多行子查询多行比较操作符代码示例空值问题 相关子查询代码示例在ORDER BY 中使用子查询EXISTS…...

【AntDesign】封装全局异常处理-全局拦截器
[toc] 场景 本文前端用的是阿里的Ant-Design框架,其他框架也有全局拦截器,思路是相同,具体实现自行百度下吧 因为每次都需要调接口,都需要单独处理异常情况(code !0),因此前端需要对后端返回的…...

Visual Studio 代码显示空格等空白符
1.VS2010: 快捷键:CtrlR,W 2.VS2017、VS2019、VS2022: 工具 -> 选项 -> 文本编辑器 -> 显示 -> 勾选查看空白...

紫光同创FPGA图像视频采集系统,基于OV7725实现,提供工程源码和技术支持
目录 1、前言免责声明 2、设计思路框架视频源选择OV7725摄像头配置及采集动态彩条HDMA图像缓存输入输出视频HDMA缓冲FIFOHDMA控制模块HDMI输出 3、PDS工程详解4、上板调试验证并演示准备工作静态演示动态演示 5、福利:工程源码获取 紫光同创FPGA图像视频采集系统&am…...

京东大型API网关实践之路
概述 1、背景 京东作为电商平台,近几年用户、业务持续增长,访问量持续上升,随着这些业务的发展,API网关应运而生。 API网关,就是为了解放客户端与服务端而存在的。对于客户端,使开放给客户端的接口标准统…...

图像处理: 马赛克艺术
马赛克 第一章 马赛克的历史渊源 1.1 马赛克 艺术中的一种表面装饰,由紧密排列的、通常颜色各异的小块材料(如石头、矿物、玻璃、瓷砖或贝壳)组成。与镶嵌不同的是,镶嵌是将要应用的部件放置在已挖空以容纳设计的表面中࿰…...

postgresql-管理数据表
postgresql-管理数据表 创建表数据类型字段约束表级约束模式搜索路径 修改表添加字段删除字段添加约束删除约束修改字段默认值修改字段数据类型重命名字段重命名表 删除表 创建表 在 PostgreSQL 中,使用 CREATE TABLE 语句创建一个新表: CREATE TABLE …...

Llama2-Chinese项目:3.1-全量参数微调
提供LoRA微调和全量参数微调代码,训练数据为data/train_sft.csv,验证数据为data/dev_sft.csv,数据格式如下所示: "<s>Human: "问题"\n</s><s>Assistant: "答案举个例子,如下所…...