更多精彩内容,欢迎观看:
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(1):https://developer.aliyun.com/article/1405710
存储成本降低近40%
在看到写入性能的大幅提升后,Apache Doris存储空间占用也给我们带来了惊喜。在开启倒排索引的前提下,存储空间比原系统不具备倒排索引还要略低,压缩比从1:4.3提高至1:5.7。
通过对比 Apache Doris 在磁盘上存储的文件大小,同一份数据的索引文件(.idx)与数据文件(.dat)大小相差无几。换言而之,增加索引后Doris数据膨胀率大约在1倍左右,与许多数据库和检索引擎3-5倍的膨胀率相比, Doris 的数据存储空间占用相对较低。经过研究发现,ApacheDoris 采用了列式存储和ZSTD 压缩算法来优化存储空间占用。Doris 将原始数据和倒排索引都以列的形式存储,使同一列的数据被存储在相邻位置,从而实现了更高的压缩率。
ZSTD 是一个优秀的新型压缩算法,使用了智能优化算法,相较于常见的 GZIP 算法, ZSTD 具
有更高的压缩率更和更快的压缩解压速度,尤其在处理日志场景时表现非常出色。
查询性能平均提升690%
对于业务最关注的查询性能,我们从线上查询日志进行去重后分析出79条SQL,在同一天总数据(1000亿条) 、同样规模的集群(10BE 节点)上对比测试Apache Doris与原系统的查询耗时。
我们发现,与原系统相比,所有的查询语句均有明显提升,整体查询性能提升近7倍,有26条SQL查询语句性能提升10倍以上,其中8条 SQL 查询提升10-20倍、14条 SQL 查询提升20-50倍、还有4条SQL 查询提升50倍以上。最大差异的一条SQL 查询语句为Q43,在原系统中执行时间接近一分钟,在Apache Doris 中仅需不到1秒,其性能差异高达到88倍。
针对性能提升幅度高的查询,我们进行了对比分析并发现了其中几个共同点:
1.倒排索引对关键词查找的加速: Q23、Q24、Q30、Q31、Q42、Q43、Q50等
- - 例 如q43 提升88.2倍 SELECT count()from table2 WHERE(event_time >=1693065600000 and event_time <1693152000000) AND(rule_hit_big MATCH'xxxx');
倒排索引的原理是在数据写入时将每一行文本切分成单词,并在索引中记录每个单词在哪些行出 现过,例如下图中的"machine" 在第127 和201 行出现过,当需要检索包含某个词的数据时,只需要在索引中查这个词在哪些行出现,将对应行号的数据读取出来即可。
这种基于倒排索引进行关键词检索的技术,相较于基本的暴力扫描后进行文本匹配具有显著的优势, 一方面极大地减少了需要读取的数据量;另一方面,在查询过程中无需进行文本匹配操作,因此查询效率往往提升一个数量级甚至更高。
2.NGram BloomFilter索引对LIKE的加速:Q75、Q76、Q77、Q78 等
- - 例 如q75 提升44 . 4倍 SELECT *FROM tablel WHERE ent_id ='xxxxx' AND event_date ='2023-08-27' AND file_level =70 AND rule_group_id LIKE 'adid:%' ORDER BY event_time LIMIT 100;
对于要查找的非一个完整关键词的场景, LIKE 仍然是有用的查询方式, Apache Doris 的NGram BloomFilter 索引能对常规的 LIKE 进行加速。
NGram BloomFilter 索引与普通 BloomFilter 索引不同,它不是将整个文本放入 BloomFilter, 而是将文本分成连续的子串,每个子串长度为 n,并将他们放入 NGram BloomFilter 中。对于cola LIKE '%pattern%'的查询,将'pattern ' 按照同样的方式分成长度为 n的子串,判断每个子串在中是否存在,如果有一个子串不存在,则说明 BloomFilter 对应的数据块中没有跟'pattern '匹配的数据块,因此通过跳过数据块扫描的步骤,达到加速查询的效果。
3.满足条件的最新TopN 条日志明细查询优化:Q19-Q29 等
- - 例 如q22, 提升50 .3倍 SELECT *FROM table1 where event_date ='2023-08-27'and file_level =70 and ent_id ='nnnnnnn'and file_name ='xxx.exe' order by event_time limit 100;
这种 SELECT*FROM t WHERE xxx ORDER BY xx LIMITn 的查询,在查找满足某种条件的最新n 条日志时使用频率非常高,ApacheDoris 针对这种 SQL 查询模式进行了专门的优化,根据查询的中间状态确定排序字段的动态范围,并利用自动动态谓词下推的方式,避免读全部数据进行排序取TopN,从而减少需要读取的数据量(有时甚至可以减少一个数量级),进而提升了查询效率。
可视化运维管控和可视化查询WebUl, 最大化减少运维和探索分析成本
为了提高日常集群维护效率,我们使用了飞轮科技免费开放的可视化集群管理工具Cluster ManagerforApacheDoris (以下简称 Doris Manager)。Doris Manager提供的功能可以满足日常运维中集群监控、巡检、修改配置、扩缩容、升级等操作,降低登陆机器手动操作的麻烦和误操作风险。
除了管控ApacheDoris集群之后,Doris Manager还集成了类似Kibana的可视化日志探索分
析WebUl, 对于习惯 ELK 日志分析的用户非常友好,支持关键词检索、趋势图展示、趋势图拖
拽日期范围、明细日志平铺和折叠展示、字段值过滤等交互方便的探索式分析,跟日志场景探索
下钻的分析需求很契合。
总结与规划
在跟随Apache Doris 2.0-alpha,2.0-beta,2.0正式版本发布的节奏,我们根据业务场景进行了详细的评测,也为社区反馈了不少优化建议,得到社区的积极响应和解决。系统经历试运行一个月之后,我们将2.0.1版本正式用于生产环境,替换了原系统集群,完成架构升级改造,实现了写入性能、查询性能、存储成本、运维成本等多方面收益:
● 写入性能提升3倍以上:目前,奇安信日志分析平台每日平均有数千亿的新增安全日志数据,通过 Doris 的 Routine Load 将数据实时稳定写入库,保障数据低延迟高吞吐写入。
● 查询性能平均提升7倍:查询响应时间大幅减少,与之前的查询效率相比达到平均7倍提升,其中业务特别关注的全文检索速度达到20倍以上的提升,助力日志分析与网络安全运营效率。
●高效便捷的可视化管理:Cluster Managerfor Apache Doris工具提供了可视化集群监控告警平台,满足日常集群监控等一系列操作,同时WebUl 多种功能为分析人员提供了操作简 单、使用便捷的交互式分析。总而言之, Doris 的易用性、灵活性大幅降低了开发、运维、分析人员的学习与使用成本。
后续我们还将在日志分析场景下探索更多Apache Doris 的能力。我们将扩大 JSON 数据类型的 相关应用,加强系统对于半结构化数据深度分析的能力。同时,我们也非常期待 Apache Doris 2.1版本中新增的 Variant 可变数据类型,支持存储任意结构的JSON 数据,支持字段个数与类型的变化,让业务人员灵活定义特殊字符,以更好地实现半结构数据Schema Free分析需求。
非常感谢SelectDB 团队一直以来对我们的技术支持,助力奇安信走向“体系化防御、数字化运营”的网络日志安全管理,帮助客户准确识别、保护和监管网络设备与各类系统,确保业务人员在任何时候都能够安全、可信、稳定地访问数据与业务。
最后,我们也将持续参与到 Apache Doris 社区建设中,将相关成果贡献回馈社区,希望
Apache Doris飞速发展,越来越好!