溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么理解Vineyard加入CNCF Sandbox

發(fā)布時(shí)間:2021-10-28 09:15:11 來源:億速云 閱讀:137 作者:iii 欄目:云計(jì)算

本篇內(nèi)容介紹了“怎么理解Vineyard加入CNCF Sandbox”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

項(xiàng)目介紹

現(xiàn)有的大數(shù)據(jù)分析場(chǎng)景中,對(duì)于端到端任務(wù),不同的子任務(wù)之間通常使用例如 HDFS、S3、OSS 這樣的分布式文件系統(tǒng)或?qū)ο蟠鎯?chǔ)系統(tǒng),來共享任務(wù)之間的中間數(shù)據(jù),這種方式在運(yùn)行效率和研發(fā)效率上存在諸多問題,以下圖所示的一個(gè)風(fēng)控作業(yè)工作流為例:  怎么理解Vineyard加入CNCF Sandbox

  1. 工作流中不同任務(wù)之間為了共享中間數(shù)據(jù),前一個(gè)任務(wù)將結(jié)果寫入文件系統(tǒng),完成之后,后一個(gè)再將文件讀出作為輸入,這個(gè)過程帶來了額外的序列化及反序列化、內(nèi)存拷貝、以及網(wǎng)絡(luò)、IO 的開銷,我們從歷史任務(wù)中觀察到有超過 60% 的任務(wù)為此花費(fèi)了 40% 以上的執(zhí)行時(shí)間。

  2. 對(duì)于生產(chǎn)環(huán)境,為了高效地解決某一個(gè)特定范式的問題往往會(huì)引入一個(gè)新系統(tǒng)(例如分布式圖計(jì)算),但這樣的系統(tǒng)往往難以直接與工作流中的其他系統(tǒng)無縫銜接,需要很多重復(fù)的 IO、數(shù)據(jù)格式轉(zhuǎn)換和適配的研發(fā)工作。

  3. 使用外部文件系統(tǒng)共享數(shù)據(jù)給工作流帶來了額外的中斷,因?yàn)橥挥挟?dāng)一個(gè)任務(wù)完全寫完所有結(jié)果,下一個(gè)任務(wù)才能開始讀取和計(jì)算,這使得跨任務(wù)的流水線并行無法被應(yīng)用。

  4. 現(xiàn)有的分布式文件系統(tǒng)在共享中間數(shù)據(jù)時(shí),特別是在云原生環(huán)境下,并沒有很好的處理分布式數(shù)據(jù)的位置問題,造成網(wǎng)絡(luò)開銷的浪費(fèi),從而降低端到端執(zhí)行效率。

為了解決現(xiàn)有大數(shù)據(jù)分析工作流中存在的上述問題,我們?cè)O(shè)計(jì)和實(shí)現(xiàn)了分布式內(nèi)存數(shù)據(jù)共享引擎 Vineyard。

怎么理解Vineyard加入CNCF Sandbox

Vineyard 從以下三個(gè)角度來應(yīng)對(duì)上述幾個(gè)問題:

  1. 為了使端到端工作流中任務(wù)之間的數(shù)據(jù)共享更加高效,Vineyard 通過內(nèi)存映射的方式,支持系統(tǒng)間零拷貝的數(shù)據(jù)共享,省去了額外的 IO 開銷。

  2. 為了簡(jiǎn)化新計(jì)算引擎接入現(xiàn)有系統(tǒng)所需要的適配和開發(fā),Vineyard 對(duì)常見的數(shù)據(jù)類型,提供了開箱即用的抽象,例如 Tensor、DataFrame、Graph,等等,從而不同計(jì)算引擎之間共享中間結(jié)果不再需要額外的序列化和反序列。同時(shí),Vineyard 將 IO、數(shù)據(jù)遷移、快照等可復(fù)用的組件以插件的形式實(shí)現(xiàn),使其能夠很靈活地按需注冊(cè)到計(jì)算引擎中去,降低與計(jì)算引擎本身無關(guān)的開發(fā)成本。

  3. Vineyard 提供一系列 operators,來實(shí)現(xiàn)更高效靈活的數(shù)據(jù)共享。例如 Pipeline operator 實(shí)現(xiàn)了跨任務(wù)的流水線并行,使得后續(xù)任務(wù)可以隨著前序任務(wù)輸出的產(chǎn)生,同時(shí)進(jìn)行計(jì)算,提高了端到端整體效率。

  4. Vineyard 與 Kubernetes 集成,通過 Scheduler Plugin,讓任務(wù)的調(diào)度能夠感知所需要的數(shù)據(jù)的局部性,在 Kubernetes 讓單個(gè)任務(wù)的 Pod 盡可能地調(diào)度到與 Pod 所需的輸入數(shù)據(jù)對(duì)其的機(jī)器上,來減小數(shù)據(jù)遷移需要的網(wǎng)絡(luò)開銷,提升端到端性能。

在初步的對(duì)比實(shí)驗(yàn)中,相比于使用 HDFS 來共享中間數(shù)據(jù),對(duì)于評(píng)測(cè)任務(wù),Vineyard 能夠大幅降低用于交換中間結(jié)果引入的額外開銷,對(duì)于整個(gè)工作流的端到端時(shí)間有 1.34 倍的提升。

核心功能

接下來從 Vineyard 核心的設(shè)計(jì)與實(shí)現(xiàn),以及 Vineyard 如何助力云原生環(huán)境中大數(shù)據(jù)分析任務(wù)兩個(gè)方面來介紹 Vineyard 的核心功能。

1. 分布式內(nèi)存數(shù)據(jù)共享

Vineyard 將內(nèi)存中的數(shù)據(jù)表示為 Object。Object 可以是 Local 的,也可以是 Global 的,以分布式執(zhí)行引擎 Mars 和 Dask 為例,一個(gè) DataFrame 往往被拆分成很多個(gè) Chunk 以利用多臺(tái)機(jī)器的計(jì)算能力,每臺(tái)機(jī)器上有多個(gè) Chunk,這些 Chunk 是 Vineyard 中的 LocalObject,這些 Chunk 一起構(gòu)成了一個(gè)全局的視圖,即 GlobalDataFrame。這個(gè) GlobalDataFrame 能夠直接共享給其他計(jì)算引擎,如 GraphScope,作為圖數(shù)據(jù)的輸入。有了這些數(shù)據(jù)類型的抽象,Vineyard 上的不同計(jì)算引擎之間就可以無縫地共享中間結(jié)果,將一個(gè)任務(wù)的輸出直接用作下一個(gè)任務(wù)的輸出。  更具體地,Vineyard 中又是如果表達(dá)一個(gè)特定類型的 Object,使之能夠很容易地適配到不同的計(jì)算引擎中去呢?這得益于 Vineyard 在 Object 的表示上提供的靈活性。Vineyard 中,一個(gè) Object 包括兩個(gè)部分,Metadata,以及一組 Blob。Blob 中存儲(chǔ)著實(shí)際的數(shù)據(jù),而 Metadata 則用于解釋這些 Blob 的語義。例如對(duì)于 Tensor,Blob 是一段連續(xù)內(nèi)存,存儲(chǔ)著 Tensor 中所有的元素,而 Metadata 中記錄了 Tensor 的類型、形狀、以及行主序還是列主序等屬性。在 Python 中,這個(gè) Object 可以被解釋為一個(gè) Numpy 的 NDArray,而在 C++ 中,這個(gè) Object 可以被解釋為一個(gè) xtensor 中的 tensor。這兩種不同編程語言的 SDK 中,共享這個(gè) Tensor 不會(huì)帶來額外的 IO、拷貝、序列化/反序列化、以及類型轉(zhuǎn)換的開銷。  同時(shí),Vineyard 中的 Metadata 是可嵌套的,這使得我們通過很容易地將任何復(fù)雜的數(shù)據(jù)類型描述為 Vineyard 中的 Object,不會(huì)限制計(jì)算引擎的表達(dá)能力。以 GlobalDataFrame 為例,見下圖中 Metadata 的結(jié)構(gòu)。  怎么理解Vineyard加入CNCF Sandbox

2. 云原生環(huán)境中數(shù)據(jù)與任務(wù)的協(xié)同調(diào)度

對(duì)于一個(gè)真實(shí)部署的大數(shù)據(jù)分析流水線,僅僅有任務(wù)之間的數(shù)據(jù)共享是遠(yuǎn)遠(yuǎn)不夠的。在云環(huán)境中,一個(gè)端到端流水線中包含的多個(gè)子任務(wù)在被 Kubernetes 調(diào)度時(shí)僅僅考慮了需要的資源約束,連續(xù)的兩個(gè)任務(wù)的 co-locate 無法保證,在兩個(gè)任務(wù)之間共享中間結(jié)果時(shí)仍然有數(shù)據(jù)遷移引入的網(wǎng)絡(luò)開銷,如下圖,在運(yùn)行 Task B 時(shí),因?yàn)閮蓚€(gè)任務(wù)的 Pod 沒有對(duì)齊,數(shù)據(jù)分片 A3、A4 需要被遷移到 Pod 所在的 Vineyard 實(shí)例上。  怎么理解Vineyard加入CNCF Sandbox

對(duì)此,Vineyard 通過 CRD 將集群中的數(shù)據(jù)(Vineyard Objects)表示為可觀測(cè)的資源,并基于 Kubernetes 的 Scheduler Framework 設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)考慮數(shù)據(jù)局部性的調(diào)度器插件。當(dāng)前一個(gè)任務(wù) Task A 完成后,從結(jié)果對(duì)象的 Metadata 中,調(diào)度器插件可以知道所有分片的位置,在啟動(dòng)下一個(gè)任務(wù)時(shí),調(diào)度器給數(shù)據(jù)所在的節(jié)點(diǎn)(圖中的 Node 1、Node 2)更高的優(yōu)先級(jí),使任務(wù) Task B 也盡可能地被調(diào)度到對(duì)應(yīng)的節(jié)點(diǎn)上,從而省去了數(shù)據(jù)遷移引入的額外開銷,來改善端到端的性能。

快速上手

Vineyard 集成了 Helm 以方便用戶安裝和部署:

helm repo add vineyard https://vineyard.oss-ap-southeast-1.aliyuncs.com/charts/
helm install vineyard vineyard/vineyard

安裝之后,系統(tǒng)中會(huì)部署一個(gè) Vineyard DaemonSet,并暴露一個(gè) UNIX domain socket 用于與應(yīng)用的任務(wù) Pod 之間的共享內(nèi)存和 IPC 通信。

“怎么理解Vineyard加入CNCF Sandbox”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI