服务器 频道

SelectDB肖康:Apache Doris在日志存储与分析场景的实践

  本文根据肖康在【第十三届中国数据库技术大会(DTCC2022)】线上演讲内容整理而成。

  基于Apache Doris大数据实时MPP数据库,构建新一代云原生实时数仓,充分发挥Apache Doris高性能、易用MPP引擎能力和云计算极致弹性,解决海量日志等半结构化、非结构化数据存储成本高、分析困难的痛点。

  Apache Doris基本介绍

  Apache Doris是一个基于MPP架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。

  基于此,Apache Doris在多维报表、即席查询、用户画像、实时大屏、日志分析、数据湖查询加速等诸多业务领域都能得到很好应用。

  Apache Doris于2022年6月成功从Apache孵化器毕业,正式成为ApacheTOP项目,截止目前Apache Doris社区已经聚集了来自不同行业百余家企业的超400位贡献者,每月活跃贡献者人数也接近100位。

  Apache Doris如今在中国乃至全球范围内都拥有着广泛的用户群体,截止目前,Apache Doris已经在全球范围内1000家企业的生产环境中得到应用。

  在中国市值或估值排行前50的互联网公司中,有超过80%长期使用Apache Doris,包括百度、美团、小米、京东、字节跳动、腾讯、快手、网易、微博、新浪、360等,同时在一些传统行业如金融、能源、制造、电信等领域也有着丰富的应用。  

  Apache Doris的定位是极速易用实时统一的多模分析型数据库。不同类型的数据源经过ETL,让数据进入Doris,可以进行面向企业内部或外部的BI分析、日志分析等,还可以直接对存储在湖仓中的数据进行查询。用户可以通过 Apache Doris 构建多种不同场景的数据分析服务、同时支撑在线与离线的业务负载、高吞吐的交互式分析与高并发的点查询;通过一套架构实现湖和仓的统一、在数据湖和多种异构存储之上提供无缝且极速的分析服务;也可通过对日志/文本等半结构化乃至非结构化的多模数据进行统一管理和分析、来满足更多样化数据分析的需求。

  Apache Doris在易用性方面有很大特色,其跟MySQL协议高度兼容,MySQL应用可以直接对接。

  典型日志存储与分析场景

  在日志存储与分析场景,很多数据如用户程序、审计日志等数据都需要实时写入进行统一存储与实时分析,日志对于保障系统、业务稳定性至关重要,常用于故障排查、监控告警等。

  日志存储与分析场景具有三大特点:

  1,数据写入吞吐量大,还要实时可见;

  2,数据存储量大,还要成本低;

  3,交互式查询速度快,且需要支持文本检索、时间排序。

  目前典型方案有两大类:一类是以ES为代表的倒排索引检索架构,另一类是以Loki为代表的元数据索引/无索引架构。  

  具体分析如下:ES在实时写入吞吐方面较弱,在存储规模方面ES一般采用存算一体架构,数据存在本地,扩展规模有一定限制,存储成本较高,但ES在交互式查询性能上表现更好更快;而Loki在实时写入吞吐方面更高,存储规模更大,存储成本更低,但在交互式查询性能上表现更慢。

  简单对比总结:ES为代表的索引架构优化查询性能,牺牲写入性能和存储空间;Loki为代表的无索引架构优化写入性能和存储空间,牺牲查询性能。

  那么问题来了:优化这个牺牲那个,是不是头痛医头脚痛医脚了?倒排索引是0-1选择吗,它是问题的全部吗?最为回顾,向量化计算成熟前,是不是都认为OLAP加速要靠预计算,而后来向量化加速是不是打破了固有认知? 在日志存储分析领域,我们也找到了突破点。

  日志场景解决方案

  作为 ApacheDoris的商业化公司,SelectDB团队基于 ApacheDoris内核开发了云原生版本 SelectDBCloud,并推出了面向日志分析场景的解决方案。

  基于以上问题,日志场景解决方案的想法基于Doris高性能向量化引擎底座,再加上SelectDB存算分离架构、轻量级倒排索引和时序数据管理达到更好的效果。  

  举例:在上游写入方面,我们配置Logstash使用内置的http output plugin将数据写入SelectDB。  

  在下游查询方面,可观测性:Grafana中使用内置MySQL数据源,导入已有模板配置可视化日志看板、检索界面;商业智能:Superset等BI工具通过MySQL协议,即可开箱即用访问SelectDB进行可视化BI分析。

  性能测试效果如下:  

  测试说明:

  1,测试环境是3台16c 64g云主机组成的集群

  2,测试数据和测试case来源于ES官方性能benchmark中http_logs,数据总量32GB,2.47亿行

  3,查询时间是ES官方性能benchmark中的11个query,每个串行执行100次的总时间

  4,写入速度越高越好,磁盘空间越低越好,查询时间越低越好

  性能测试结果显示:在写入速度方面,SelectDB达到ES的4.2倍,存储空间只需要ES的五分之一,查询性能是ES的2倍。

  关键技术解析

  关键技术1:MPP查询与向量化引擎

  在向量化方面,我们把行式变成了列式内存布局,向量化计算框架大幅减少虚函数调用,大幅提升cache命中率。高效利用SIMD指令。在宽表聚合场景下性能提升5-10倍。  

  针对MPP查询引擎,我们采用分布式MPP的查询框架,节点间和节点内都并行执行,大幅提升效率,支持大表的shuffle分布式join。

  关键技术2:多重算子优化与查询优化器

  在算子优化方面,采用自适应两阶段聚合算子优化,JOIN/TOPN runtime filter优化为连接列生成filter推到左表,支持in/min/max/bf等filter,filter自动穿透到最底层,SSB部分查询依赖RF有2-10倍提升。

  在查询优化器方面,新一代智能优化器(Nereids)支持CBO和RBO,RBO常见规则常量折叠、子查询改写、谓词下推等,CBO支持Join Reorder。  

  值得一提的是,在性能方面我们取得佳绩,多项指标登顶ClickBenck,在近半数SQL在所有产品中更优,查询总耗时远低于行业竞品。

  关键技术3:轻量级倒排索引

  支持快速检索,支持文本检索、普通数值/日期查找,支持多条件AND OR组合;扩展数据库引擎,内置倒排索引,避免了外挂式的跨系统通信、冗余存储。

  为日志场景精简优化索引结构,简化norm、score等,采用bitmap等优化倒排表;列式存储+ ZSTD高效压缩算法,本身列式存储压缩率高,zstd比gzip快5倍且压缩率更高,数据和索引都进行压缩;采用C++和向量化的高性能实现,单核吞吐>20MB/s vs ES 5MB/s。  

  关键技术4:存算分离云原生架构

  在云服务方面的重要关键点包括,存算分离,以对象存储为主存储;共享缓存,写入即缓存提高性能;弹性扩展,利用云的弹性加速查询;负载隔离,避免业务互相影响。  

  这样做的好处是将存储成本大幅降低,我们认为,存储成本=存储空间*单位成本。

  在存储空间方面,我们将原始数据行存变成了列式存储,将复杂倒排索引变成了专为日志简化的索引,将普通压缩算法变成了日志高压缩比;

  在单位成本方面,我们将原有的冷热数据全本地盘变成了冷热分离,将存储计算同步扩容变成了存储分离独立扩容。

  这样的效果实现了存储空间降至五分之一,单位成本降至三分之一,最终实现存储成本降至十五分之一,达到突破性的一个量级降低。

  关键技术5:高吞吐实时写入

  我们让客户端进行实时小批量写入,在SelectDB服务端进行攒批,可实现秒级flush可见,向量化索引吞吐几十GB/s,写放大更优的时序compaction。  

  关键技术6:快速交互式查询

  快速交互式查询面临两大挑战:挑战一,如何从海量日志中全文检索关键词;挑战二:如何从时间排序取满足条件的最新N条日志。  

  针对挑战一,我们基于分区、主键的时间范围快速跳过,基于倒排索引的全文检索精确定位;针对挑战二,我们按时间排序的时序存储模型,动态剪枝的TopN查询算法。最终实现百亿日志检索秒级响应。

  关于开源

  SelectDB一直秉承开源开放的价值观,对于上面介绍的倒排索引、TopN优化、时序Compaction优化等关键技术,已经贡献到ApacheDoris社区,预计在2023年Q1的Doris 2.0版本中正式发布,2月份也会开放Doris 2.0 preview版本供大家试用,欢迎刚兴趣的朋友们参与试用和技术交流,一起繁荣ApacheDoris社区。

  嘉宾介绍  

肖康

SelectDB联合创始人兼技术副总裁

  2009年至2012年在百度从事Hadoop平台研究与建设,2012开始先后在360、奇安信负责大数据平台,研发基于MPP架构的安全大数据引擎,构建全球最大的网络安全大数据。2022年联合创立SelectDB,致力于研发新一代云原生实时数仓。

0
相关文章