小鹅通基于阿里云数据库 SelectDB 版内核 Apache Doris 的应用实践

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 随着网络直播规模的不断扩大,在线知识服务在直播行业中迎来了广阔的发展机遇。小鹅通作为一家以用户服务为核心的技术服务商,通过多平台直播与推流服务吸引和转化潜在用户,同时通过直播数据分析平台,帮助商家分析直播指标数据、分析用户观看情况、构建精准用户画像。然而,随着直播用户数量的激增,平台在写入和查询方面的支持逐渐无法满足业务需求,为了应对挑战,小鹅通开启了架构升级之旅。本文将详细介绍小鹅通直播数据分析平台的优化过程,分享小鹅通基于 Apache Doris 优化写入与查询性能、完善用户标签功能和保障平台稳定性等实践经验,为商家提供了更精细化的用户经营支持。

2023 年 3 月,在阿里云瑶池数据库峰会上,阿里云与飞轮科技正式达成战略合作协议,双方旨在共同研发名为“阿里云数据库 SelectDB 版”的新一代实时数据仓库,为用户提供在阿里云上的全托管服务。

SelectDB 是飞轮科技基于 Apache Doris 内核打造的聚焦于企业大数据实时分析需求的企业级产品。因此阿里云数据库 SelectDB 版也延续了 Apache Doris 性能优异、架构精简、稳定可靠、生态丰富等核心特性,同时还融入了云服务随需而用的特性,通过云原生存算分离的创新架构,为企业带来分钟级弹性伸缩、高性价比、简单易用、安全稳定的一键式云上实时分析体验。

为了更深度的了解阿里云数据库 SelectDB 版,我们可以全面多角度的了解 Apache Doris 的应用实践和经验。

深圳小鹅网络技术有限公司,是一家以知识产品与用户服务为核心的技术服务商,创始至今已累计生产了 2000 万个知识产品,已服务的商家规模达 160 万,其中不乏腾讯学堂、华夏基金、西贝、吴晓波频道、十点读书、凯撒旅游等各行业一线知名品牌。作为私域运营的一站式工具,针对商家业务痛点,小鹅通提供了多方面的闭环解决方案,包括产品与服务交付、营销获客、用户运营、组织角色管理、品牌价值输出等以实现业务升级。

1.jpg

随着“直播带货”消费模式的兴起,网络直播规模的持续上升,在线知识服务开始在直播行业中开拓广袤发展领域,借助直播工具的力量能够有效吸引和转化潜在用户,借助直播分析平台能够实现对 C 端用户数据留存与分析,助力 B 端商家客户的精细化用户运营。

在这一背景下,小鹅通直播为商家提供了多平台的直播与推流服务,以及多种直播带货的营销玩法,不仅能将公私域流量引导至直播间,实现商家引流目标,还提供了多维度的分析平台。商家可以通过直播数据分析平台导出和分析各项直播数据指标,生成用户标签,以了解用户观看直播的情况和动态、构建精准的用户画像。

目前,小鹅通直播场次已累积达 600 万次,终端用户数近 8 亿,最高同时在线观看人数超过 1000 万。然而,面对直播用户数量激增,直播数据分析平台在数据写、查方面的支持逐渐无法满足业务需求,我们希望能够借助分析平台掌握直播间在线人数、在线时长、商品转化率、交易额等数据,并在直播间波峰波谷时期记录以上数据的流量趋势图。为了满足上述的业务需求,小鹅通对于平台架构提出更高的性能要求:

  • 写入性能:需具备海量数据实时写入的能力,确保在直播过程中高吞吐场景下数据稳定导入;

  • 数据更新:为了应对直播期间交易状态和用户数据的变化,我们需要架构具备高效准确的更新机制,确保业务人员及时掌握最新数据;

  • 查询性能:能够支持高并发点查,也能满足联邦查询的需求,保证不同查询场景下数据分析的时效性;

  • 平台运维:由于直播业务具有明显的波峰波谷时段,分析平台需要确保在直播高峰时段保持稳定的运行状态。同时,在波谷时段,平台应该支持节点弹性缩容,以提高资源利用率并控制运维成本。此外,为了避免系统运行故障导致站点破坏、为了保持系统高可用性,架构还需要提供可靠的灾备方案,以确保业务连续。

在遭遇系统业务瓶颈后,小鹅通开启了平台基础建设重构之旅,在经过业务调研、选型对比和内测应用后,基于 Apache Doris 对最初 Elasticsearch 与 HBase 的架构进行了迭代升级,并于今年 5 月份正式上线 Apache Doris 版本的直播数据分析平台。

本文将详细介绍小鹅通直播数据分析平台的优化过程,分享小鹅通如何基于 Apache Doris 提升平台查询性能、完善用户标签功能、保障平台稳定性等实践经验,最终赋能商家精细化用户经营。

基于 Elasticsearch 与 HBase 早期架构

2.jpg

直播数据分析平台的原始数据主要来源于 MySQL 的业务数据库、学习 SDK、埋点 SDK,平台架构主要分为离线与实时链路:

  • 离线链路:用户相关的数据通过 DataX 采集并全量存储于 HDFS,由 Hive 计算写入 HBase,形成用户基本信息的主表。

  • 实时链路:MySQL 业务库与学习 SDK 中的相关指标数据(例如实时订阅、访问、直播互动、用户权益等)通过 Flink CDC 采集后上报至 Kafka,利用 Flink 实时计算并存入 Redis 中。

两类数据依据业务需求,将用户基本信息与直播相关业务指标关联,形成直播参与用户大宽表,其中当权益、订阅等主业务数据发生变更时,需要与 HBase 中的用户维表进行关联补全数据。数据每次更新都会在宽表补全后,将所有字段一起发送至下游 Elasticsearch 来承载业务人员的查询需求,避免并发修改的情况。

随着直播用户规模的扩大,我们对于数据时效性、查询性能等方面要求逐渐升高,而原架构的局限性也逐渐影响业务分析需求:

  • 数据流转时效性低:由于组件过多,导致计算链路过长、节点过多,写入与查询的时效性也必然会受到影响,无法支撑直播波峰时段的实时导入与极速分析。

  • 数据更新链路复杂:直播数据每次发生变更时,都需要先将变更数据写入主表与维度表中,随后重新关联生成新的宽表以覆盖旧数据。这一过程涉及多个组件和长链路,更新机制的复杂度与低效也随之增加。

  • 查询性能不足:在高并发查询场景下,Elasticsearch 需要处理大量的查询请求和数据访问,导致查询负载过重,分析效率低;在关联查询场景下,Elasticsearch 无法满足 Join 计算需求,查询灵活度低。

  • 架构运维成本高:组件过多还会导致整体架构运维成本升高、开发人员学习成本加大、指标扩展较为局限等问题。

基于以上架构痛点,我们在 2022 年 7 月开启系统重构项目的调研工作,最终在众多数据仓库中选择了 Apache Doris 进行架构升级,并在同年 11 月开启长达 6 个月的内测工作,希望借助 Apache Doris 在实时写入、数据高效更新、极速查询性能和简易运维等方面的优势,在直播数据分析场景中强化直播用户数据挖掘,获取更多高价值的业务洞察。

基于 Apache Doris 的全新直播数据分析平台

3.jpg

在升级到全新架构后,我们统一了实时和离线两条数据处理链路,全部交由 Apache Doris 来进行处理。如图所示,原始数据经过 Flink 流处理计算后,会实时写入到 Apache Doris 的表模型中,根据场景我们分别选用了不同的数据模型进行查询加速,数据表与对应的查询需求具体如下:

  • 用户维度表:借助 Apache Doris 的 Aggregate Key 模型将用户维度数据聚合,同时通过 replace_if_not_null 方式实现部分列更新;

  • 标签表:为了更好地构建用户标签体系,实时更新用户画像,我们借助 Unique Key 将数据分为标签与标签版本两类表,通过 Merge on Write 更新数据,并借助 Doris 关联查询性能,使商家获取最新版本的用户标签。

  • 学习数据表:同样借助 Aggreagte Key 模型将用户在平台中的学习数据进行聚合,支持后续直播用户分析需求。

在 Apache Doris 引入后为我们提供了全新的数据流转,满足写入与查询时效性的需求,有效解决了原架构链路痛点。目前,我们基于 Doris 十余台集群规模为直播数据分析平台提供实时写入与极速分析,并带来了以下具体收益:

01 写查接口统一、写入效率更高

Flink-Doris-Connector 内置了 Flink CDC ,支持从业务数据库中全量和增量抽取数据,同时 Doris 也可以通过 Routine Load 来订阅 Kafka 中的数据、一流多表秒级写入,大幅提升了数据集成同步的效率。

利用 Apache Doris 替换原架构中 HBase 、Elasticsearch 等多个组件,减少了中间数据在不同链路中的流转,解决了链路过长、组件过多的问题,通过 Apache Doris 一套系统实现统一对外数据服务。

02 数据写时合并、高效更新

在 Apache Doris 聚合后,单表最大达数十亿的情况下,可以支撑每秒 20 万的数据 Upsert 与 Insert Overwrite,满足了直播高峰时期高吞吐写入需求。

在数据更新时,无需将字段补全后再重新开发宽表,可以直接利用 Merge On Write 功能进行轻量级 Merge,通过写时合并,实现微批高频实时写入与部分列更新。

03 多场景下的查询加速

在高并发点查时,我们高频使用 Doris 分区分桶裁剪功能,在查询时过滤非必要的数据,使数据扫描快速定位,加速查询响应时间。

在关联查询时,Apache Doris 支持对多张 10 亿级表进行 Join,满足分析人员将用户基础信息与学习、标签数据等关联查询需求。更重要的是,Doris 在标签检索、模糊查询、排序、分页等场景下都可以达到秒级甚至毫秒级的查询响应。

04 开发周期缩短、运维成本降低

Apache Doris 自身架构简单,FE 和 BE 两节点能够灵活扩缩容,易于部署、迁移与运维。在架构升级后,通过简化链路我们的运维成本相较于之前降低近 2/ 3。

同时 Doris 兼容 MySQL,使开发操作简单、使用门槛低,研发成本也随之降低。现在指标开发时间大幅度缩短,由原来单个指标耗时一个月缩短至现在仅需一周即可完成,加速指标迭代周期。

接下来,我们将从查询加速、容灾备份、数据可视化分析三方面分享 Apache Doris 在直播数据分析场景中应用实践,希望通过分享为读者提供更多关于 Doris 应用洞察。

用户画像场景查询加速实践

对于直播业务,用户标签是构成用户画像的核心因素,能够将用户在直播过程中所产生的行为数据分析提炼,生成具有差异性特征的标签词,以更好地掌握用户属性、用户偏好、直播习惯等信息。

在小鹅通直播分析平台中,商家可以自行定义规则生成标签,例如 “观看直播超过一分钟” 的用户为一类标签,“最近一分钟访问直播间”的用户为另一类标签。在这个过程中,商家会频繁不断地对用户“贴标签”(插入数据)或者“撕标签”(删减数据),与此同时每位用户也可能会存在多个自动或者手动标签。基于此,数仓需要具备以下能力:

  • 面对标签变动频繁的情况,数仓需要支持实时写入与更新,并保证集群稳定。

  • 面对同一用户的多类标签,数仓还需要提供强大的关联查询能力,并支持快速查询检索性能。

我们以下面的 SQL 为例,介绍基于 Apache Doris 在标签场景如何快速抽取数据、如何通过主键模型创建标签表与标签版本表、如何对字符串开启模糊查询解析,实现用户信息的快速检索,加速用户行为与经营业务分析。

创建标签表:

create table db.tags (  
u_id string,  
version string,  
tags string
) with (  
'connector' = 'doris',  
'fenodes' = '',  
'table.identifier' = 'tags',  
'username' = '',  
'password' = '',  
'sink.properties.format' = 'json',  
'sink.properties.strip_outer_array' = 'true',  
'sink.properties.fuzzy_parse' = 'true',  
'sink.properties.columns' = 'id,u_id,version,a_tags,m_tags,a_tags=bitmap_from_string(a_tags),m_tags=bitmap_from_string(m_tags)',  
'sink.batch.interval' = '10s',  
'sink.batch.size' = '100000' 
);

创建标签版本表:

create table db.tags_version (  
id string,  
u_id string,  
version string  
) with (  
'connector' = 'doris',  
'fenodes' = '',  
'table.identifier' = 'db.tags_version',  
'username' = '',  
'password' = '',  
'sink.properties.format' = 'json',  
'sink.properties.strip_outer_array' = 'true',  
'sink.properties.fuzzy_parse' = 'true',  
'sink.properties.columns' = 'id,u_id,version',  
'sink.batch.interval' = '10s',  
'sink.batch.size' = '100000'  
);

两类表写入:

insert into db.tags
select
u_id,  
last_timestamp as version,
tags
from db.source;  

insert into rtime_db.tags_version
select 
u_id,  
last_timestamp as version
from db.source;

Bitmap 索引加速标签查询:

在写入完成后,业务人员开始对用户相关数据进行查询分析。以常见查询场景为例,我们需要查找某位姓张用户在最新版本中的标签数据,首先会在用户主表中使用 LIKE 匹配符合要求的用户名,其次在分页查询中对标签字段分别创建 Bitmap 索引,如 “123”、“124”、“125”、“126”、“333”,最后通过三表关联快速找到标签信息。

with t_user as (
    select 
           u_id,
           name
    from db.user
    where partition_id = 1
    and name like '%张%'
),

 t_tags as (
         select 
                 u_id, 
                 version
         from db.tags
         where (
                   bitmap_and_count(a_tags, bitmap_from_string("123,124,125,126,333")) > 0 
           )
 ),

 t_tag_version as (
         select id, u_id, version
         from db.tags_version
 )

select 
    t1.u_id
    t1.name
from t_user t1
join t_tags t2 on t1.u_id = t2.u_id
join t_tag_version t3 on t2.u_id = t3.u_id and t2.version = t3.version
order by t1.u_id desc
limit 1,10;

在直播数亿用户规模、每位用户存在上千个标签的场景下,使用 Bitmap 索引来查询用户相关数据后,查询时间均能够在 1 秒内响应并准确地为业务人员提供所需结果,大大加速了标签查询速度。

双集群高可用方案

在直播课程大促期间,为了带动直播间的下单氛围,提升用户秒抢积极性与下单率,平台会在直播间开启抽奖等活动。在引入 Doris 之前,我们将每日备份数据到对象存储中。当直播过程中优惠券领取、下单等出现故障时,从用户反馈、层层上报,再到故障恢复,需要花费数个小时。

然而,在这数小时中,成百上千的用户会因此流失,我们则需要承受用户退出直播间、寻找其他替代产品等巨大风险与损失。因此,平台面对海量用户访问的冲击,数据恢复与解决故障的速度成为了直播间业务效益的关键。

为了保障短期指数级业务波峰下平台的稳定运行,我们决定采取全新容灾方案。基于 Apache Doris 主备双集群的方式,实现热备;使用 Airflow 通过 Backup 与 Freeze 策略将每日数据备份至对象存储,以实现冷备,其中热备具体流程如下:

  • 数据双写:改造 Flink Doris Connector,通过配置将数据写到两个集群或单个集群,在处理某个集群需要升级的场景时,先停止写一个集群后再去改造另外一个集群,有效保证集群的稳定性。

  • 负载均衡:通过反向代理来切换查询请求到指定集群。当某一集群出现了问题,我们可以及时把请求接到另外一个集群上面。

  • 监控校验:定期校验主从集群的数据及表结构的一致性,以便及时发现数据性不一致的情况。

我们还将进一步引入 Doris 2.0 版本中推出的 CCR 跨集群数据复制功能,尝试使用该功能减少开发运维成本,降低人工储备集群双写所导致两个集群 DDL 不一致的风险。

自研数据可视化平台,统一实时查询出口

4.jpg

数据可视化分析平台主要用于离线报表、即席查询、实时数据大屏(Dashboard)三大场景,为商家业务人员、管理层等提供可视化分析功能。在引入 Doris 之后,我们将 MySQL、Elasticseach、本地文件等多种数据源统一交给 Apache Doris 实现

同时,为了更好地将数据呈现给商家,我们还增加了数据源管理与数据集创建功能,业务人员可以直接在平台中选择数据源进行配置、测试等操作,形成可视化列表。除此之外,平台结合了 BI 工具中丰富的图表样式,满足商家配置数据看板的个性化需求。

在引入 Apache Doris 之后,通过数据集的配置实现了数据管理、权限管理等功能,并利用 Apache Doris 极速多维分析、联邦查询的能力加速了数字化平台的查询展示性能,摒弃了原来的 T+1 报表,在 Apache Doris 之上实现即时查询。

未来规划

目前,基于 Apache Doris 构建的分析平台主要用于小鹅通直播业务,为用户相关数据提供服务。在 Apache Doris 引入后,平台架构实现了写查出口统一、时效性大幅提升、用户数据多维分析场景拓展,同时 Doris 的加持还使后台系统具备稳定性、可扩展性、安全性等关键优势。这些突破促使平台基础技术能力进一步提高,也促进了用户数量、直播效益进一步增长。

后续我们希望继续拓展 Apache Doris 的使用场景,将课程分析、用户日志分析等交由 Apache Doris 对外提供统一的数据分析服务。同时,我们也希望继续探索 Apache Doris 2.0 版本的新特性,进一步提升集群稳定性能,包括:

  • Pipeline 执行引擎和基于成本的查询优化器:在做用户直播列表时有许多复杂的售后场景需要人工优化,当有了 Pipeline 执行引擎和查询优化器后,不再需要人工调 SQL ,使执行性能更优;

  • CCR 跨集群数据同步:通过用户多集群的数据库表自动同步以提升在线服务数据的可用性;

  • 倒排索引:利用 Apache Doris 2.0 版本的倒排索引功能,对现有的索引结构进行丰富,实现模糊查询、等值查询和范围查询等能力,进一步加速查询响应速度。

在此特别感谢 SelectDB 技术团队在使用过程中遇到任何问题都能及时响应,为我们降低了许多试错成本。未来,我们也会更积极参与 Apache Doris 社区贡献及活动,与社区共同进步和成长!

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2天前
|
SQL 存储 调度
从 Volcano 火山模型到 Pipeline 执行模型,阿里云数据库 SelectDB 内核 Apache Doris 执行模型的迭代
一个合适的执行模型对于提高查询效率和系统性能至关重要。本文全面剖析 Apache Doris Pipeline 执行模型的设计与改造历程,并在 2.1 版本对并发执行模式与调度模式进一步优化,解决了执行并发受限、执行及调度开销大等问题。
从 Volcano 火山模型到 Pipeline 执行模型,阿里云数据库 SelectDB 内核 Apache Doris 执行模型的迭代
|
3天前
|
监控 Cloud Native 大数据
即刻预约|阿里云数据库 SelectDB 版商业化发布会,5月21日14:00与您相约
2024年5月2日14:00,阿里云数据库 SelectDB 版商业化产品发布会将于线上重磅举行,即刻开启预约!👇 直播地址:https://developer.aliyun.com/special/selectdb?utm_content=g_1000393528
218 0
即刻预约|阿里云数据库 SelectDB 版商业化发布会,5月21日14:00与您相约
|
1天前
|
Cloud Native 关系型数据库 分布式数据库
祝贺!阿里云PolarDB斩获数据库国际顶会ICDE 2024工业赛道最佳论文
阿里云斩获国际顶会ICDE 2024最佳论文,0.5秒实现数据库跨机实例迁移。
祝贺!阿里云PolarDB斩获数据库国际顶会ICDE 2024工业赛道最佳论文
|
3天前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB是阿里云自主研发的关系型云原生数据库
【5月更文挑战第14天】PolarDB是阿里云自主研发的关系型云原生数据库
38 3
|
3天前
|
SQL 关系型数据库 Serverless
阿里云关系型数据库RDS
阿里云关系型数据库RDS
16 2
|
3天前
|
Cloud Native 关系型数据库 分布式数据库
数据库性能诊断工具DBdoctor通过阿里云PolarDB产品生态集成认证
DBdoctor(V3.1.0)成功通过阿里云PolarDB分布式版(V2.3)集成认证,展现优秀兼容性和稳定性。此工具是聚好看科技的内核级数据库性能诊断产品,运用eBPF技术诊断SQL执行,提供智能巡检、根因分析和优化建议。最新版V3.1.1增加了对PolarDB-X和OceanBase的支持,以及基于cost的索引诊断功能。PolarDB-X是阿里巴巴的高性能云原生分布式数据库,兼容MySQL生态。用户可通过提供的下载地址、在线试用链接和部署指南体验DBdoctor。
150 0
|
3天前
|
弹性计算 运维 监控
解密阿里云弹性计算:探索云服务器ECS的核心功能
阿里云ECS是核心计算服务,提供弹性云服务器资源,支持实例按需配置、集群管理和监控,集成安全防护,确保服务稳定、安全,助力高效业务运营。
81 0
|
3天前
|
存储 弹性计算 固态存储
阿里云服务器CPU内存配置详细指南,如何选择合适云服务器配置?
阿里云服务器配置选择涉及CPU、内存、公网带宽和磁盘。个人开发者或中小企业推荐使用轻量应用服务器或ECS经济型e实例,如2核2G3M配置,适合低流量网站。企业用户则应选择企业级独享型ECS,如通用算力型u1、计算型c7或通用型g7,至少2核4G配置,公网带宽建议5M,系统盘可选SSD或ESSD云盘。选择时考虑实际应用需求和性能稳定性。
149 6
|
3天前
|
域名解析 弹性计算 Linux
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
本文为大家介绍了2024年购买阿里云服务器和注册域名,绑定以及备案的教程,适合需要在阿里云购买云服务器、注册域名并备案的用户参考,新手用户可通过此文您了解在从购买云服务器到完成备案的流程。
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
|
2天前
|
存储 安全 数据库
阿里云服务器计算型、通用型、内存型主要实例规格特点、适用场景及最新价格参考
在阿里云服务器的实例规格中,有共享型也有企业型,一般用户选择较多的企业级实例规格有计算型、通用型、内存型,每一种实例规格又有多个实例规格族可选,不同的云服务器实例规格在架构、计算、存储、网络、安全等方面有着不同,因此,其适用场景也有所不同。本文来详细介绍一下阿里云服务器计算型、通用型、内存型主要实例计算、存储等性能及其适用场景,以供参考。
阿里云服务器计算型、通用型、内存型主要实例规格特点、适用场景及最新价格参考