关于数据库:MaxCompute-公共云多租户设计的技术要点详解及产品实现特色

32次阅读

共计 4708 个字符,预计需要花费 12 分钟才能阅读完成。

简介:公共云大数据平台在多租户的设计和实现形式上有所差别。本文次要介绍在公共云大数据平台的多租实现计划中须要思考的问题和挑战,重点介绍了 MaxCompute 在计算和存储多租实现上的特点。冀望通过这些介绍来让大家理解大数据云平台多租计划须要关注的技术点和 MaxCompute 在多租实现上的产品特色。

本文作者:董国平 阿里云智能高级技术专家

公共云大数据平台在多租户的设计和实现形式上有所差别。本文次要介绍在公共云大数据平台的多租实现计划中须要思考的问题和挑战,重点介绍了 MaxCompute 在计算和存储多租实现上的特点。冀望通过这些介绍来让大家理解大数据云平台多租计划须要关注的技术点和 MaxCompute 在多租实现上的产品特色。

大数据平台多租户的常见状态

多租的概念大家可能有不同的了解,这里做个简略的分类,不便沟通。

第一种是租户独享一个数据库实例,反对根本的基于角色的访问控制,比方云上的传统数据库,通常就是这种模式。在这种场景下从云平台的角度来看是反对多个租户的,然而每个租户购买的是独立的实例,在实例外部做角色划分,实例之间的数据是齐全独立的。

第二种状态是管制立体多租,比方元数据和权限管控是多租的,然而计算资源是绝对独立的。大数据的场景因为须要反对简单的计算,通常会将计算资源独自拿进去治理。

第三种是更宽泛意义上的多租,share everything。从管控、计算到存储应用的都是多租的资源,也能够称之为强多租。

随着多租水平的晋升,从用户的角度来看,零碎的可扩展性越好,能够很不便的进行资源的扩缩容,然而云平台本身的零碎复杂度更高。咱们晓得零碎复杂度越高,往往会带来更多的稳定性问题;因为不同用户的作业运行在一起,安全性上的要求也越高,特地是在公共云的场景。

明天的分享更多关注的是计算和存储的多租实现。对于管控方面,基于 RBAC 或者基于权限表的权限治理、行级列级权限也是大数据平台多租实现的一部分,但不是明天分享的重点。回到计算和存储的多租上,实现上会有不同的组合形式。

单租计算和凋谢存储

一种典型的状态是单租计算加凋谢存储的模式,比方 AWS EMR 和 Databricks 等。

以上是 Databricks 的架构图,咱们能够看到,管控立体是多租的,而不同用户的计算资源是单租的,存储则用的相似 S3 这样的凋谢存储。管控应用的是 databricks 的账号,而计算资源归属于用户本人的 vpc。这种模式的劣势在于,因为计算资源是单租的,所以能够反对简单的 UDF,而不必太思考平安的问题。同时因为存储是凋谢的,能够很不便的将计算弹到其余云上,反对多云。面临的挑战在于资源的粒度是租户级别的,须要提前购买,弹性扩缩容齐全依赖云平台的弹性。多租云存储的读写存在效率问题,计算与存储的物理地位绝对较远,可能还要通过网关,有带宽的转发瓶颈,须要进行数据预取和缓存等;同时计算过程产生的两头数据因为性能的思考,不能齐全依赖云存储,须要思考其余形式,比方内存或本地存储的形式。

多租计算和外部存储

像 BigQuery 和 MaxCompute 的实现比拟相似,采纳的是多租计算加外部存储的模式。

计算和存储的资源都是多租的,计算和存储能够位于同一个机房内,物理地位比拟靠近。劣势在于极致弹性,用户能够在不持有物理资源的状况下,运行大规模的工作,并且能够依照用户作业理论应用的资源免费。而外部存储的实现,计算和存储之间能够有大容量的带宽,能够充分利用底层存储个性来做优化。而这种模式的挑战在于 UDF 的反对。UDF 是大数据场景常常会提供的一个性能,利用自定义函数的模式来反对简单的计算。咱们须要防止一个歹意用户的代码威逼到平台或者其余租户的平安。这方面 BigQuery 和 MaxCompute 有不同的实现,BigQuery 在 UDF 的实现上绝对比拟克服,提供了 js 的 UDF,然而对能力做了一些裁剪,而 MaxCompute 则借助平安容器来反对了残缺的 UDF 能力,这块在前面有介绍。不过在云平台上来实现平安容器会有二次虚拟化的限度,所以咱们须要裸金属或者物理机这样的资源状态。

多租的劣势和挑战

多租的劣势在于开箱即用,无需创立独立的资源池。能够实现秒级扩容,极致弹性。单租资源池依赖云主机的话,从资源的购买到软件环境的筹备,可能要到分钟级别,而在多租的平台上可能只是一个配置的参数变更。计费上多租能够做到依照理论计算的开销付费,而单租资源池的免费是依照资源池的规格来免费,不去管到底有没有应用。当然云平台能够依据资源应用的水位来进行动静的扩缩容,不过在资源售卖的粒度上还是有实质的差别。在老本方面,多租资源池通过不同租户作业之间的削峰填谷,能够带来更高的资源利用率,而云平台将这部分让利给用户,能够带来老本上的劣势。

当然这外面也会带来了一些技术挑战,首先存储方面,云存储须要解决近程读写和两头文件存储的问题;而外部存储能够实现定制优化,然而存储的开放性是一个问题。在资源调度层面咱们须要保障不同租户、不同类型的作业在平台上可能失去公平合理的调度,反对超大规模的计算节点;运行时上,针对 UDF 或者三方引擎的场景,须要实现运行时的隔离,保障租户之间不会呈现数据的越权拜访,或者单租户的恶意代码影响到平台和其余租户的平安;同时对于用户定制化的网络需要,也须要在租户层面实现买通,不可能做集群层面的买通。

通过一张图来直观的看下单租和多租的差别,单租的资源池通过 IAAS 层的隔离来保障了多租户之间的平安,而多租则须要大数据平台本人来解决外部的平安问题。在这些挑战中,对于资源调度层次要关注的是大规模场景下的性能和可扩展性,而来自平安的挑战则是计划是否可行的要害。如果无奈保障多租的平安,对云服务来说是不可承受的。

MaxCompute 多租实现

MaxCompute 是阿里云提供的用于大数据分析场景的、企业级的云数仓,提供的是全托管 serverless 的服务。而咱们多租的实现是一个强多租的实现。咱们反对了 SQL、java 和 python 的 UDF 能力,反对基于机器学习平台 PAI 的算法组件实现对 MaxCompute 数据进行模型训练等操作,同时也反对开源 spark 的工作类型,而这些都是在对立的计算和存储资源上提供的。

外部存储

存储方面咱们应用了飞天自研的存储引擎 pangu,实现了基于 capability 的权限模型。在不间接对外开放拜访的状况下,权限模型是能够简化的。因为是外部存储,咱们能够实现分布式拜访,防止中心化节点带来的性能瓶颈。同时对于作业运行过程中的长期数据,咱们能够利用外部存储实现更好的 local 化和治理。

资源管控

一个多租的资源池离不开一个好的资源调度引擎。在资源管控的调度层面,咱们实现一套高效可扩大的资源调度零碎,在调度和资源管理的层面都提供了横向扩大的能力,能够反对大规模的计算节点;同时保障不同租户不同类型的工作在平台上可能失去绝对偏心的调度,做了欠缺的 failover 的解决。资源的状态上咱们提供了预付费和后付费的资源状态,预付费资源可能失去更多的资源保障,后付费的用户则依照资源的需要规格和工夫的先后顺序进行调度。

在资源管控的主机层面,咱们通过 cgroup 的机制实现了作业级别的资源管控,来保障一个作业的异样不会影响到其余作业。反对作业的不同启动形式,过程形式或者容器形式,也能够同时治理 cpu 或者 gpu 的资源状态。

运行时隔离

基于灵活性和扩展性的思考,MaxCompute 在 SQL 语言外面反对了用户自定义函数即 UDF 的能力,不便用户对计算行为进行扩大,同时也引入了三方引擎,比方 spark 的反对。这些对平台来说是不可信代码,可能触发非预期的零碎毁坏,或者就是有歹意用户进行攻打。咱们通过轻量级的平安容器(虚拟化容器),实现了过程级别的隔离。也就是说将不可信代码运行在平安容器外部。

思考到 MaxCompute 的集群规模和大数据计算工作工夫短的特点,对平安容器的稳定性和性能会有比拟高的要求,咱们也做了针对性的优化。首先在安全性上,咱们对 vm 内核进行了裁剪,去掉了不必要的内核性能,缩小攻击面,并提供必要的防护机。在网络上禁止了默认的内部网络拜访。尽管咱们是一个离线数据计算平台,用户对时延没有那么敏感,然而对整个链路上的优化也是咱们始终致力的方向,所以对平安容器的启动速度做了很多优化。虚拟化的实现会有额定的资源占用,技术上须要升高 vm 的资源使用量,进步单机的计算密度,进而可能运行更多的工作。而计算数据的读写,则须要在平安容器内外建设高效的数据通道。

网络通信

咱们有了隔离的平安容器之后,针对相似 spark 的工作,节点之间须要相互通信,比方 spark 的 driver 和 worker 之间须要进行工作的散发和状态的监控之类。基于平安的思考,这些通信无奈构建在主机网络之上,所以咱们基于平安容器结构了 vxlan 的虚构网络。让同一个工作的所有节点运行在同一个虚构网络中,虚构网络中的节点通过私网 IP 进行通信,无法访问主机网络。而对于用户定制化的内部网络需要,比方拜访公网上的一个接口或者 vpc 外部的其余数据服务,咱们也做了工作级别的买通。用户在作业启动时申明须要拜访的网络指标,在必要的权限查看后,在作业维度上实现网络的买通。

同样因为工作频繁启停和规模的问题,虚构网络的构建和通信也会面临比拟大的压力。咱们晓得云上 vpc 的创立通常也是基于 vxlan 的技术,然而 vpc 的创立是绝对固定的,一个用户通常只有一个 vpc,购买主机则是往 vpc 中增加节点,操作绝对低频。而咱们须要面对一个工作创立一个 vpc,并且在短时间内拉起工作内的成千盈百个节点,对性能上会有比拟大的挑战。

通过以上的技术,咱们在繁多的资源池上实现了强多租,让更多的业务状态成为可能。基于以上平安容器和虚构网络的隔离,咱们在一个多租的集群上提供了弱小的 UDF 的实现。绝对于其余平台提供的 UDF,咱们在 UDF 的能力上限度更少,容许拜访本地 IO 和网络的性能,可能拜访用户 vpc 外部的数据。比方湖仓一体的场景中,咱们能够通过创立 networklink 的形式买通对用户 vpc 的网络拜访,在创立内部数据源的时候关联 networklink 后,就能够在 MaxCompute 外部通过 SQL 拜访内部数据,目前这些在 MaxCompute 的平台上都曾经做了产品化的实现。而工作级别的隔离,使得咱们能够在单个集群内提供混合的计算状态,除了 SQL 和 UDF 的实现外,咱们还反对了外部的 PAI 机器学习平台和开源的 spark 引擎等。

多租的思考和演进

多租的设计上,面向不同的业务场景、产品状态和基础设施时,会有不同的实现。回到设计的初衷,咱们为什么要在对立的计算存储的资源上实现强多租?MaxCompute 是一个外部孵化的产品,目前团体外部 99% 以上的离线数据都运行在 Maxcompute 的平台上。在业务状态上,咱们冀望兼容 hive 的 udf 生态和反对开源生态,而源于团体外部对于数据安全的要求,所以一早咱们就是多租平安的实现。在面向私有云服务时,咱们又冀望在资源粒度、弹性和老本上为客户提供劣势,促使咱们最终保持了强多租的状态。

而在将来的演进方向上,后面也说到咱们应用的外部存储,咱们冀望在存储层面面对计算的场景进一步晋升咱们的开放性。多租的场景下,某个大客户长期突发的大规模资源耗费对平台来说绝对是不敌对的,可能会导致其余用户的作业产生排队,所以在面对这样的客户时提供单租的计算状态也是一个抉择。而凋谢存储和单租计算将为后续多云状态提供撑持,不便用户有更多的抉择,用不同的组合去满足用户个性化的需要。

原文链接
本文为阿里云原创内容,未经容许不得转载。

正文完
 0