导读: MOKA 首要有两大事务线 MOKA 招聘(智能化招聘办理体系)和 MOKA People(智能化人力资源办理体系),MOKA BI 通过全方位数据核算和可灵敏装备的实时报表,赋能于智能化招聘办理体系和人力资源办理体系。为了供给更齐备的数据支撑,助力企业提高招聘竞争力,MOKA 引进功能强悍的 Apache Doris 对前期架构进行晋级转型,成就了 Moka BI 强壮的功能与优异的用户体会。

作者Moka 数据架构师张宝铭、SelectDB 内容团队

事务需求

MOKA 首要有两大事务线 MOKA 招聘(智能化招聘办理体系)和 MOKA People(智能化人力资源办理体系)。

  • MOKA 招聘体系覆盖社招、校招、内推、猎头办理等场景,让 HR 取得更高效的招聘体会,更快捷的协作体会,让办理者取得招聘数据洞见,让招聘降本增效的一起,建立企业在候选人心目中的专业形象。
  • MOKA People 覆盖企业所需求的安排人事、假期考勤、薪酬、绩效、审批等高频事务场景,打通从招聘到人力资源办理的全流程,为 HR 工作提效赋能。通过多维度数据洞见,助力办理者高效科学决策。全生态对接,更加重视全员体会,是一款工作体会更愉悦的人力资源办理体系。

而 MOKA BI 通过全方位数据核算和可灵敏装备的实时报表,赋能于智能化招聘办理体系和人力资源办理体系。通过 PC 端和移动端的多样化报表展示,为企业改进招聘事务供给数据支撑,全面提高招聘竞争力,然后助力科学决策。

查询提速 20 倍,Apache Doris 在 Moka BI SaaS 服务场景下的应用实践

MOKA BI 前期架构

查询提速 20 倍,Apache Doris 在 Moka BI SaaS 服务场景下的应用实践

Moka BI 数仓前期架构是类 Lambda 架构,实时处理和离线处理并存。

  • 实时部分数据首要来历为结构化的数据,Canal 采集 MySQL 或 DBLE(依据 MySQL 的分布式中间件)的 Binlog 输出至 Kafka 中;未建模的数据依照公司分库,存储在事务 DBLE 中,通过 Flink 进行实时建模,将核算后的数据实时写入事务 DBLE 库,通过 DBLE 供给报表查询才能,支撑数据大屏和实时报表核算。

  • 离线部分涵盖了实时部分数据,其结构化数据来历于 DBLE 的 Binlog,明细数据在 Hbase 中实时更新,并映射成 Hive 表,非结构化数据通过 ETL 流程,存储至 Hive 中,通过 Spark 进行进行离线部分建模核算,离线数仓 ADS 层数据输出至 MySQL 和 Redis 支撑离线报表核算,明细数据又为方针预测和搜索等外部运用供给数据支撑。

现状与问题

在前期数仓架构中,为了完结实时建模以及实时报表查询功能,就必须要求底层数据库可以承载事务数据的频繁刺进、更新及删去操作,并要求支撑规范 SQL,因而当时咱们挑选 DBLE 作为数据存储、建模、查询的底层库。前期 Moka BI 灰度期用户较少,事务数据量以及报表的运用量都比较低,DBLE 尚能满意事务需求,但跟着 Moka BI 逐步面向一切用户开放,DBLE 逐步无法习惯 BI 报表的查询剖析功能要求,一起实时与离线架构别离、存储本钱高且数据不易保护,亟需进行晋级转型。

技能选型

为匹配事务飞速增长的要求、满意更杂乱的查询需求,咱们决议引进一款功能杰出的 OLAP 引擎对 Moka BI 进行晋级改造。一起出于多样化剖析场景的考虑,咱们期望其可以支撑更广泛的运用场景。调研的首要方向包括 报表的实时查询才能、数据的更新才能、规范的查询 SQL 以及数据库的可保护性、扩展性、安稳性等。

查询提速 20 倍,Apache Doris 在 Moka BI SaaS 服务场景下的应用实践

确认调研方向后,咱们首先对 Greenplum 展开了调研,其特点首要是数据加载和批量 DML 处理快,但受限于主从双层架构设计、存在功能瓶颈,且并发才能很有限、功能跟着并发量添加而快速下降,一起其运用的是 PG 语法、不支撑 MySQL 语法,在进行引擎切换时本钱较高,因而在基本功能调研完毕后便不再考虑运用。

随后咱们对 ClickHouse 进行了调研,ClickHouse 在单表查询场景下功能体现十分优异的,但是在多表 Join 场景中功能体现不尽如人意,别的 ClickHouse 短少数据实时更新和删去的才能,仅适用于批量删去或修改数据,一起 ClickHouse 对 SQL 的支撑也比较有限,运用起来需求一定的学习本钱。

紧接着咱们对近几年势不可当的 Apache Doris 进行了调研,在调研中发现,Doris 支撑实时导入,一起也支撑数据的实时更新与删去,可以完结 Exactly-Once 语义;其次,在实时查询方面,Doris 可以完结秒级查询,且在多表 Join 才能的支撑上更加微弱;除此之外,Doris 简略易用,布置只需两个进程,不依赖其他体系,兼容 MySQL 协议,并且运用规范 SQL ,可快速上手,布置及学习本钱投入均比较低。

Benchmark

在开始调研的根底之上,咱们进一步将 Apache Doris 、Clickhouse 与当下运用的 DBLE 在查询功能上进行了多轮测验比照,查询耗时如下:

查询提速 20 倍,Apache Doris 在 Moka BI SaaS 服务场景下的应用实践

  • 多表 Join:跟着 SQL Join 数量的增多,Doris 和 ClickHouse 功能体现距离越来越大,Doris 的查询推迟比较照较安稳,最长耗时仅为 3.2s;而 ClickHouse 的查询推迟呈现指数增长,最长耗时乃至到达 17.8s,二者功能最高相差 5 倍,DBLE 的查询功能则远不如这两款产品。

  • 慢查询: 在线上慢查询 SQL 的比照测验中,Doris 的功能同样十分安稳,不同的 SQL 查询基本都能在 1s 内回来查询结果,ClickHouse 与之比照查询推迟动摇较大、功能体现很不安稳,二者相同 SQL 功能距离最大超过 10 余倍。

通过以上调研比照,可以看出 Apache Doris 不管是在基本功能上、还是查询功能上体现都更胜一筹,因而咱们将方针锁定了 Doris,并决议赶快引进 Apache Doris 作为 Moka BI 新一代 数仓 架构的查询引擎。

新版架构

查询提速 20 倍,Apache Doris 在 Moka BI SaaS 服务场景下的应用实践

在引进 Doris 之后,Moka BI 数仓架构的首要改变是将 OLAP 和 OLTP 进行别离,即运用 DBLE 支撑数据的实时建模,数据来历于 Moka 体系的事务数据,包含了结构化和半结构化的数据,通过 Flink 读取 DBLE Binlog,完结数据去重、合并后写入 Kafka,Doris 通过 Routine Load 读取 Kafka 完结数据写入,此刻 DBLE 仅作为数据建模组成运用,由 Doris 供给报表查询才能。

依据 Doris 列存储、高并发、高功能等特性,Moka BI 报表选用自助方法构建完结,支撑客户依据需求灵敏装备行、列、挑选的场景。与传统报表按需求定制开发方法比照,这种自助式报表构建十分灵敏,平台开发与需求开发彻底独立,需求完结速度得到极大的提高。

查询提速 20 倍,Apache Doris 在 Moka BI SaaS 服务场景下的应用实践

数据导入方面,数据通过 Routine Load 定时批量导入到 Doris 数据仓库中,确保了数据的准实时同步。通过对体系数据搜集与建模,及时向客户供给最新的事务数据,以协助客户快速了解招聘状况,并做出有效的调整。

数据更新方面,Doris 在大数据量(单表几十亿)的场景下,体现出了杰出的数据更新和删去才能,Moka BI 读取的是事务库的 Binlog 数据,其间有许多的更新以及删去操作,Doris 可以通过 Routine Load 的 Delete 装备完结实时删去,依据 Key 完结幂等性写入,配合 Flink 可以做到真正的 Exactly-Once。在架构中添加了 Routine Load 后,数仓可以完结 1 分钟等级的准实时 一起结合 Routine load + Kafka 可以完结流量的削峰,确保集群安稳,并且可以通过重置 Kafka 偏移量来完结间数据重写,通过 Kafka 完结多点消费等。

数据查询方面,充分利用 Doris 的多表 Join 才能,使得体系可以完结实时查询。咱们将不同的数据表依照相关字段进行衔接,构成一个完整的数据集,依据数据集可进行各种数据剖析和可视化操作,一起可高效应对恣意条件组合的查询场景以及需求灵敏定制需求的查询剖析场景,在某些报表中,需求 Join 的表或许到达几十张,Doris 强壮的 Join 功能,使 Moka BI 的报表查询可以到达秒级响应。

运维办理方面,Doris 布置运维简略便利,不依赖第三方组件,无损弹性扩缩容,自动数据均衡,集群高可用。Doris 集群仅有 FE 和 BE 两个组件,不依赖 Zookeeper 等组件即可完结高可用,布置、运维便利,比较传统的 Hadoop 组件,十分友好,支撑弹性扩容,只需简略装备即可完结无损扩容,并且可以自动负载数据到扩容的节点,大大降低了咱们引进新技能栈的难度和运维压力。

调优实践

新架构实际的落地运用中,咱们总结了一些调优的经验,在此分享给咱们。

在 Moka BI 报表查询权限场景中,同样装备的报表,有权限认证时查询速度比没有权限认证时慢 30% 左右,乃至呈现查询超时,而超管权限查询时则正常,这一现象在数据量较大的客户报表中尤为明显。

人力资源办理事务的数据权限有着极为严格和精密的管控需求,除了 SaaS 事务本身关于不同租户间的数据隔离要求外,还需求针对事务人员的身份角色、办理部分领域以及被办理人员的信息敏感程度对可见数据的规模进行进一步细分,因而在 Moka BI 权限功能模块的设计之时就考虑并完结了极为灵敏的自定义装备化计划。例如 HRBP 与 PayRoll、HRIS 等角色的可见字段不同、不同职级或部分但角色一起用户的可见数据区间不同,一起针对部分敏感的人员信息还需求做数据过滤,或者出于办理授权的需求暂时开通某一权限,乃至以上权限要求还会进行多重的穿插组合,以确保每一用户可检查的数据、报表、信息均被限制在权限规模以内。

因而当用户需求对数据报表进行查询时,会先在 Moka BI 的权限办理模块进行多重验证,验证信息会通过 in 的方法拼接在查询 SQL 中并传递给 OLAP 体系。跟着客户事务体量的增大,关于权限管控的要求越精密、终究所产生的 SQL 就越杂乱,部分事务规模比较大的客户报表会呈现上千乃至更多的权限限制,因而造成 OLAP 体系的 id 过滤时刻变长,导致报表查询推迟添加,给大客户造成了体会不佳。

查询提速 20 倍,Apache Doris 在 Moka BI SaaS 服务场景下的应用实践

处理计划:

为适配该事务场景,咱们通过检查官方的文档发现 Doris Bloom Filter 索引的特功可以很好的处理该问题

查询提速 20 倍,Apache Doris 在 Moka BI SaaS 服务场景下的应用实践

Doris BloomFilter 索引运用场景:

  • BloomFilter 适用于非前缀过滤。
  • 查询会依据该列高频过滤,并且查询条件大多是 in = 过滤。
  • 不同于 Bitmap,BloomFilter 适用于高基数列,比如 UserID。因为如果创建在低基数的列上,比如 “性别” 列,则每个 Block 几乎都会包含一切取值,导致 BloomFilter 索引失去含义。

查询提速 20 倍,Apache Doris 在 Moka BI SaaS 服务场景下的应用实践

通过验证,可以通过上方比照报表看到,将相关 ID 字段添加 BloomFilter 索引后 ,权限验证场景查询速度提高约 30% ,有权限验证的报表超时的问题也得到了改进。

收益与总结

目前 Moka BI Doris 有两个集群, 共 40 台服务器, 数仓 共保护了 400 多张表 ,其间 50 多张表数据量超过 1 亿,总数据量为 T B 等级。

引进 Apache Doris 改造了新的数据仓库之后,满意了日益增长的剖析需求以及对数据实时性的要求,总体收益包含以下几点:

  1. 高功能数据查询: Doris 依据列存储技能,可以快速处理许多的数据,并支撑高并发的在线查询,处理了联系型数据库无法支撑的杂乱查询问题,杂乱 SQL 查询的速度上升了一个数据量级。
  2. 数据仓库 的可扩展性: Doris 选用分布式集群架构,可以通过添加节点来线性提高存储和查询瓶颈,打破了联系型数据库数据单点限制问题,查询功能得以显著提高。
  3. 更广泛的运用: 依据 Doris 构建了一致的数据查询平台,运用不再局限于报表服务,关于离线的查询也有很好的支撑,可以说 Doris 的引进是构建数仓一体化的序幕。
  4. 完结自助式剖析: 依据 Doris 强壮的查询才能,咱们引进了全新的报表构建方法,通过用户自助构建报表方法,可以快速满意用户的各种灵敏需求。

在运用 Doris 的两年多时刻里,Moka BI 与 Apache Doris 一起成长、一起进步,可以说 Doris 成就了 Moka BI 强壮的功能与优异的用户体会;也正是 Moka BI 特别的运用场景,也丰厚了 Doris 的优化方向,咱们提的许多 Issue 与主张,通过版别更新迭代后使其更具竞争力。在未来的时刻里,Moka BI 也会紧跟社区脚步,不断优化、回馈社区,期望 Apache Doris 和 SelectDB 发展越来越好、越来越强壮。