携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情
维度数据
为什么选用ES做维度数据存储引擎?
-
维表数据量级较高,Mysql存储需要做分库分表支持,但是性能无法满足需求
-
更新频率较高,update QPS约1000
-
业务侧需要支持分词模糊检索
综合以上几点,Elasticsearch(ES)引擎能够非常好的解决上述问题。ES拥有强大的分词检索能力,支持较高频率的update操作,和很好的横向扩展能力。其他如Hbase、Redis等都不能满足上述需求。
数据同步ES过程:如上图所示,维度数据原本存储在Mysql引擎,通过伪装的Mysql从库来监听binlog,将维度数据同步到ES。并且有一个检查与恢复的服务做数据同步监控,支持按时间增量check、全量check、增量回刷、全量回刷等操作。
报表引擎
报表引擎架构实现整体分为REFront 和 REQuery两层,REMeta为独立的元数据管理模块。
-
REFront
-
REFront 为统一的查询入口层,特点是轻量级、高可用。
-
核心职能为:查询标记、业务逻辑处理、查询分发、流控、熔断降级。
-
REQuery
-
REQuery 为查询执行层,分组部署,为不同的业务场景提供物理隔离。
-
核心职能为:多引擎适配、多集群路由调度、查询优化、MEM Join、结果分页cache等。
报表引擎通过抽象,在REQuery内部实现MEM Join。支持Druid引擎中的事实数据与ES引擎中的维度数据做关联查询。
为上层业务提供虚拟的cube表查询。屏蔽复杂的跨引擎管理查询逻辑。
基于Doris on ES的架构实现
Mem Join架构遗留的核心问题
Mem Join是单机实现与串行执行,到单次从ES中拉取的数据量超过10W时,响应时间已经接近10s,大户体验差。而且单节点实现大规模数据Join处理,内存消耗大,有Full GC风险。