本文配套PPT:https://pan.baidu.com/s/1koWishTDeMGkdOyiAPB5Ug(提取码: 0000)
导读:公有云大数据平台在多租户的设计和实现方式上有所差异。本文主要介绍在公有云大数据平台的多租实现方案中需要考虑的问题和挑战,重点介绍了MaxCompute在计算和存储多租实现上的特点。期望通过这些介绍来让大家了解大数据云平台多租方案需要关注的技术点和MaxCompute在多租实现上的产品特色。
全文将按照以下四部分内容展开:
01
大数据平台多租户形态
首先我们看下多租户形态,多租的概念大家可能有不同的理解,可以简单分为三类:
随着多租程度的提升,从用户的角度来看,系统的可扩展性越好,可以很方便地进行资源的扩缩容。但是云平台自身的系统复杂度会更高,而系统复杂度更高,可能会带来更多的稳定性问题。由于不同用户的作业运行在一起,安全性上的要求也更高,特别是在公有云的场景。
今天我的分享更多关注的是计算和存储的多租实现。关于管控方面,基于RBAC或者基于权限表的权限管理,行级列级权限也是大数据平台多租实现的一部分,但不是今天分享的重点。回到计算和存储的多租上,实现上会有不同的组合方式。
一种典型的形态是单租计算加开放存储的模式,比如AWS EMR和Databricks等。上图右边有一个databricks的架构图,我们可以看到,管控层面是多租的,而不同用户的计算资源是单租的,存储则用的类似AWS S3的开放存储。管控使用的是databricks的账号,而计算是跑在用户自己的vpc。
这种模式的优势在于:
面临的挑战在于:
BigQuery 和 MaxCompute 的实现比较类似,采用的是多租计算+内部存储的模式。计算和存储的资源都是多租的,计算和存储可以位于同一个机房内,物理位置比较接近。优势在于:
这种模式的挑战在于:
--
02
强多租的优势与挑战
介绍了常见的多租模式之后,我们来总结一下多租的优势和挑战。
多租的优势在于:
当然多租户也面临着一些挑战:
我们通过一张图来直观地看下多租在安全性方面的挑战。单租的资源池通过iaas层来做隔离,云上每个资源是在独立的安全组中;而多租的平台上,多租户之间的隔离则需要大数据平台自己来保证。在这些挑战中,关于资源调度层面主要关注的是大规模场景下的性能和可扩展性,而安全则是方案是否可行的关键。如果无法保障多租的安全,对云服务来说是不可接受的。
--
03
MaxCompute多租实现
接下来,我们看一下MaxCompute产品在强多租方面的实践。
首先简单介绍下 MaxCompute 产品。
MaxCompute是阿里云提供的适用于大数据分析场景的,企业级的云数仓,提供的是全托管serverless的服务,在多租的实现上是一个强多租的实现。我们支持了SQL, java 和python的UDF,支持计算平台内部pai机器学习,同时也支持开源spark的任务类型。这些都是在统一的计算和存储资源上提供的。
存储方面,我们依赖自研的飞天存储引擎pangu;使用了基于capability的权限模型,在不直接对外开放访问的情况下,权限模型是可以简化的;由于是内部存储,我们可以实现分布式访问,避免中心化节点带来的性能瓶颈。同时对于作业运行过程中的临时数据,我们可以利用内部存储实现更好的local化和管理。
一个多租的资源池离不开一个好的资源调度引擎。
在资源管控的调度层面,我们实现了一套高效可扩展的资源调度系统,可以支持大规模的计算节点,同时保证不同租户不同类型的任务在平台上能够得到相对公平的调度,做了完善的failover的处理。资源的形态上我们提供了预付费和后付费的资源形态,预付费资源能够得到更多的资源保障,后付费的用户则按照资源的需求规格和时间的先后顺序进行调度。
在资源管控的主机层面,我们通过cgroup的机制实现了作业级别的资源管控,来保证一个作业的异常不会影响到其他作业。支持作业的不同启动方式,支持以进程方式或者容器方式拉起,也可以同时管理cpu或者gpu的资源形态。
基于灵活性和扩展性的考虑,MaxCompute 在 sql 语言里面支持了用户自定义函数即UDF的能力,方便用户对计算行为进行扩展,同时也引入了对三方引擎,比如 spark 的支持。这些对平台来说是不可信代码,可能触发非预期的系统破坏,或者恶意用户进行攻击。
我们通过轻量级的安全容器,实现了进程级别的隔离,也就是将不可信代码运行在安全容器内部。
在安全性上对vm内核进行了裁剪,去掉了不必要的内核功能,减少攻击面,并提供必要的防护机制;对网络上禁止了默认的外部网络访问;在启动速度上做了优化,虽然我们是一个离线数据计算平台,用户对时延没有那么敏感,但是对整个链路上的优化也是我们一直努力的方向;同时降低vm的资源使用量,提高单机的计算密度,同时能够运行更多的任务。
计算数据的读写,需要在vm内外建立高效的数据通道。考虑到MaxCompute的集群规模和大数据计算任务时间短的特点,对安全容器的稳定性和性能都有着比较高的要求。
我们有了隔离的安全容器之后,针对类似spark的任务,节点之间需要互相通信,类似spark的driver和worker之间需要进行任务的分发和状态的监控,而这些需求无法构建在主机网络之上,所以我们基于安全容器构造了vxlan的虚拟网络,让同一个任务的所有节点运行在同一个虚拟网络中,虚拟网络中的节点通过私网IP进行通信,无法访问主机网络。对于用户定制化的外部网络访问需求,比如常见的用户访问公网上的一个接口或者vpc内部的其他数据服务,我们也做了任务级别的网络打通能力。用户在作业启动时声明需要访问的网络目标,在必要的权限检查后,在任务级别实现网络的打通。
同样我们还要关注性能和稳定性的问题。云上vpc的创建通常也是基于vxlan的技术,但是vpc的创建是相对固定的,一个用户通常只有一个vpc,购买主机则是往vpc中添加节点,操作相对低频。但当我们面对一个大数据平台时,任务启停是非常频繁的,并且在短时间内拉起任务内的成百上千个节点,对性能上会有比较大的挑战。
在单一的资源池上通过强多租的实现,让更多的业务形态成为可能。
基于以上安全容器和虚拟网络的隔离,我们在一个多租的集群上提供了强大的UDF的实现,相对于其他平台提供的UDF,我们在UDF的能力上限制更少,允许访问本地IO和网络,能够访问用户vpc内部的数据。
比如湖仓一体的场景中,我们可以通过创建networklink的方式打通对用户vpc的网络访问,在创建外部数据源的时候关联networklink后,就可以在MaxCompute内部通过sql访问外部数据,目前这些在MaxCompute的平台上都已经做了产品化的实现。
任务级别的隔离,使得我们可以在单个集群内提供混合的计算形态,除了sql和udf的实现外,我们还支持了内部的pai机器学习平台和开源的spark引擎。
--
04
Why & 后续演进
最后分享一下我们对于多租实现的一些思考,以及后续的演进方向。
回到设计的初衷,我们为什么要在统一的计算存储的资源上实现了强多租。MaxCompute是一个内部孵化的产品,目前集团内部90%以上的离线数据都运行在Maxcompute的平台上。在业务形态上,我们期望兼容hive的udf生态和对开源引擎的支持,而源于集团内部对于数据安全的要求,所以我们一开始就是多租安全的。在面向公有云服务时,我们又期望在资源粒度,弹性和成本上提供优势,促使我们最终坚持了强多租的形态。
未来的演进方向有三大方面:
今天的分享就到这里,谢谢大家。
分享嘉宾:董国平 阿里云 高级技术专家
编辑整理:Liyao DataFun
出品平台:DataFunTalk
01/分享嘉宾
董国平|阿里云高级技术专家
2010年加入阿里巴巴,目前服务于阿里云计算平台事业部,长期从事计算平台多租系统和系统安全建设,熟悉安全容器,虚拟网络和k8s等。
02/报名看直播 免费领PPT
03/关于我们
DataFun:专注于大数据、人工智能技术应用的分享与交流。发起于2017年,在北京、上海、深圳、杭州等城市举办超过100+线下和100+线上沙龙、论坛及峰会,已邀请超过2000位专家和学者参与分享。其公众号 DataFunTalk 累计生产原创文章700+,百万+阅读,14万+精准粉丝。
留言与评论(共有 0 条评论) “” |