阿里网盘优质资源分享 阿里云管理控制台( 三 )


多租户实现
为了实现多租户功能,我们把每张库的元数据和阿里云的UID 进行关联,而表的元数据又是和库的元信息关联的 。所以基于这种设计每张库、每张表都是可以对应到具体的用户 。当用户请求元数据的时候,除了需要传进库名和表名,还需要将请求的阿里云UID 带进来,再结合上述关联关系就可以拿到相应用户的元数据 。每个元数据的API 都有一个UID 参数,比如如果我们需要通过getTable 获取某个用户的表信息,整个流程如下:

阿里网盘优质资源分享 阿里云管理控制台


上面的ACCOUNT 是DLA 中存储用户账户信息的表;DBS 和TBLS 是用于存储元数据的表 。虚线代表他们之间的关联关系 。
权限体系
我们知道,一般大型的企业会存在多个不同部门,或者一个比较大的部门需要区分出不同的用户,这些用户之间又需要共享一些资源 。为了解决这个问题,DLA 将阿里云UID 作为主账号,DLA userName 作为子账号来区别每个用户,同一个阿里云UID 下面的不同子用户访问的资源是有限制的,比如主账号用户可以看到所有的元数据;而一般用户只能看到一部分 。为了解决这个问题,DLA Meta 实现了一套完整的权限体系,用户可以通过GRANT/REVOKE 对用户进行相关的权限操作 。
DLA Meta 中所有对外的元数据API 都是有权限校验的,比如Create Database 是需要有全局的Create 或All 权限的 。只有权限校验通过才可以进行下一步的操作 。目前DLA Meta 权限控制粒度是做到表级别的,可以对用户授予表级别的权限;当然,列粒度、分区粒度的权限我们也是可以做到的,目前还在规划中 。下面是我们权限校验的处理流程:

阿里网盘优质资源分享 阿里云管理控制台


由于DLA Presto可以兼容MySQL 权限操作相关,为了降低用户的使用成本,当前DLA Meta 的权限是与MySQL 权限是兼容的,所以如果你对MySQL 的权限体系比较了解,那么这些知识是可以直接运用到DLA 的 。
2、元数据发现Schema推断技术
元数据发现的定位:为OSS等存储上面的数据文件自动发现和构建表、字段、分区,并感知新增表&字段&分区等元数据信息,方便计算与分析 。

阿里网盘优质资源分享 阿里云管理控制台


从上图可以看出,元数据发现的输入是一个父目录,下面可以包含百万级别OSS的文件,同时这些文件还在增量的添加 。输出为根据Schema信息进行聚合生成数目为万级别的表,以及单表万级别分区 。元数据自动发现引擎主要包括文件Schema识别器、文件表分类器、Meta同步三块,下面重点介绍Schema识别器、以及文件表分类器 。
文件Schema识别器:这个模块主要用来推断OSS上面文件的格式及字段 。对于一个文件完全没有Schema信息情况下,首先需要推断出是什么格式,然后还需要推断出具体的字段 。整个模块包括文件采样、Schema识别器两块 。测试表明单个文件的Schema探测需要150ms左右,如果对所有的文件进行全量的识别,整个效率会比较低,DLA 元数据发现有一套采样的技术,减少文件识别的数量 。具体的Schema识别器由一组Schema推断的策略组成,面对一个没有任何先验信息的文件,通过逐个匹配CSV、JSON、Parquet等推断器的方式来进行识别,每种推断器在效率和准确性上面做了大量优化,比如CSV内部包含了30+种根据表头、分隔符、转义、引用组合的策略,同时字段的识别使用数据行采样的方式保证准确率的情况下,减少远程IO读取 。

阿里网盘优质资源分享 阿里云管理控制台

推荐阅读