雲原生無伺服器以及實時數倉降低資料分析門檻

danny_2018發表於2023-03-15

分享議題:

1. Amazon Redshift 10年技術創新與演進;

從2012年到2022年,Redshift已經發展了十年。走到今天,RedShift的底層架構發生了哪些變化,提供了哪些功能和滿足雲原生數倉未來發展的關鍵特性,本文將重點闡述。

2. Amazon Redshift Serverless架構設計與應用場景;

亞馬遜雲科技所有資料分析服務已實現全棧Serverless化,包括OpenSearch、EMR、Glue都已經支援Serverless。另外,Redshift也有自己的Serverless,引領資料分析服務走向未來。至於,Redshift Serverless具體是怎樣一種架構,在什麼場景下會用到,這部分內容會進行全面分析。

3. 基於Amazon Redshift的雲原生實時數倉實踐。

Redshift作為雲原生數倉、實時數倉,都有哪些新功能?如何滿足使用者對實時性的要求?在實時數倉方面有哪些實踐?最後一部分將結合實際業務場景進行分析!

十年迭代

現在,全球大概有數萬使用者使用Redshift進行資料分析,這些使用者來自遊戲、金融、醫療、消費、網際網路等。在十多年發展歷程中,Redshift一直在持續迭代,很多功能和特性都源於企業的真實業務需求。

具體而言,客戶數倉場景主要包括四大塊:

第一, 常規業務運營與BI分析;第二,實時數倉分析;第三,查詢、報表與資料分析;第四,機器學習與分析預測。

值得一提的是,Redshift現在支援機器學習演算法,使用者可以用SQL方式直接建立機器學習模型,比如:XGBoost、多層感知機、KMEANS等這些機器學習方法,但使用者自己並不用去做這件事情,Redshift在後臺整合了亞馬遜雲科技另外一個機器學習的服務SageMaker。透過呼叫SageMaker Autopilot,去完成機器學習能力,這也是亞馬遜雲科技經常強調的一個概念,即“資料分析產品之間要相互融合,資料無縫流轉”。這樣做的好處是,使用者不需要對演算法本身有太多深入的瞭解,只要用SQL建立一個Model就可以做機器學習演算法分析,模型的最佳化,超引數的選擇都交給Redshift來做,我們使用就像寫SQL一樣,方便快捷。

架構創新

Redshift本身是一個MPP架構,紅色是Leader Node,下面是Compute Node。Redshift表支援每列自動壓縮,單列的壓縮演算法可以根據資料型別自己選擇、自定義配置,向量化執行、列式儲存,動態程式碼生成這些在OLAP引擎上的特性Redshift都做了深度的最佳化。對於客戶來講,Leader Node是免費的。比如:要建立一個Redshift Provisioned Cluster,購買4個節點,就是買了4個Compute Node,Leader Node也是一樣大小,但是不收費。Redshift底層儲存叫Reashift Managed Storage,當前Redshift是完全存算分離架構,底層資料是在S3上。做到存算分離之後,會有更多想象空間,儲存和計算就能完全獨立做擴充套件、做伸縮了。

對於儲存,雖然資料在S3上,使用者不能直接訪問它,是Redshift自己管理最佳化後的儲存格式,資料會以Redshift自己管理的的方式存到S3上,對使用者來說“不可見”,儲存價格在中國區比S3儲存價格還低,S3標準儲存中國北京區域是每¥0.195/GB,Redshift託管儲存是¥ 0.154/GB,S3保證資料的永續性,無需冗餘儲存資料,相比用本地盤節省大幅節省成本。

做了存算分離,我們就可以實現Data Sharing的功能,將一個叢集的資料共享給另外一個叢集,底層資料共用一份,共享的是後設資料,可以做到秒級別的資料共享。資料共享可以支援跨賬號、跨區域以及資料的雙向共享 ,這對使用者非常方便。我們還可以做生產和消費的分離,比如:有一個生產者叢集只ETL,做完後可以暫定,暫定之後叢集就不收費用,資料查詢透過將生產者叢集的資料共享給另外一個消費者叢集, 資料就只是一份,共享過去的只是表結構資訊等後設資料,我們可以看到做了存算分離之後架構會變得更靈活。

Redshift早在2017年已經實現湖和倉的融合,Redshift Spectrum可以直接查詢在S3上開放格式的資料(parquet,json,csv等),當然也可以將資料寫入到湖中。倉和湖的資料可以無縫流轉。2019年Redshift實現了Federated Query,可以實現對關係型資料庫,RDS/Aurora MySQL, PostgreSQL的查詢。需要注意的是,Spectrum和Federated Query相比直接將資料儲存到Redshift查詢,效能是有損失的。Redshift支援內表和這些外表的關聯查詢。

Redshift可以透過SQL的方式直接建立ML的模型,並自動訓練。客戶不用關注模型的超引數的選擇,演算法的最佳化。Redshift底層會呼叫SageMaker Autopilot自動幫助客戶選擇最適合模型引數。訓練完畢後返回推理函式,我們在數倉中直接將推理函式當做UDF使用即可,完成批次資料的推理工作。Redshift ML 目前支援機器學習演算法XGBoost(AUTO ON 和OFF)和多層感知(AUTO ON)、K-Means(AUTO OFF)和線性學習器。

Concurrency Scaling是Redshift推出的專門應對高併發場景的功能。當業務查詢的高峰期,Redshift可以在秒級別擴充套件出來新的叢集應對高併發,當叢集併發下降負載降低是會自動回收擴充套件出來的叢集,並且該功能當主叢集每執行24小時送一個小時的併發積分,因此在我們的大部分客戶場景中使用該功能基本是免費的。

Redshift 內建機器學習演算法,很多我們建倉是需要關注的表結構的最佳化設定,Redshift透過機器學習,會在後臺自動完成相關最佳化。機器學習可以透過我們日常執行的SQL中學習到規律,比如兩個表經常做Join,Redshift學習到該規律後,會自動建立物化檢視,將SQL重定向到物化檢視,使用者完全無感的情況下提升查詢效能。Redshift對於半結構化的多層級巢狀資料提供了專有Super資料型別,簡單易用,相比常規使用JSON函式做欄位解析要高效數倍。

Serverless探索

使用Redshift Serverless,使用者只需關心資料的查詢分析,探索資料價值就可以了,底層的自動擴充套件、計算資源分配、叢集升級、資料備份、監控,這些都讓亞馬遜雲科技Redshift Serverless幫你去做。所需要的成本,也是按需計費,不查詢不計費。Serverless可以做到根據查詢負載自動擴充套件計算資源。使用Provisioned Cluster時,我們還要考慮到叢集節點個數的選擇,手動的擴縮容,當有高峰期負載過來之後,可能當前叢集不足以應對,要手動增加節點。而在Serverless環境下,完全沒有叢集概念,給的客戶的就是一個 Endpoint,直接連線查詢就可以了。

Redshift Provisioned Cluster預設的併發是50,但是在Serverless能夠達到200。這跟SQL複雜度也有關係,當SQL比較簡單時,併發可以達到500,如果業務併發要求更高的話,可以在Serverless前面放一個NLB,多個Serverless應對高併發。

有了Serverless之後,是不是Provisioned Cluster就不需要了?其實不是這樣,當我們是負載是不可預測,或者某個時間段是高峰期,其它時間段只是零星的查詢。這時使用Serverless是很好的選擇。但如果我們在一天中負載都是比較恆定的,這時叢集模式是更好的選擇。比如實時Streaming資料一天24小時都在往Redshift裡寫,ETL操作每分鐘都在叢集上執行,叢集CPU利用率可以達到70%以上, Provisioned Cluster相比Serverless會更節省成本。

▲Redshift Serverless 架構

Serverless上支援功能是非常全面的,在Provisioned Cluster支援的功能在 Serverless都可以支援。Serverless不再有叢集的概念,計算單元是RPU,工作負載自動最佳化、計算資源自動擴充套件,自動運維、按量付費,存算分離資料在S3上。Spectrum的功能、機器學習能力、關係型資料庫查詢,Data Sharing都支援。注意的是如果Provision叢集資料需要共享給Serverless時,Provision叢集必須加密,否則無法共享,這是為了保護資料的安全性。

▲Redshift Serverless 特點

Redshift Serverless有哪些特點:

1、簡化使用者體驗,資源自動擴縮,無需管理資源,無需運維操作

2、智慧動態計算,自動調配和擴充套件資料倉儲容量,提供一致快速的使用者體驗。

3、支援所有Redshift的功能和效能特性。

4、按需付費,查時才收費,不查不收費。

5、統一計費

在叢集模式中Spectrum的查詢費用和併發擴充套件都要單獨收費,Serverless都是統一按照RPU收費,不再有額外的費用,統一計價模型對使用者比較方便。儲存費用就是託管儲存和使用者快照的費用。

Redshift Serverless可以輕鬆應對那些無法預測和瞬態高峰的負載需求,有規律的高低負載視窗等負載場景,這是Serverless最擅長的事情。

BI場景下無需考慮基礎設施即可輕鬆上手,給到一個Endpoint,BI接過來就可以查詢。開發/測試環境以及即席業務分析,無需管理維護多個叢集,不用預製一個小叢集,只有測試的時候查詢就收費,不查就不收費,所以開發測試環境下也是一個非常好的選擇。

一個客戶場景案例,透過DMS將資料實時CDC傳送到Redshift Provisioned Cluster。DMS是亞馬遜雲科技上一個資料遷移服務,可以解析MySQL Binlog將資料實時傳送到Redshift,支援資料的自動Merge,支援Schema變更的自動同步。在Provisioned Cluster上進行資料加工、轉換,構建DWD/DWS層。透過Data Sharing功能,把資料Share到多個Serverless,每個Serverless就是一個Work Group,對應到不同的部門,單獨部門單獨去做成本結算,每個部門有自己的資源隔離。由於CDC是每時每刻都要寫資料的,預置一個Provision Cluster是比較合適的。而業務端的查詢負載是有高有底,且各個業務部門資源隔離,確保業務SLA,費用單獨結算。在這個場景下,Provision Cluster和Serverless共存,尤其是實時場景下,是一個值得借鑑和使用的方式。

雲原生實時數倉實踐

Redshift在實時數倉方面會有自己的功能特點,提供的功能特性會更貼近客戶的需求。

關於實時數倉,客戶的一般有三個需求:

1、資料攝入高吞吐、低延遲。

2、簡單配置與使用。

使用者用複雜的配置,就可以把訊息中心的資料比如Kinesis Data Stream ,Kafka接入到數倉,中間不要構建其他資料傳輸的服務,或者進行程式碼開發,在幾秒鐘內實現實時分析。

3、提高生產力。能使用SQL對流資料進行豐富的查詢分析,無需依賴其他語言。

實時數倉應用場景主要有:

改善遊戲體驗。透過分析玩家的實時資料,專注於遊戲轉化率、玩家留存和最佳化遊戲體驗。

實時應用洞察。透過訪問和分析應用程式日誌檔案和網路日誌中的流資料,開發人員和工程師可以對問題進行實時故障排除,提供更好的產品,併為預防措施提供警報系統。

廣告分析。客戶通常在一次會話中訪問數十個網站,但營銷人員一般只分析自己的網站。透過將資料實時攝入到倉庫中,可以實時評估您的客戶足跡和行為。

零售行業銷售分析。近實時訪問和視覺化所有POS零售銷售交易資料,以實現實時分析、報告和視覺化。

物聯網資料實時分析。網際網路APP、物聯網等實時應用程式監控、欺詐檢測和實時排行榜等應用。

Redshift提供的實時資料攝入的功能叫 Streaming Ingestion。亞馬遜雲科技有兩個在分析場景下常用的訊息服務Kinesis Data Streams和 MSK(託管的Kafka服務)。Redshift Streaming Ingestion可以直接把這兩個元件的資料直接攝入到Redshift中,在Redshift裡只要建立一個檢視,把資料接過來做SQL查詢就可以了,無需引入其它資料傳輸元件,無需程式碼開發。吞吐可以支援高達30萬/秒的資料攝入,小於30秒的延遲。

實時數倉場景下,Redshift Streaming Ingestion更易於使用。全SQL配置,直接將的資料實時攝入到Redshift,中間不需要程式程式碼的開發;同時,結構更靈活,如果在流裡的資料是經常變化的結構,這時將資料解析為SUPER,當增加了欄位或刪除了某些欄位時,SUPER完全能支援,不用更改Redshift第一個基表,下層做ETL時再做轉換就可以了。

2022年,Redshift釋出了另外一個在實時方面的重要能力——Zero-ETL。當需要將Aurora MySQL的資料實時同步到Redshift,之前需要是解析BinLog過來,進入訊息佇列,再從訊息佇列投遞到數倉,整個過程比較複雜,維護成本也會比較高。但是zero-ETL是在儲存層面,直接把資料複製到Redshift,中間不需要任何CDC工具,就是在雲原生基礎上兩個服務之間的資料同步,可以做到零程式碼。Aurora也是存算分離架構, Redshift也是存算分離的架構,從儲存層面把資料直接拿過來了,所以中間無須再構建任何的CDC工具做資料載入,相比CDC方式不僅能夠降低攝入延遲,同時也不會對源端資料庫造成壓力。

除了Zero-ETL Redshift在2022還發布了其它新的功能:

1.Redshift與Spark的整合

當前Redshift和Spark可以無縫整合, Spark Streaming可以直接將資料寫入到Redshift。2022年,我們釋出了最佳化Redshift Spark Connector,支援了謂詞下推,支援中間結果寫Parquet。相比開源的Redshift Spark Connector,它的效能有10倍以上的效能提升。在實時層面,我們有Redshift Streaming Ingestion但如果客戶依然使用的是Spark技術棧, Spark Streaming接到Redshift完全沒有問題。

2.S3 AutoCopy自動載入資料

有些客戶的實時資料並不是在訊息佇列裡,而是在S3上,每分鐘在S3上產生一個檔案,或者幾十秒在S3上產生一個檔案。要把S3的資料寫到Redshift只需要執行一個copy命令,但如果想實時監控某一個S3的目錄,只要有新檔案就copy資料到Redshift,需要手動構建Pipeline,需要要用排程工具去做封裝,處理中間容錯。現在,AutoCopy支援自動從S3載入資料到Redshift,只需要SQL方式建立一個Job就可以了,只要指定S3上某一個資料夾,該資料夾下所產生的資料就可以實時自動的copy到Redshift。如果某一個檔案複製出錯,會在系統表裡記錄哪個檔案出錯,回填、補資料檔案,都可以實現。有了這個功能之後,從S3實時載入資料,不需要手動構建Pipeline,只需要在Redshift Create Job就可以了,簡化了整個資料載入的過程。

小結

亞馬遜雲科技Redshift,有效降低了資料分析的門檻,為客戶帶來了更卓越的體驗。尤其在釋出了Streaming Ingestion 和 Redshift Serverless之後,可以做到更簡單的實時應用分析、更加靈活的數倉架構設計。

分享嘉賓介紹

潘超

亞馬遜雲科技資料分析專家

亞馬遜雲科技資料分析產品技術專家,負責亞馬遜資料分析產品的技術解決方案工作。在大資料儲存、OLAP、離線、實時資料分析、使用者畫像及推薦系統等技術有深入的研究,對企業大資料平臺構建有豐富的實戰經驗。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31547898/viewspace-2939823/,如需轉載,請註明出處,否則將追究法律責任。

相關文章