解構(gòu)流存儲(chǔ) — Pravega,與 Flink 構(gòu)建端到端的大數(shù)據(jù)流水處理線
本篇內(nèi)容整理自 Pravega 我國社區(qū)創(chuàng)始人、戴爾科技集團(tuán)軟件工程技術(shù)總監(jiān)滕昱在 Flink Forward Asia 2021 主會(huì)場(chǎng)的講演。主要內(nèi)容包含:
- 存儲(chǔ)籠統(tǒng)的現(xiàn)狀
- Pravega 功用架構(gòu)詳解
- Pravega 流存儲(chǔ)數(shù)據(jù)演示
- 展望未來
一、存儲(chǔ)籠統(tǒng)的現(xiàn)狀
在核算機(jī)軟件規(guī)劃中,有一個(gè)十分聞名的觀念:任何新的核算機(jī)問題都能夠經(jīng)過新加入的籠統(tǒng)層處理,關(guān)于存儲(chǔ)也是一樣。上圖列出了三種咱們主要運(yùn)用的存儲(chǔ)籠統(tǒng),即塊存儲(chǔ)、文件存儲(chǔ)和目標(biāo)存儲(chǔ)。塊存儲(chǔ)基本上和現(xiàn)代核算機(jī)工業(yè)一同期誕生;文件存儲(chǔ)作為當(dāng)今干流的存儲(chǔ)籠統(tǒng)稍晚呈現(xiàn);目標(biāo)存儲(chǔ)更晚,其誕生于 1990 年代。而在實(shí)時(shí)核算的開展和云年代背景下,流式的數(shù)據(jù)有著越來越廣泛的運(yùn)用,咱們認(rèn)為需求一種新興的存儲(chǔ)籠統(tǒng)來應(yīng)對(duì)這一種強(qiáng)調(diào)低延時(shí)、高并發(fā)流量的數(shù)據(jù)。而在文件存儲(chǔ)中添加字節(jié)流或許是一個(gè)最直觀的主意,但在實(shí)際需求上面臨著一系列的挑戰(zhàn),完結(jié)反而更加雜亂,如下圖所示:
數(shù)據(jù)的寫入巨細(xì)對(duì)吞吐量的影響至關(guān)重要,為了平衡延時(shí)和吞吐量,在完結(jié)上需求引進(jìn) batching,而且需求預(yù)分配空間防止塊分配造成的功用損耗,最終作為存儲(chǔ),耐久化也有必要確保。
本地文件體系本質(zhì)上是不安全的。在現(xiàn)實(shí)國際中,每時(shí)每刻硬件節(jié)點(diǎn),磁盤介質(zhì)都或許會(huì)損壞。為了處理這些問題,就需求引進(jìn)分布式存儲(chǔ)體系,例如常見的多副本體系,但副本的復(fù)制費(fèi)時(shí)費(fèi)空間,分布式共同性協(xié)議的數(shù)據(jù)安全問題又會(huì)成為新的難題。
假如根據(jù) shared-nothing 架構(gòu)規(guī)劃,徹底并行不存在共享資源,例如上圖中有三個(gè)副本分別存于三個(gè)獨(dú)立的物理節(jié)點(diǎn)之上,那么單條流數(shù)據(jù)的存儲(chǔ)巨細(xì)就受限于單個(gè)物理界點(diǎn)的存儲(chǔ)上限,所以這仍然不是一個(gè)齊備的處理方法。
由此可見,因?yàn)樯鲜鲆幌盗械膯栴},根據(jù)文件體系構(gòu)建流存儲(chǔ)是相當(dāng)雜亂的。
于是,咱們受到了開篇的觀念的啟示,測(cè)驗(yàn)換個(gè)角度,運(yùn)用分布式文件和目標(biāo)存儲(chǔ)的分層架構(gòu)形式來處理這個(gè)問題。底層的可擴(kuò)展存儲(chǔ)能夠作為一個(gè)數(shù)據(jù)湖,流的前史數(shù)據(jù)能夠存入其中與其他非流的數(shù)據(jù)集共存,在節(jié)省了數(shù)據(jù)遷移、存儲(chǔ)運(yùn)維開銷的一同能夠處理數(shù)據(jù)孤島的問題,批流結(jié)合的核算將會(huì)更加便利。
分層架構(gòu)能夠處理渙散的多客戶端。為了處理容錯(cuò)康復(fù)的問題,咱們?cè)诹鞔鎯?chǔ)的基礎(chǔ)上增加了分布式 log 存儲(chǔ)。
在真實(shí)運(yùn)用實(shí)例中,實(shí)時(shí)運(yùn)用程序的流量或許跟著時(shí)間動(dòng)搖,為了應(yīng)對(duì)數(shù)據(jù)的峰谷,咱們引進(jìn)了動(dòng)態(tài)彈性功用。
在左上角的圖標(biāo)中,橫軸表示時(shí)間,縱軸表示運(yùn)用程序的數(shù)據(jù)。它的波形圖剛開始很平穩(wěn),到了特定點(diǎn)時(shí)數(shù)據(jù)量突然變大,這往往是一些跟時(shí)間有關(guān)的運(yùn)用程序的特性,比方遲早高峰、雙十一等場(chǎng)景,這個(gè)時(shí)候流量就會(huì)蜂擁而入。
一個(gè)齊備的流存儲(chǔ)體系應(yīng)該能夠感知到實(shí)時(shí)流量的改變進(jìn)行資源的合理分配。當(dāng)數(shù)據(jù)量變大時(shí),底層會(huì)動(dòng)態(tài)地分配更多的存儲(chǔ)單元處理數(shù)據(jù)。在云原生年代的底層架構(gòu)中,動(dòng)態(tài)彈性也是通用的存儲(chǔ)體系中十分重要的一點(diǎn)。
二、Pravega 功用架構(gòu)詳解
Pravega 的規(guī)劃宗旨是成為流的實(shí)時(shí)存儲(chǔ)處理計(jì)劃。
- 榜首,運(yùn)用程序?qū)?shù)據(jù)耐久化存儲(chǔ)到 Pravega 中,借助分層存儲(chǔ)架構(gòu),Pravega Stream 完結(jié)了無上限的流存儲(chǔ);
- 第二,Pravega 支撐端到端的僅一次語義,包含讀端的 checkpoint 與事務(wù)性寫功用,使得核算能夠拆分為多個(gè)牢靠的獨(dú)立運(yùn)用程序,完結(jié)了流式體系的微服務(wù)架構(gòu);
- 第三,Pravega 的動(dòng)態(tài)彈性機(jī)制,能夠完結(jié)流量監(jiān)控并主動(dòng)在底層進(jìn)行資源的分配,讓開發(fā)和運(yùn)維人員無需手動(dòng)調(diào)度集群。
Pravega 獨(dú)立的彈性機(jī)制,讓出產(chǎn)者和消費(fèi)者互不影響,數(shù)據(jù)處理管道變得賦有彈性,能對(duì)數(shù)據(jù)的實(shí)時(shí)改變做出當(dāng)令的反應(yīng)。
如圖所示,Pravega 是從存儲(chǔ)的視角看待流數(shù)據(jù)。Kafka 自身的定位是音訊體系,所以它會(huì)從音訊視角看待流數(shù)據(jù)。音訊體系與存儲(chǔ)體系的定位是不同的,音訊體系是指音訊傳輸體系,主要重視數(shù)據(jù)傳輸與出產(chǎn)消費(fèi)的過程。Pravega 的定位是企業(yè)級(jí)的分布式流存儲(chǔ)產(chǎn)品,不光滿意流的特點(diǎn)還支撐數(shù)據(jù)存儲(chǔ)的耐久化、安全牢靠、隔離等特點(diǎn)。
視角的不同帶來了規(guī)劃架構(gòu)上的差異性,因?yàn)橐粲嶓w系無需處理長時(shí)間的數(shù)據(jù)存儲(chǔ),因而都會(huì)需求額外的任務(wù)和組件進(jìn)行數(shù)據(jù)的轉(zhuǎn)移來完結(jié)耐久化。而定位流存儲(chǔ)的 Pravega 則在主存儲(chǔ)中直接處理了數(shù)據(jù) retention 問題。Pravega 的數(shù)據(jù)存儲(chǔ)的核心引擎稱之為 segment store,直接對(duì)接 HDFS 或 S3 的分布式存儲(chǔ)組件用以進(jìn)行長期、耐久化的存儲(chǔ)。依托底層存儲(chǔ)組件的成熟架構(gòu)與可擴(kuò)展能力,Pravega 在存儲(chǔ)端也就自然具有了大規(guī)模存儲(chǔ)和可擴(kuò)展的特性。
另一個(gè)架構(gòu)上的差異則來自于客戶端的小寫優(yōu)化。在典型的 IoT 場(chǎng)景中,邊際端的寫入端數(shù)量通常比較大,而每次寫入的數(shù)據(jù)量或許并不多。Pravega 的規(guī)劃也充分考慮了這一場(chǎng)景,采用了在客戶端和 segment store 兩次 batching 的優(yōu)化,將來自多個(gè)客戶端的小寫合并成關(guān)于底層磁盤友愛的小批量寫入,然后在確保低延時(shí)的基礎(chǔ)上,大幅提升了高并發(fā)寫入的功用。
這一規(guī)劃也相應(yīng)地對(duì)功用產(chǎn)生了影響。Pravega 測(cè)驗(yàn)了在相同的高并發(fā)負(fù)載下,與 Kafka 和 Pulsar 的功用對(duì)比,試驗(yàn)成果如下圖所示。在咱們的測(cè)驗(yàn)中運(yùn)用高度并行的負(fù)載,每個(gè) Stream/Topic 最多有 100 個(gè)寫入端和 5000 個(gè) segment。Pravega 能夠在一切情況下都保持 250MBps 的速率,這也是測(cè)驗(yàn)云環(huán)境中磁盤的寫入最大速率。而左右兩圖中能夠看到,Kafka 和 Pulsar 在增加分區(qū)和出產(chǎn)者數(shù)量時(shí),功用都會(huì)顯著降低,在大規(guī)模的并發(fā)度下先后呈現(xiàn)功用的降級(jí)。
這一試驗(yàn)過程和環(huán)境也完整地揭露在這一篇博客之中,試驗(yàn)的代碼也徹底開源并奉獻(xiàn)到了 openmessaging-benchmark 之中,有愛好的同學(xué)能夠測(cè)驗(yàn)重現(xiàn)。
三、Pravega 流存儲(chǔ)數(shù)據(jù)演示
從存儲(chǔ)角度,咱們已經(jīng)介紹了 Pravega 對(duì)流存儲(chǔ)的改變和架構(gòu)特點(diǎn)。接下來,咱們講講怎么消費(fèi)流存儲(chǔ)數(shù)據(jù)。Pravega 怎么跟 Flink 合作,構(gòu)建端到端的大數(shù)據(jù)流水處理線。
咱們提出的大數(shù)據(jù)架構(gòu),以 Apache Flink 作為核算引擎,經(jīng)過共同的模型以及 API 來共同批處理和流處理;以 Pravega 作為存儲(chǔ)引擎,為流式數(shù)據(jù)存儲(chǔ)供給共同的籠統(tǒng),使得對(duì)前史和實(shí)時(shí)數(shù)據(jù)有共同的拜訪方法。兩者共同形成了從存儲(chǔ)到核算的閉環(huán),能夠一同應(yīng)對(duì)高吞吐的前史數(shù)據(jù)和低延時(shí)的實(shí)時(shí)數(shù)據(jù)。
更進(jìn)一步,關(guān)于邊際核算的場(chǎng)景,Pravega 也兼容常用的音訊通信協(xié)議,完結(jié)了相應(yīng)的數(shù)據(jù)接收器,能夠作為大數(shù)據(jù)流水處理的管道,從管道收集數(shù)據(jù),把數(shù)據(jù)給到下流核算引擎運(yùn)用程序,完結(jié)從邊際到數(shù)據(jù)中心的數(shù)據(jù)處理流水線。經(jīng)過這樣的方法,企業(yè)級(jí)用戶能夠很容易地搭建自己的大數(shù)據(jù)處理流水線。這也是咱們開發(fā)流存儲(chǔ)產(chǎn)品的意圖。
咱們認(rèn)為在云原生年代,動(dòng)態(tài)彈性的功用是十分重要的,這樣不光能夠減輕運(yùn)用程序開發(fā)的難度,而且能夠更高效地利用底層的硬件資源。之前介紹了 Pravega 的動(dòng)態(tài)彈性,F(xiàn)link 的新版本也支撐了動(dòng)態(tài)彈性功用。那么咱們將兩個(gè)獨(dú)立的彈性聯(lián)系起來,把動(dòng)態(tài)彈性功用推到整條流水線呢?
咱們跟社區(qū)一同合作,完結(jié)了完整的彈性鏈路,把端到端的 Auto-scaling 功用帶給一切的客戶。上圖是端到端 Auto-scaling 概念的示意圖。當(dāng)數(shù)據(jù)注入變大時(shí),Pravega 能夠產(chǎn)生主動(dòng)彈性,分配更多的 segment 處理存儲(chǔ)端的壓力。而經(jīng)過 metrics 以及 Kubernetes HPA 功用,F(xiàn)link 也能夠相應(yīng)地分配更多并行核算的節(jié)點(diǎn)給到相應(yīng)的核算任務(wù)中去,然后應(yīng)對(duì)數(shù)據(jù)流量的改變。這是新一代對(duì)企業(yè)級(jí)用戶十分關(guān)鍵的云原生能力。
四、展望未來
在 Flink Forward Asia 2021 大會(huì)上,Pravega 社區(qū)也跟 Flink 一同,共同發(fā)布了數(shù)據(jù)庫同步計(jì)劃的白皮書。Pravega 作為 CNCF 的項(xiàng)目也在不斷開展,一同也會(huì)更堅(jiān)定地?fù)肀ч_源。
跟著技術(shù)的不斷開展,越來越多的流式引擎和數(shù)據(jù)庫引擎開始朝著交融的方向開展。展望未來,存儲(chǔ)和核算,流和表的邊界逐漸含糊。Pravega 批流一體的存儲(chǔ)規(guī)劃也暗合了 Flink 未來很重要的一個(gè)開展方向。Pravega 也會(huì)積極與包含 Flink 在內(nèi)的數(shù)據(jù)湖倉相關(guān)的開源社區(qū)溝通合作,為企業(yè)級(jí)用戶構(gòu)建更友愛、更強(qiáng)壯的新一代數(shù)據(jù)流水線。