Fluid-云原生环境下的数据密集型 应用的高效支撑平台

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: Fluid-云原生环境下的数据密集型应用的高效支撑平台

内容简要:

(一)项目背景简介

(二)Fluid核心理念

(三)Fluid架构功能

 

 

 

Fluid是在Cool Natives的环境下自由流动,支撑弹性的机器学习和大数据应用,能够更好的访问数据进行数据管理。

(一)项目背景简介

1)技术发展背景

image.png

过去10年IT的发展如火如荼,有非常多的技术,概念层出不穷,在这些概念技术中,有三样东西应该是最主要的趋势第一:云计算,第二:大数据,第三:人工智能。

在这些领域中,有非常多开源软件出现,互相竞争,不断迭代,部分软件随着时间的推移,成为了这个领域里面的主流。

在云计算领域的DockerKubernetes大约产生于2013年和2014年,到了2020年,根据云上的数据,通过调查5000家公司,发现其中有45%的公司已经开始使用DockerKubernetes,成为云计算平台上的一个主流技术方案。

大数据领域Hadoop、Spark、Flink已经成了真正的业界标准。

人工智能领域Tensorflow,已经是工业界使用最主要的一种工具,PyTorch得到了学术界的广泛应用,分别来自谷歌和Facebook。

三者的关系,发现大数据和AI更多的还是在应用层大数据和AI的应用区别在于,大数据以结构化数据为主,人工智能 AI主要是以非结构化数据为主,他们的数据读取方式,大数据是由冷热数据之分,而AI场景之内都是以全量数据的运算为主。有区别也有相似,相似性是通过巨大的算力访问这些海量的数据。

现在使用多核的CPU甚至使用GPU进行这种数据处理,是非常敏感型的应用。

云计算平台可以看到,随着DockerKubernetes技术,能够提供标准化的应用迭代,提升应用迭代的速度同时通过计算成本降低规模化部署,提高整个平台的 OAI投入,也成为了大家关注的重要因素。

大数据和AI是在应用层,而像云计算DockerKubernetes,是属于在基础架构层良性发展时,三者的融合会成为很重要的趋势。

当大数据和AI都已经发展到一定程度的时候,这三种融合实际上就是如何把大数据和AI应用运行在云计算的平台上。Gartner测到2023年70%的 AI的工作负载将容器化的方式运行和service的方式去构建而spark3.0一个很重要的趋势,原生的支持communities调度和communities语法

 

2面临的问题

image.png

实践中,在云原生环境下运行大数据和AI应用,实际上效果并不好,具体分成两个方面,第一运行效率比较低下,以图为例,在英伟达的GPU环境为100GPU环境下,通过本地内存去进行模型训练,发现训练速度是1万张图片每秒。 当用云存储的时候,在计算分存储分离场景下,速度变成原来的1/3,效率急剧下降。

另外一方面,由于在DockerKubernetes场景下,对于数据集的管理和考虑比较欠缺,像一些数据多版本多变的问题,数据接口的问题如何去对接。

对于数据类型是TB的大文件,还是几百兆的小中等文件,甚至是几百k的小文件如何去接受缺乏思考。

底层的存储hdfs safe,各种各样存储如何对接,也是欠缺的究其原因实际上是在于云原生环境和数据密集型处理框架之间,它的设计理念是有天然分歧的本质上是因为出现要解决的问题不一样,所以思考的角度不同

 

3问题的原因分析

image.png

在云原生环境下,在计算存储分离是最主要的思考,要考虑降低成本,计算和存储需要单独扩缩容,能达到成本的最优效果。

在大数据场景下,更多的是数据访问的效率

第一个矛盾是关于数据是本地化的访问,计算要围绕数据来进行调度,计算存储分离和数据本地化

第二个矛盾,云原生应用考虑到弹性的扩缩融和自动化的故障恢复,希望应用尽量是一个无状态的应用,这样恢复的速度会非常快。

数据密集型的框架是以数据抽象为中心来进行工作,以Spark为例,核心理念rdd弹性数据集,弹性数据集中有算子,这些算子都是有状态的,通过Dag图进行关联,这里面一旦某个算出现问题,就有非常大的恢复成本。 它是以数据为核心,有状态的计算这两者也是很明显的差异,同时也发现在cncf原生全景图中,是缺少针对于数据高效支撑的组件。

 

4云原生环境下的数据支撑挑战

image.png

综上看到有三个最核心的问题;

第一如何在云原生上面去支撑数据应用,进行计算存储分离,因为计算存储分离会导致数据访问的延时影响计算的效率。

第二,现有的云原生的调度器,是Kubernetes的默认调度器中,对于应用的调度时没有考虑到数据的相关的信息,只把它作为一个资源调度,而不是应用调度,所以它的调度有效性值得商榷。

第三,混合云场景下的跨存储的联合分析,在云原生环境下很难支撑但是在大数据场景下,Alluxio为例,它最擅长的是跨云的以Pattylan为理念的数据运算

 

5Kubernetes生态中缺失的一块抽象

image.png

Kubernetes架构,它的成功之处在于对于应用和底层的计算资源做了非常好的抽象,把计算抽象成了一个Pod;把存储抽象了成了PVC;把网络又抽象成了Service,应用有相应的对应的抽象但其实缺乏于这种对于数据的抽象。云原生整个大图中,对于存储抽象中其实也有一定帮助,像Rook如何解决的是对于Ceph有状态的应用和服务,生命周期如何在Kubernetes的环境下面进行管理,如何去做它的升级

ChubaoFS是京东和中科大一起开源的软件,解决的是另外一种分布式存储这个分布式存储如何部署在Kubernetes这个环境下,缺乏的是以应用为中心的数据抽象,及对其的生命周期管理

 

6商店购物模式演变的联想

image.png

在云原生环境下应用是有弹性的,当应用开始做弹性的时候,如何有相应的数据和它相对应满足lps这些都需要考虑。 一个主要的初衷,把它和应用弹性相关联,数据的访问和商品的类比有很多的相似之处,商品超市客户类比成数据存储和应用商品和数据非常类似,一个核心特点就是消费被使用,而超市和存储是有非常大的类似性提供两个核心功能:

第一数据的贮藏,如何把数据存到超市里面。

第二,顾客如何在超市里面购买(即获得这些数据,和应用很类似,通常是在超市里面进行数据消费(即进行商品购买)。

直到2006年出现了电商模式,电商模式最核心的价值,就是它带来了更大的交易量,更加以客户为中心,客户可以选择所需要的任何一种商品当电商模式出现之后,整个网上的购物方式就发生根本性变化仓库负责贮藏商品,客户在虚拟的服务商店购买商品,由现代化的物流服务,把商品投递到客户手中

在现在的架构环境下,两者非常相识

数据存在云存储系统中,应用部署在计算的集群里面,二者是分离的,但是由于高效的物流系统缺失,导致密集型应用访问这些数据的时候,效率非常低下

高效的物流体系,对于整个应用的访问非常重要,通过类比可以看到为什么会有电商模式,有两点优势:

第一支付模式。

第二,高效的物流体系

对此思考,当我们有更高的IO需求时,也需要云平台上有数据的交平台,Fluid可以扮演云原生平台下面的数据物流系统这个角色。

 

(二)Fluid的核心理念

Fluid扮演云原生的数据物流系统角色

 回顾整个应用如何在存储中访问数据场景的变化最早的时候,当储存在Hadoop场景的时候,是计算和存储相绑定的场景一个节点,它既提供计算又提供存储,实际是datafetch取数据,应用要被放到存储上,才能够运行这种方式提供了很好的性能,与此同时,又带来一个巨大的问题,就是成本非常高昂,机器需要非常大的存储非常多的计算资源和内存这种方案没有办法持续,第一,成本高;第计算和存储虽然是两个不在一起,当计算和存储发生了分离,计算是固定的,他们是一个静态部署永远都在某个节点上启动。

这个时候就出现了Alluxio,第一,提供应用访问数据的路由机制,相当于可以把不同的协议进行相互转化,提供远程访问的能力。 第二提供数据缓存的能力,可以把数据缓存到某个节点上,这种在计算存储分离的场景下,如果计算是静态部署,就会有优势,因为热数据持续被访问。

今天,云环境变得更加灵活,第一资源池化,应用的部署非常的灵活,并不能够固定到某些节点上。第二,弹性伸缩,有时候它属于由波峰波谷,属于削峰天谷的情况大量存在这个时候应用特性,变成了动态的弹性部署。数据交付,开始负责应用的部署和调度,会有应用部署调度的信息,部署到哪些节点上,结合要使用的数据,就可以把数据去交付到更近的节点上。甚至某些场景下,可以先把数据到节点上,再把应用调度上去,实现数据交付效果。

Fluid核心的想法希望Fluid扮演云原下的数据物流的角色,又有了很多变化。

第一视角的转变:从云原生资源调度结合数据密集处理两方面综合审视云原生场景的数据抽象与支撑访问

第二思路的转变:针对容器编排缺乏数据感知,数据编排缺乏 架构感知,提出协同编排、多维管理、智能感知创新方法;

第三,理念的转变:让数据像流体一样在资源编排层和计 算处理层灵活高效地访问、转换和管理

在这种操作之下,通过和数据引擎交互,做数据的迁移,让更数据集灵活的在整个Spark环境下进行变化。

最后如何消费数据的应用因为他也在叫集群调度,需要知道数据相关的信息获得这之前我们对数据集进行了编排和部署,知道哪些数据在哪些节点上,当调度应用的时候,就会根据信息来调度应用。

 

(三)Fluid架构功能

1Fluid的系统架构

image.png

如上图所示:Fluid系统架构。从上到下来看,作为客户,用户左边其实要定义两个东西,一个是数据集的通用定义 Runtime是数据的编排和缓存引擎,这里面主要会支持两个引擎,一个是Alluxio,一个是JindoFLS,这两个引擎能做到的是数据的缓存加速和自动的数据驱逐的工作。

有两个核心组件在辅助的里面两个核心组件

第一,数据集的编排。

第二使用数据集的应用的编排,左边是数据集的编排,三个Controller。第一个Dataset Controller数据集,负责整个数据集的生命周期,从创建绑定;第二个Runtime Controller负责数据如何在云原生平台下调度,部署需要放到节点上第三个是Volume controller要和Spark平台对接,需要一个对接的协议,这里会提供一个PVC协议,数据持有券,是spark本地的协议站。

右边这一侧,结前面进行数据编排的一些相关的信息,可以对于现有的k8s调度器进行扩展,这里有两Plugin

第一个Cache co-locality Plugin结合前面的数据调度信息,把应用调度到最合适的节点能够读到缓存

第二个Prefec Plugin,当你的整个集群里面没有任何缓存存在的情况下,会把应用先调度下去,调度应用的时候,会结合应用需要数据信息,做智能预取

第一层是服务的最主要工作。第二层就是k8s标准组件,只要一个标准的k8s就可以把整个的组件和模块运行起来。 最后一层就可以对接各种各样的存储,由于做了Fluid这层抽象,Alluxio支持存储类型和新的知识存储类型,还有他们不支持的存储类型,也可以支持。

 

2Fluid的功能概念

需要强调是服务的功能概念是辅助的,Fluid不是全存储加速和管理,而是应用使用的数据集加速和管理

这里面有三个概念

第一Dataset: 数据集是逻辑上相关的一组数据的集合,一致的文件特性,会被同一运算引擎使用

二,Runtime: 实现数据集安全性,版本管理和数据加速等能力的执行引擎的接口,定义了一系列生命周期的方法

AlluxioRuntime: 来自Alluixo社区,是支撑Dataset数据管理和缓存的执行引擎高效实现

核心的功能,第一:加速第二k8s存储对接第三数据集隔离

加速的意思,并不是部署了缓存就能得到加速涉及到三点:

image.png·

第一,能够提供多大的缓存,如缓存量是很小,而且同时你的据访问又不是很规则化,缓存未必是有好的效果的。对于缓存的能力可观测性,首先知道数据特点,然后再知道缓存特点,才能判断缓存是否带来效益

·第二, Prtable和scalable,通过观测了解到缓存能力是什么样子,涉及到是否要对它进行迁移,是否要换到一些更合适的节点,是否要对它整体换存档来进行扩容,在k8s面,都是一键式的配置

·第三, Colocality信用在k8s度器里面,让计算和应用更近,对接不同的存储,然后以PVC以k8s能够接受的一种接口,接入到k8s的体系中,在k8s中的name、space作为隔离,来让不同的数据集对于不同的数据科学家有可见性。

举例说明,如下图所示:

image.png


用户在一个场景下,使用来自两个不同地方的数据源,一个数据源是在阿里云上的对象存储OSS另外一个数据源是数据中心里面搭建的self场景比较常见,有些数据是脱敏信息,可以在阿里云上用,有些是敏感信息,它可能只能部署在线下的数据中心。

通过编排在API描述对应的就是两个mountPoint,而这两个mountPoint只要定义好之后,通过Fluid就会把它转化成PV/PVC这样计算可以把k8s里面定义的Pod只要把 PVC挂载下来,可以同时去访问线上的数据阿里云上面OSS数据和线下数据中心的数据,整个的操作是一个透明的,增加了使用数据的方便性。

image.png

如何对数集进行检查当把dataset部署下去cache capability,能够提供多少的缓存能力也能看到底层存储、数据集底层存储需要多大的量在这个例子中底层存储只需要84g上层缓存能力能提供200g就不需要再做扩容操作。

当打算做扩容的操作的时候,可以去设置它的 work的数量,可以把4变成3,这样它的缓存的能力就可以在降低。

而整个工具也把它做成了一个直接可以在k8s里面直接去查询,有时候性能不好,是因为缓存的量还不够多这个时候就可以做对于缓存能力有一个可观测性,根据这种观测性来决定我是否要skill out,还是skill in。

image.png

三个节点中有两个节点是有缓存引擎的,有一个节点是没有缓存引擎首先kps调度分成两个,一个叫做过滤,一个叫做优选在过滤的时候,第三个节点就可以把它过滤,因为它没有缓存能力而前两个节点在优选的时候,会判断谁的缓存能力更大,就先把应用优先部署到哪个节点上。

选择第一个节点,和调度相结合通过一个demo,如何通过Fluid去加速一个已有k8s的持久化的数据卷加速一个已有的纳斯的nfs的这种已有的PVC只通过服务的用非常简单的方式使它速度得到极大的提升。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
28天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
2月前
|
Cloud Native 安全 物联网
云原生技术在现代软件开发中的应用与挑战####
云原生,这一词汇如同一股强劲的科技风暴,席卷了整个信息技术领域,它不仅重塑了软件的开发模式,还引领了一场关于效率、可扩展性和弹性的深刻变革。本文旨在深入探讨云原生技术的核心概念,分析其在现代软件开发中的广泛应用,并直面伴随其发展而来的挑战,为读者勾勒出一幅既充满机遇又不乏考验的云原生技术图景。 ####
|
12天前
|
监控 Cloud Native 持续交付
云原生技术在现代企业中的应用与实践
本文将深入探讨云原生技术如何改变现代企业的运作模式,提升业务灵活性和创新能力。通过实际案例分析,我们将揭示云原生架构的关键要素、实施步骤以及面临的挑战,为读者提供一套清晰的云原生转型指南。
|
18天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代软件开发中的应用与挑战
【10月更文挑战第37天】随着云计算技术的不断演进,云原生技术已经成为推动软件开发现代化的重要力量。本文将深入探讨云原生技术的核心概念、优势以及面临的挑战,并通过一个实际的代码示例,展示如何在云原生环境中部署一个简单的应用。我们将从云原生的基础架构出发,逐步引导读者理解其在现代软件开发中的关键作用。
28 1
|
1月前
|
敏捷开发 Cloud Native 持续交付
云原生技术在现代企业中的应用与实践
【10月更文挑战第23天】本文将深入探讨云原生技术在现代企业中的广泛应用,并结合具体案例分析其对企业数字化转型的推动作用。我们将从云原生技术的基本原理出发,逐步揭示其在提高业务敏捷性、降低成本和增强系统可靠性方面的优势。同时,文章还将分享一系列成功实施云原生技术的企业案例,为读者提供实践中的参考和启示。最后,我们将讨论云原生技术面临的挑战及未来的发展趋势,为企业在这一领域的进一步探索提供指导。
|
1月前
|
Cloud Native 持续交付 云计算
云原生技术深度探索:构建现代化应用的基石####
【10月更文挑战第21天】 本文将深入探讨云原生技术的核心概念、关键技术及其在现代软件开发中的应用。我们将从容器化、微服务架构、持续集成/持续部署(CI/CD)、无服务器架构等关键方面展开,揭示这些技术如何共同作用,帮助企业实现高效、弹性且易于维护的应用部署与管理。通过实例分析,展现云原生技术在实际项目中的显著优势,为读者提供一套全面理解并应用云原生技术的指南。 ####
34 2
|
2月前
|
运维 Cloud Native 持续交付
云原生技术在现代IT架构中的深度应用与挑战####
【10月更文挑战第17天】 本文深入剖析了云原生技术的精髓,探讨其在现代IT架构转型中的核心作用与面临的挑战。云原生不仅是一种技术实现,更是企业数字化转型的重要推手,通过容器化、微服务、持续集成/持续部署(CI/CD)等关键要素,重塑软件开发、部署与运维模式。文章首先概述了云原生的基本原则与核心组件,随后分析了其如何促进企业敏捷性、可扩展性和资源利用率的提升,同时也指出了在安全性、复杂性管理及人才技能匹配等方面存在的挑战,并提出了相应的对策建议。 ####
68 6
|
28天前
|
Cloud Native 安全 持续交付
云原生技术在现代软件开发中的应用与挑战####
本文深入探讨了云原生技术在现代软件开发中的广泛应用及其面临的主要挑战,旨在为开发者和企业提供实用的指导和策略。云原生技术通过其独特的架构和方法论,极大地提升了软件的可扩展性、弹性和敏捷性。然而,随着技术的不断演进,如何有效应对其在安全性、复杂性和成本控制等方面的挑战,成为了业界关注的焦点。本文将详细阐述云原生技术的核心概念、实际应用案例,并针对当前面临的主要挑战提出相应的解决策略。 ####
|
17天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
18天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。

热门文章

最新文章