作业帮实时数仓架构中的Doris是如何发挥神威的,一文玩儿透(建议收藏)

本文主要是介绍作业帮实时数仓架构中的Doris是如何发挥神威的,一文玩儿透(建议收藏),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

关 注 公 众 号,获 取 更 多 技 术 好 文~

摘要:今天分享的内容是Doris在作业帮实时数仓架构中的应用及实践

分享时间:2021年6月05日

内容分享:利敏

摘要整理:皮卡丘

主要内容:

    1、作业帮业务与背景

    2、基于Doris的实时查询系统

    3、未来规划

Apache Doris

支持对海量大数据进行快速分析的MPP数据库

Apache Doris一款基于大规模并行处理技术的交互式SQL分析数据库,仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析Apache Doris由百度于2018年贡献给 Apache 基金会,目前正在孵化

一、业务背景介绍

1、数仓逻辑分层

2、过去的业务支持模式

3、总体架构图

4、成效收益

1.1、数仓逻辑分层:

提到数仓,绕不开的话题就是如何分层,但在这个问题上大家好像有个统一的答案,来,上架构图吧:

注:大数据团队主要负责ODS-DWS的建设,从DWS到ADS一般是数仓系统和业务线系统的边界。在过去,由于缺失统一的查询系统,探索了很多模式来支持各个业务线发展。

PS:虽然架构趋同,但在不同的业务模式和场景下,各个企业都有着自己鲜明的特点,正所谓“君子和而不同”。但殊途同归,最终都是为了给业务赋能~

1.2、过去的业务支持模式:

架构拆解:

非流量类:

  • Kafka:业务线从kafka接数据自己做数据的聚合计算,主要问题在于完全没有数仓的概念,业务线在做大量重复的建设

  • Spark + ES:每来一个业务需求,就构建一个Spark+ES集群(spark负责计算写入到ES,ES供业务层直接使用)。效率低、ES的接口以及内部原理学习成本高,对于业务线很难有这样的精力去做

  • ES + 自定义API。大数据将数据写入ES后,并case by case构建api。初步有了数仓的接口,但是接口不具备Sql的能力,只能基于需求case by case的构建,效率太低。

流量类(如pv、uv等):

  • 由于数据量大,往往需要预聚合,引入druid

痛定思痛:

  • 这些烟囱式的系统构建方式,导致系统越来越难以维护,且业务接入效率也逐步降低

  • 统一整个查询引擎,对于数仓建设在提高业务支持效率、降低维护成本上都具有非常重大的意义

PS:如切如磋,如琢如磨,好的架构,总是建立在过去之上的。没有更好,只有更适合时下的业务场景,所以千万不要掉进惯性的陷阱

1.3、总体架构:

经过过去数月的探索与实践,团队确立了以Doris为基础的数仓实时查询系统。同时也对整个数仓的数据计算系统做了一次大的重构,最终整体的架构图如下:(划重点啦~)

如图所示:

  • 业务日志及实时数据通过采集工具落盘到kafka(ODS层)

  • 经过Flink-SQL(将原来的spark替换掉)进行清洗、计算后,在将数据推回至kafka中(DW层)。且,使用SQL进行开发大大提升了效率

  • 其后查询系统将Kafka的数据实时同步到查询引擎Doris(ADS层),并通过OpenAPI的统一接口对外提供查询服务

ps:经过这样层次清晰的梳理,现在是不是对实时数仓有了一定的认识了呢~

1.4、成效收益:

过去
现在收益
技术选型:Spark/API/ES/……
开发、联调……
基础数据写入Doris/ES
业务侧基于Sql进行查询
交付效率:数人周/月 -> 小时
裸用ES,千万级数据查询 十小时+ 
前端基于Mysql做报表
Doris/Doris on ES高性能查询 
ES:十小时 -> 分钟级
Doris:分钟级 -> 秒级

总结:

  • Doris 易运维(无第三方组件、Mysql接口)、社区支持度好

    • 目前半年时间,7+业务线。近1T数据

    • 0事故(>=P2)

二、基于Doris的实时查询系统

1、系统选型&原理

2、应用实践

2.1.1 业务场景:

  • BI、报表……

    • PV、UV……

    • 日活

  • 特点:明细、聚合

    • 聚合:作业帮 主APP在某一天的活跃用户

    • 明细:作业帮 主App各个小时段各个版本下的活跃用户

  • 教研工作台

某节课内,各个老师的学生出勤数:

select teacher_id, count(student_id)
from attend_table
where lessonId=xxx and attend_time > 300
group by teacher_id

2.1.2 查询引擎调研:

实时查询系统的核心在于查询引擎,如何选型当然也成了其中很重要的内容。社区的查询引擎较多,如Impala、Presto、Doris、ES以及云上的ADB等。考虑到调研成本、团队技术生态、维护成本等多种因素,最后选择了Doris作为查询引擎。

调研结果:

经过性能、成本、生态及业务技术和业务现状,最终使用Doris onES。主要考虑点:

  • 任意列检索。基于ES的倒排索引,我们可以对任意列进行检索(筛选)。这个模型大大降低了业务同学的学习理解成本,可以和mysql一样方便的构建数据模型

  • ES的易用性以及整个技术生态在公司内相对成熟的多,维护成本较低。如数据修改可以直接覆盖最新值,非常简单

  • Doris on ES在数据Scan上做了大量的优化操作,如列存、local优先、响应内容过滤、顺序扫描、提前终止等,对于数据的扫描性能可以达到~30w/

  • Doris 提供了更强大的Sql语法(如join、多列group by……),且整个查询过程保障了数据的准确度。大大提高了数据使用的效率和数据查询质量

当然,对于流量分析的场景,由于指标列一般是pv、uv等,业务上并没有对指标的筛选过滤需求,且Doris自身支持RollUP,因此非常适合流量类的查询分析。

因此,通过Doris我们统一了整个查询引擎端的实现,这样对于后续整个数仓的进一步建设就打下了非常重要的基础。

2.1.3 Doris简介:

  • MPP架构的OLAP引擎

  • FE:解析、元数据;BE:执行、存储

  • 同时支持高并发点查询和高吞吐的Ad-hoc查询

  • 同时支持离线批量导入和实时数据导入

  • 兼容MySQL协议和标准SQL

  • 支持Rollup Table和Base Table的智能路由

  • 支持Schema在线变更

  • 丰富的数据模型(Aggre、Dup…)

2.1.4 Doris数据模型:

  • Aggregate模型

    • RollUP预聚合,提高查询性能

  • Doris on ES模型:

    • ES任意列检索

2.1.5 DoE高性能的设计:

  • Doris on ES总体架构

  • Doris on ES 比 裸访问ES快的原因

2.2.1 应用实践-架构设计:

2.2.2 实践案例:

    1. 元数据/表管理

  • 元数据存在的必要性:

    • 最优化性能保证

      • Doris on ES 列存尽力而为:需要保证ES index全部开启列存读取

    • 查询性能稳定

      • ES与Doris类型不一致,会导致查询出错,keyword vs bigint

      • 不一致字段Schema,会导致数据同步质量不可控

    • 使用效率

      • ES建index、Doris建表需要配套

      • ES新增字段,Doris表重建

      • Doris建表、Rollup...

    • 其他

      • Flink SQL强依赖元数据构建DDL

  • 方案:

    • 统一数据模型 <env, db, table -> Fields & Index & Storage>

    • Json-Schema 约束列值域

  • 效果:

    • 查询效率保障

      • 100% 列存访问

    • 查询稳定性

      • 由于数据质量问题导致的异常:0 CASE

    • 运维效率

      • 平台化表管理:CreatTable/AlterTable/RollUP/…

    • 提高系统自动化、稳定性的基础

      • Openapi/Flink……

    2. 写操作

  • Upserts

    • 表抽象为Env/DB/Table, 统一数据模型

    • JsonSchema 校验,保证数据质量

    • 自动写入Meta字段,提高Debug能力

    • UpdateTime/IndexID/…

    • _version做版本控制,避免乱序覆盖

    • Monitor

  • Upserts – 乱序流写入下的问题背景:

  • 问题:

    • 离线修数据和实时流写入同一个Table(ES index),导致乱序覆盖

    • 修数数据规模大,避免乱序只能牺牲写入的时效性

  • 解决:

    • 修数流、实时流隔离,写入各自topic

    • 数据同步服务基于topic限速消费

    • 基于_id & field => _version,对字段级做版本管理

  • 效果:

    • 数据正确性&时效性得到兼顾

    3. 读操作:

  • Query

    • Sql语义。业务方最大效率使用数据

    • Sql缓存,解决 F5刷新、系统Bug、重复Sql执行等场景的性能和稳定性问题

    • 系统参数,如query_timeout……

    • 某业务线上线后,访问doris规模下降90+%,TP99延迟下降40倍(16s->400ms),CPU IDLE 50% 提高到 95%

  • 业务场景:

    • 统计某个学部下(各个老师)的学生上课情况:上课人数…

  • 微批模式调度:

    4. 其他实践:

  • ADS层表慎用join

  • DoE参数

    • ES扫描超时(默认5s):es_http_timeout_ms = 300000

    • batch_size = 4096 max: 30w/s

  • bitmap计算重

    • parallel_fragment_exec_instance_num: 5(分桶/机器)

  • 运维

    • Supervisor

    • ulimit –c unlimited / …

    • master版本

    • bugfix及时

    • 新feature引入:issue、case 回归、自动化沉淀、小流量……

三、未来规划

Doris on ES:

    多表Join性能

    表分区能力

    Schema同步

    更多的谓词下推: count…

......

写在最后:

    关于实时数仓的技术架构,企业根据自己的业务场景都有着各种各样的不同。Doris也是目前我工作中涉及到的,作为学习和记录,并且站在巨人的肩膀上,对好的技术文章进行总结、归纳。

    书山有路勤为径。所有成功人士的成功都不是一蹴而就的,希望兄弟们也一直保持着不断攀登的劲头儿,不断走向人生巅峰。

    文章整理不易,希望兄弟们多支持。识别下方二维码,关注后,点击“资料获取”,即可获取免费学习资料,并且资料在不断更新中。记得关注、点赞、收藏哦~

往期推荐

基于阿里OneData思想,深入剖析数据仓库方法论

ClickHouse如何在字节跳动内部演化的

快手基于Flink构建实时数仓场景‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

点分享

点收藏

点点赞

点在看

这篇关于作业帮实时数仓架构中的Doris是如何发挥神威的,一文玩儿透(建议收藏)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/384096

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

创业者该如何设计公司的股权架构

本文来自七八点联合IT橘子和车库咖啡的一系列关于设计公司股权结构的讲座。 主讲人何德文: 在公司发展的不同阶段,创业者都会面临公司股权架构设计问题: 1.合伙人合伙创业第一天,就会面临股权架构设计问题(合伙人股权设计); 2.公司早期要引入天使资金,会面临股权架构设计问题(天使融资); 3.公司有三五十号人,要激励中层管理与重要技术人员和公司长期走下去,会面临股权架构设计问题(员工股权激

为何我建议你学会抄代码?

文章目录 为何我建议你学会抄代码?一、引言二、抄代码的艺术1、理解抄代码的真正含义1.1、抄代码的好处 2、如何有效地抄代码2.1、发现问题2.2、整理需求2.3、造轮子标准流程 三、抄代码的实践案例1、发现问题2、整理需求3、设计重试机制4、实现重试工具类5、使用重试工具类6、优化和扩展 四、总结 为何我建议你学会抄代码? 一、引言 在编程的世界中,“抄代码” 常被视为一

【系统架构设计师】黑板架构详解

黑板架构(Blackboard Architecture)是一种软件架构模式,它模仿了多个专家系统协作解决问题的场景。在这种架构中,“黑板”作为一个中央知识库,存储了问题的当前状态以及所有的解决方案和部分解决方案。黑板架构特别适合于解决那些没有确定算法、需要多个知识源(或称为“专家”)共同作用才能解决的复杂问题。 一、黑板架构的组成 黑板架构主要由以下几个部分组成: 黑板(Blackboa

Java后端微服务架构下的API限流策略:Guava RateLimiter

Java后端微服务架构下的API限流策略:Guava RateLimiter 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在微服务架构中,API限流是保护服务不受过度使用和拒绝服务攻击的重要手段。Guava RateLimiter是Google开源的Java库中的一个组件,提供了简单易用的限流功能。 API限流概述 API限流通过控制请求的速率来防止