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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*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

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
1月前
|
负载均衡 大数据
大数据散列分区查询频率
大数据散列分区查询频率
22 5
|
9天前
|
分布式计算 DataWorks 搜索推荐
DataWorks产品评测:大数据开发治理平台的最佳实践与体验
DataWorks是阿里云推出的一款大数据开发治理平台,集成了多种大数据引擎,支持数据集成、开发、分析和任务调度。本文通过用户画像分析的最佳实践,评测了DataWorks的功能和使用体验,并提出了优化建议。通过实践,DataWorks在数据整合、清洗及可视化方面表现出色,适合企业高效管理和分析数据。
62 0
|
1月前
|
存储 大数据 数据管理
大数据分区提高查询性能
大数据分区提高查询性能
34 2
|
1月前
|
存储 负载均衡 大数据
大数据水平分区提高查询性能
【11月更文挑战第2天】
41 4
|
2月前
|
存储 分布式计算 druid
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
74 1
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
|
2月前
|
SQL 存储 分布式计算
大数据-157 Apache Kylin 背景 历程 特点 场景 架构 组件 详解
大数据-157 Apache Kylin 背景 历程 特点 场景 架构 组件 详解
46 9
|
2月前
|
存储 JSON 监控
大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询
大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询
61 4
|
2月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
75 4
ly~
|
2月前
|
供应链 监控 搜索推荐
大数据的应用场景
大数据在众多行业中的应用场景广泛,涵盖金融、零售、医疗保健、交通物流、制造、能源、政府公共服务及教育等领域。在金融行业,大数据用于风险评估、精准营销、反欺诈以及决策支持;零售业则应用于商品推荐、供应链管理和门店运营优化等;医疗保健领域利用大数据进行疾病预测、辅助诊断和医疗质量评估;交通物流业通过大数据优化物流配送、交通管理和运输安全;制造业则在生产过程优化、设备维护和供应链协同方面受益;能源行业运用大数据提升智能电网管理和能源勘探效率;政府和公共服务部门借助大数据改善城市管理、政务服务及公共安全;教育行业通过大数据实现个性化学习和资源优化配置;体育娱乐业则利用大数据提升赛事分析和娱乐制作水平。
ly~
734 2
|
1月前
|
数据采集 分布式计算 OLAP
最佳实践:AnalyticDB在企业级大数据分析中的应用案例
【10月更文挑战第22天】在数字化转型的大潮中,企业对数据的依赖程度越来越高。如何高效地处理和分析海量数据,从中提取有价值的洞察,成为企业竞争力的关键。作为阿里云推出的一款实时OLAP数据库服务,AnalyticDB(ADB)凭借其强大的数据处理能力和亚秒级的查询响应时间,已经在多个行业和业务场景中得到了广泛应用。本文将从个人的角度出发,分享多个成功案例,展示AnalyticDB如何助力企业在广告投放效果分析、用户行为追踪、财务报表生成等领域实现高效的数据处理与洞察发现。
77 0

相关产品

  • 云原生大数据计算服务 MaxCompute