MaxCompute Bloomfilter index 在蚂蚁安全溯源场景大规模点查询的最佳实践

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: MaxCompute 在11月最新版本中全新上线了 Bloomfilter index 能力,针对大规模数据点查场景,支持更细粒度的数据裁剪,减少查询过程中不必要的数据扫描,从而提高整体的查询效率和性能。

业务背景

应急溯源是数据安全的最后一道防线,当出现疑似数据泄露的事件时,必须第一时间展开全面准确的排查,并且快速地组织和同步排查的结果,才能为后续事件的妥善处置和报告争取最大空间。


针对疑似泄露的样本数据,和域内各种数据进行关联,确认样本数据是否为泄露的数据,分析泄露源(如生态商家等),及时进行处置并提供答复口径。 过程中的挑战在于溯源需要扫描数据(如:网关日志、流量数据等),数据规模在PB级别,查询时间分区往往也较多,超过30+。



业务痛点

业务调研中发现,流量溯源明细表以及 OSS 日志表的查询是应急溯源常用场景,经常会出现慢 SQL,查询计算资源消耗大等痛点。现有的优化方案主要基于以下两个方式:


1、基于 Hash cluster/Range cluster 进行聚簇:在等值查询时,将查询 Key 分为256~4096个桶,利用桶裁剪的能力减少查询数据量;


2、基于二级索引表加速:针对一个表存在多种查询诉求(如 OSS 日志表既需要按照 Access_key 又需要按照IP查询),增加二级表将 IP 映射到 hash key 的方式,两层表均通过 Hash cluster/Range cluster 来查询加速。


两种方式各有其弊端,对于方式一,Cluster by 的一两个字段查询表现较好,但无法提效其他字段查询效率;而二级索引表会消耗大量额外的存储空间, 每个二级索引表会占用几十TB到几百TB之间,带来额外的存储成本。



MaxCompute Bloomfilter index 介绍

布隆过滤器(Bloomfilter)是一种高效的概率型数据结构,MaxCompute 在11月最新版本中全新上线了 Bloomfilter index 能力,针对大规模数据点查场景,支持更细粒度的数据裁剪,减少查询过程中不必要的数据扫描,从而提高整体的查询效率和性能。


大规模点查场景

大规模点查是一种常见的数仓使用场景,通常会通过指定不定列的值对大量数据进行检索,得到条件匹配的结果。MaxCompute 是一个 EB 级的数据仓库解决方案,存储了集团内外的海量数据。在 MaxCompute 上不仅仅运行了大量的 ETL 作业,也运行了不少点查任务如:

  • 查询某个用户最近一周的外卖记录
  • 查询最近一周新注册的用户在母婴类的查询记录
  • 查询手机号为xxx的用户信息


以下是一个点查的典型例子:
image.png


在这些情况下用户都会有这样一个疑惑:我查询的目标数据只有几条,但是为什么在 MaxCompute 中却需要大量的资源,并且需要相当长的计算时间才能得到结果?这是因为在这些情况下虽然会有谓词下推到存储层做过滤,但是由于以下原因仍可能读大量数据及消耗大量资源以便找出符合条件的数据:

  • 过滤依赖于文件中保存的列的 min/max 值,数据分散的情况下,谓词下推后过滤效果不佳,甚至无法过滤任何数据
  • 仍需按照表或者分区的全量数据申请资源


当前聚簇方式的痛点

在 MaxCompute 中支持 Hash Clustering Range Clustering 两种聚簇索引(Clustered Index)。这两种索引会把数据按照指定的字段(称为cluster key)分散到不同的桶里面,桶与桶之间没有数据重叠,并且桶内部也会根据指定的字段进行排序。在查询时,将 Clustering Key 作为过滤条件,这样可以快速排除掉不需要读取的分桶,在分桶内也可以过滤掉不需要读取的数据,加快查询速度。但是聚簇表在以下几方面仍有不足:

  • 对于 Hash 聚簇表,只有当查询条件包含了所有的 Clustering Key 之后才能进行数据过滤;对于 Range 聚簇表,只有当查询条件中包含了 Clustering Key 的前缀过滤条件,并且按照 Clustering Key 的顺序从左到右进行匹配时,才能有较好的过滤效果,如果不包含前缀过滤条件则效果不佳。
  • 如果查询条件不包含 Clustering Key 则没有过滤效果,因而对于查询无固定条件的表来说,聚簇表可能无效。
  • 数据写入时需要按照指定的字段进行 Shuffle,会导致成本增加,如果遇到个别倾斜的 Key,会导致任务长尾。


MaxCompute Bloomfilter 能力优势

点查本质上是检索某一个元素是否存在于一个集合中。不同于数据库中的索引(如BTree、RTree等)用来具体定位到某一行记录,大数据下基于索引构建、维护代价的考虑,更多的是引入更轻量级的索引,而空间效率和查询效率都非常高的 Bloomfilter 很适合在点查场景进行文件的裁剪,在数据库以及数据湖技术中均广凡引入 Bloomfilter index,以便支持更细粒度的数据或文件裁剪。


Bloomfilter index 的本质就是对指定的列生成 bloomfilter,然后存储起来,供系统来判断值是否会在对应的集合里命中。相对聚簇表,Bloomfilter index 的优势如下:

  • 高效,插入和查询操作的资源消耗都比普通索引低,能以极小的代价过滤无效数据;
  • 在高基数、数据分布紧凑的场景下有很好的过滤效果;
  • 扩展性高,可以对表的一列或者多列建立 BF 索引,且可以和聚簇索引配合使用,即可以对非 Clustering Key 建立 Bloomfilter 索引。



蚂蚁安全溯源最佳实践

测试环境

主要包含以下两张业务表:

1、大规模等值测试-流量溯源明细表:Tracing 表的 si_value 列存放的是用户敏感值,比如手机号、id。溯源场景中存在泄露风险的数据也是敏感信息,通过 Tracing 表的 si_value 字段,就可以查到该敏感值所有访问记录。


2、热点值查询-OSS日志表:OSS 日志表的 Access_id 是应用的访问 key,一般 AK 泄露场景时会把某个 Access_id 的所有请求 OSS 的日志捞出来,然后分析 AK 是否被某个应用泄露。


使用示例

-- 1、建表
create table test_oss_backend_hi_1 like dwd_sec_evt_oss_backend_hi LIFECYCLE 180;
desc EXTENDED test_oss_backend_hi_1;
DROP TABLE ap_asec_ahunt_sys_dev.test_oss_backend_hi_1;

-- 2、创建bloomfilter index
CREATE BLOOMFILTER INDEX access_id_idx
ON test_oss_backend_hi_1
FOR COLUMNS(access_id)
IDXPROPERTIES('fpp' = '0.00005', 'numitems'='100000000')
COMMENT 'access_id index'
;
SHOW INDEXES ON test_oss_backend_hi_1;

-- 3、写入数据(需要放在创建索引之后运行)
INSERT OVERWRITE TABLE test_oss_backend_hi_1 PARTITION (dt = '20230424', hour = '10')
SELECT  *
FROM    dwd_sec_evt_oss_backend_hi
WHERE   dt = '20230424'
AND     hour = '10';

-- 4、查一个热点key -- 1024
set odps.sql.enable.bloom.filter.index=true;
SELECT  * from test_oss_backend_hi_1 where access_id = 'LTAIIQ3X1Mr1JAFd' and dt='20230424' and hour='10';


执行情况

image.png

在 Logview 中可以看到,inputs 部分 test_oss_backend_hi_1_bf 为 Bloomfilter 虚拟表,其中包含 4096 个记录数代表源表中包含4096个文件,3606471214 bytes 为 Bloomfilter 虚拟表大小。


Job1 M1过程从 Bloomfilter 虚拟表的4096个记录中筛选出891条记录,即经过 Bloomfilter index 过滤后,源表中仅有891个文件符合条件;随后将其作为 Job2 M1的输入,这891个过滤出来的文件对应源表 test_oss_backend_hi_1 中的9500000 (13341193497 bytes)条记录,最终从这些记录中筛选出精准的1024条数据。


测试结果对比

方案1:源表 + 二级索引方案

方案2:源表 + Bloomfilter Index 方案


测试结果表明:Bloomfilter index 可以替代二级索引表,整体存储有45%+下降,Bloomfilter index 在单热点值查询中计算耗时都是表现最佳的。

数据阶段

数据写入阶段

数据写入阶段

测试场景

OSS日志表为写入实验对象

热点值查询-OSS日志表(AK access_id)

耗时

方案2 < 方案1

不论 Bloomfilter 文件级别还是 Rowgroup 方式,耗时均小于二级索引

成本

计算

方案2相比方案1

源表建设过程不变

索引建设过程减少99%

不论 Bloomfilter 文件级别还是 Rowgroup 方式,耗时均小于二级索引

存储

方案2相比方案1,降低约2PB每月存储,节约8.3w/月存储成本


虽然 Bloomfilter Index 构建后会占用额外的存储空间,这部分计量按普通存储收费。从下表中可以看到改造到方案2后带来的整体存储和计算 CU 减少:

改造链路

表数量

改造后存储影响TB/日

改造后计算影响CU/日

新增BF_INDEX

3张表

+457

+0

汰换二级索引表

9张表

-2529.73

-120.97

合计

-2072.73

-120.97


总结

MaxCompute 作为阿里自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个 BU 的核心业务。MaxCompute 在致力于提升 SQL 语言的用户体验和表达能力的同时,也在持续进行性能优化,并推出更多的功能提高广大 ODPS 客户的生产力和生产效率。


在蚂蚁安全溯源的大规模点查场景,基于传统聚簇方式与二级索引方式,均无法很好的解决业务查询效率与成本问题,通过 MaxCompute 全新引入的轻量级 Bloomfilter index 能力,提供了更高的空间效率和查询效率,不仅降低了业务的查询耗时,也避免了构建二级索引带来的大量存储消耗,为业务限制降低了成本。


更多Bloomfilter Index使用说明详见官网产品文档:https://help.aliyun.com/zh/maxcompute/user-guide/bloomfilter-index-beta-version



MaxCompute 用户交流钉群

image.png

相关文章
|
20小时前
|
调度 云计算 芯片
云超算技术跃进,阿里云牵头制定我国首个云超算国家标准
近日,由阿里云联合中国电子技术标准化研究院主导制定的首个云超算国家标准已完成报批,不久后将正式批准发布。标准规定了云超算服务涉及的云计算基础资源、资源管理、运行和调度等方面的技术要求,为云超算服务产品的设计、实现、应用和选型提供指导,为云超算在HPC应用和用户的大范围采用奠定了基础。
|
7天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
9天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
8605 20
|
13天前
|
Cloud Native Apache 流计算
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
4607 11
资料合集|Flink Forward Asia 2024 上海站
|
13天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
21天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
9天前
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
|
9天前
|
消息中间件 人工智能 运维
12月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
770 46
|
6天前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
642 243
|
3天前
|
弹性计算 运维 监控
云服务测评 | 基于云服务诊断全方位监管云产品
本文介绍了阿里云的云服务诊断功能,包括健康状态和诊断两大核心功能。作者通过个人账号体验了该服务,指出其在监控云资源状态和快速排查异常方面的优势,同时也提出了一些改进建议,如增加告警配置入口和扩大诊断范围等。