本文作者:仲向远、欧阳楚才
客户从事以手机为核心的智能终端的设计、研发、生产、销售和品牌运营,致力于成为新兴市场消费者喜爱的智能终端产品和移动互联服务提供商。智能终端产品在全球新兴市场有广泛的覆盖和用户基础,通过与国内互联网公司合作推出了众多移动互联网业务,成为全球增长最快的移动媒体渠道。
项目背景
随着流量获取,移动互联网业务成为集团三大战略之一,启动流量商业化项目,包括类似阿里妈妈的流量联盟、帮助广告主更好买量的数字化营销平台以及用户体系等,其中广告检索和广告大数据平台成为支撑整个流量商业化项目的技术基础。
广告检索平台的业务场景包括:
1)将海量广告从广告库中实时同步到检索系统,构建正排索引和倒排索引;
2)承接C端的高并发请求,经过召回层和检索层做多级筛选和排序,从海量广告库中筛选出几百个广告返回给前端,实时性要求高。
广告大数据平台需要聚合各种异构数据源,完成离线和实时数据分析和统计,产出业务报表,生产模型特征等,其中业务报表是是核心业务,它是广告主、平台运营人员进行投放优化、业务决策的依据。
广告检索和广告大数据平台面临的技术挑战主要有:
1、高并发:广告引擎和C端流量对接,请求量大,2022年峰值超过6万QPS。
2、实时性:广告检索结果实时响应(P99 100ms内)、广告索引实时同步和更新(秒级)。
3、业务逻辑复杂:一次广告请求,涉及到多路召回、算法模型打分、竞价排序等复杂的业务流程,策略多,执行链路长。
4、稳定性要求高:广告系统直接跟收入挂钩,广告引擎及计费平台等核心系统稳定性要求很高,可用性至少要做到3个9。
5、大数据存储和计算:随业务发展,推广数量以及扣费订单数量很容易达到千万甚至上亿规模,另外收入报表的分析维度多,单报表可能达到百亿级别的记录数。
技术选型
面临上述快速变化的业务需求和技术挑战,客户摒弃基于开源组件从零开始构建的技术架构方案,期望通过云原生架构,满足整个架构的硬需求和软需求,以便将更多的精力和时间用在业务思考和数据赋能的应用上。
硬需求:检索引擎、离线计算引擎,实时计算引擎,OLAP分析引擎,KV存储,实时数据集成工具,分布式存储系统。
软需求:高并发高可用,实时性强、灵活易扩展、易于运维管理和全链路数仓构建。
通过一个月时间的调研和POC,客户主要从以下4个因素进行考量后,决定选择阿里云云原生大数据平台方案:
- 阿里云ElasticSearch提供高性能硬件、广告场景配置模板、优化的内核、负载均衡、多可用区部署等高性能和高可用能力,支持大规模、低时延的广告召回。
- 灵活的数据集成和OSS数据湖集成能力:数据主要来自于RDS业务数据、Kafka实时用户行为数据,以及第三方云服务商对象存储中的历史用户行为数据。阿里云DataWorks提供灵活、可视化的数据集成能力,方便从业务数据到广告检索和大数据平台的离线和实时数据同步;阿里云MaxCompute提供湖仓一体能力,可以方便地处理OSS上来自于第三方云服务商的半结构化数据。
- 阿里云云原生大数据平台离线实时一体化、分析服务一体化能力可以极大地简化大数据平台的架构。
- 在海外region有较完备的产品服务能力。
以下是各个组件的定位:
- 检索分析服务 Elasticsearch版:广告倒排索引、广告召回
- DataWorks:数据的集成、开发、运维、服务等的一站式管理平台
- MaxCompute:离线分布式计算引擎
- Hologres:实时写入能力强、查询性能快、支持在线OLAP、KV点查、实时读写
- 实时计算Flink版:高性能实时计算系统
实现架构
整体架构
技术选型确定之后,开始建设广告检索和大数据平台数据中台,以下为架构图:
广告检索平台架构
广告检索平台使用Elasticsearch+Flink+RDS+Kubernetes构建,架构图如下所示:
架构的各组件说明:
- 数据接入
广告数据源为RDS MySQL关系型数据库,通过Flink实时捕获变更数据,并同步到Elasticsearch。Flink CDC 基于数据库日志的 Change Data Caputre 技术,实现了全量和增量的一体化读取能力,并借助 Flink 优秀的管道能力和丰富的上下游生态,支持捕获多种数据库的变更,并将这些变更实时同步到下游存储。
- 广告召回
为了支持高并发、低延时、高可用的查询服务,使用Elasticsearch作为召回引擎,多路召回广告信息。Elasticsearch中索引分片数按照单个分片30GB左右规划,将索引主分片设为1,副本数设为节点数-1,通过扩展节点数可以弹性提升查询性能。不需要支持范围查询的数值字段,把integer类型字段改为keyword类型,提升查询速度。在业务低峰期,使用_forcemerge API来对分段执行合并操作,每个分片中最大允许一个分段。为了避免JVM垃圾回收对查询延迟时间的影响,堆内存超过16GB的场景下,使用垃圾回收器G1替代CMS。为了避免高并发查询请求导致带宽打满,应用程序本地缓存搜索结果,配置缓存1分钟后过期。系统上线前,通过全链路压测,验证需要的Elasticsearch服务、应用程序Kubernetes容器节点和规格。Elasticsearch数据节点规格16核32G内存、100GB ESSD云盘,总共配置28个数据节点,并配置3个专有主节点。
Elasticsearch查询性能监控
广告大数据平台架构
广告大数据平台使用 MaxCompute+DataWorks+Flink+Hologres构建,架构图如下所示:
架构的各组件说明:
1)数据源:
广告日志:来自App、Web、服务端等端的广告展点消日志;
业务数据库:存储业务数据的关系型数据库,主要是RDS。
2)云Kafka消息中间件
提供广告日志、系统日志、用户行为日志、RDS CDC数据的消息汇聚;提供计费明细数据的消息汇聚。
3)数据接入
通过DataWorks从Kafka中实时消费广告日志数据,并实时写入MaxCompute;业务数据通过DataWork从RDS离线周期性同步到MaxCompute;第三方云服务商大数据系统中的历史数据通过OSS同步工具从S3同步到OSS,MaxCompute通过OSS外表直接访问。
4)离线数据处理
离线数据处理基于MaxCompute搭建,用于计算全量数据,数据源来自于DataWorks的实时和离线导入。离线数据经过离线数仓计算(ODS层->明细层→汇总层),导入Hologres作为存量数据,一部分离线的DWD/DWS数据也导入Hologres作为维表的存量数据。
数仓模型采用分层设计,主要分为ODS层、明细层和汇总层:
ODS层:对应各种源数据,包括MaxCompute中存储的实时导入的广告日志,增量或者全量同步的MySQL业务数据表。
明细层:包含维度表和事实表,通常是对源数据进行清洗后的数据宽表,比如行为日志表、推广宽表、用户宽表等。
汇总层:对数据进行轻粒度的汇总表,比如广告效果表、用户行为的全链路表、用户群分析表等。
5)实时数据处理
实时数据处理基于Flink搭建,用于实时广告日志数据的预处理和ETL,数据源来自于Kafka和RDS CDC,经实时处理后写入实时数仓Hologres和计费Kafka,供对外提供数据服务和下游计费系统的处理。
6)数据服务
由于应用层报表部分面临聚合维度多、单表达百亿级行数、需要支持低延迟的查询等挑战,选择了Hologres作为交互式分析引擎, 聚合维度多, 需要分时、分广告位、分推广等几十个维度; 单表最大达到百亿级别;支持时间范围的实时查询。
另外为了提供统一、安全的数据服务,使用DataWorks数据服务能力,构建统一的数据服务API目录,并提供服务授权和计量管控。
7)数据数据应用
上层应用场景直接使用的数据表,包括多维分析生成各种收入报表、MaxCompute任务产出的算法模型特征和画像数据等。
业务价值
在确定平台方案和架构后,经过短短3个月时间,客户从0到1完成广告大数据平台的建设,并支持广告项目在海外多地的全面推广和落地,在技术和业务方面的带来的价值如下:
- 为广告业务提供了高QPS、低延迟、高可用的企业级广告召回引擎,支撑业务快速从0到1增长,2022年QPS超过6万。
- 为运营人员提供了分钟级/秒级的实时看板服务和实时报表,可以及时了解到广告收入和效果;为广告推荐算法提供了秒级的实时用户行为反馈,从而可以让广告召回系统及时根据用户反馈调整召回策略,从而提高广告投放效率。
- 开发效率大为提高,开发人员从原来的作坊式开发,切换到DataWorks一站式、向导式的开发模式,数据集成零代码,数据开发SQL化,任务调度配置化,运维监控可视化,开发效率提高了2-3倍,学习的梯度也降低了很多。
- 运维成本和复杂度下降,之前需要维护Hive、Spark、HBase, 、Druid等异构系统,采用阿里云云原生离线实时一体化、分析服务一体化的大数据产品,极大地简化了平台架构,同时全托管服务免运维。
未来期望
客户在使用阿里云云原生大数据产品构建了大数据平台后,在后续的使用过程中也提出了更多的要求:
- 国际化能力的支持
客户业务范围覆盖多个国家,目前使用DataWorks做任务调度,只能按照固定时区时间进行调度,无法灵活配置按本地时区或某基准时区时间进行调度,导致任务开发不方便,需要较大的代价做时区适配,严重时甚至影响任务产出。
- 极致高性能高可用的广告检索引擎
随着业务的发展,客户对广告检索引擎的高性能达到极致的要求(满足峰值近10万QPS P99响应时间20ms内),检索引擎的性能优化之路永无止境;广告检索引擎直接对接客户业务,除了多AZ部署方面等硬能力之外,客户更关注的是故障演练规范、故障切换的最佳实践等这些软能力,这块期望阿里云能够有更多的支持。
了解更多阿里云大数据方案与产品信息 >>