跳轉到主要內容
工程的博客

克隆人的進攻對災難恢複(可用性複雜性)

2021年4月20日 工程的博客

分享這篇文章

得到一個O ' reilly的新電子書的早期預覽一步一步的指導你需要開始使用三角洲湖。


筆記本:使用深克隆進行災難恢複與三角洲湖在磚

對於大多數企業來說,建立一個業務連續性計劃是至關重要的,確保重要的服務,如數據存儲,保持在線在發生災難,緊急或其他問題。對許多人來說,這是關鍵任務數據團隊仍然可以使用磚平台甚至在罕見的情況下區域雲中斷,是否引起的災難就像一個颶風或其他不可預見的事件。Beplay体育安卓版本如上所述的AzureAWS災難恢複向導,磚通常是作為一個整體的核心部分數據的生態係統,包括,但不限於,上遊數據攝入,複雜的數據管道,進行存儲、商業智能和機器學習和人工智能編製。一些用例可能特別敏感地區service-wide停機。

災難恢複——工具,政策和程序,以恢複或確保連續性數據基礎設施——是任何業務連續性計劃的一個重要組成部分。三角洲克隆簡化數據複製,使你為三角洲開發一個有效的恢複策略表。使用增量克隆允許您快速輕鬆地以正確的順序逐步同步數據之間或地區中小學網站。三角洲利用事務日誌執行此同步,類似於RDBMS如何複製依賴於它的日誌或恢複數據庫恢複到一個穩定的版本。而雲多區同步等解決方案可以解決一些問題,這些過程通常是異步的,導致執行的操作順序和數據損壞。

這篇文章展示了三角洲克隆可以避免這些問題,促進博士通過控製過程數據中心之間的數據同步。

什麼是克隆?

當然,第一個問題是:克隆是什麼?

克隆是源表的副本在一個給定的時間點。它們有相同的元數據作為源表:相同的模式,限製,列描述、統計數據和分區。但是請注意,克隆有一個單獨的,獨立的曆史從源表。例如,查詢時間旅行在你的源表和克隆可能不會返回相同的結果。

淺(也稱為零拷貝)克隆隻複製表的元數據被克隆;表的數據文件本身並不是複製。因為這種類型的克隆不創建另一個物理的拷貝數據,存儲成本最小。淺克隆不是資源密集型的,可以快速創建。然而,這些克隆不是獨立和維護依賴他們克隆的來源。淺克隆是有益的測試和實驗,如分段結構變化對生產表沒有修改它。有關更多信息,請參考輕鬆克隆你的三角洲湖測試,分享和毫升再現性

深克隆使一個完整的表的元數據和數據文件的副本被克隆。從這個意義上講,它類似於複製與cta命令(創建表……為…選擇…)。但是,它是簡單的因為它使一個忠實的複製原始表的當前版本的時間點,和你不需要測量分區選項,約束和其他信息與商品交易顧問基金。此外,它的速度快得多,更加健壯,可以以增量的方式工作。最後一點是至關重要的,它使一個有效的解決方案隻能複製所需的數據,防止失敗,而不是所有的數據。

深克隆使一個完整的元數據和數據文件的副本的三角洲表被克隆。
來源:https://raw.githubusercontent.com/databricks/tech-talks/master/images/delta-lake-deep-clone.png

深克隆是很有用的:

  • 在生產環境中測試也不用擔心生產數據流程和影響用戶
  • 舉辦重大改變生產表
  • 確保毫升結果的再現性
  • 數據遷移、分享和/或歸檔

在本文中,我們將聚焦於三角洲深克隆災難恢複的作用。

給我克隆!

創建一個克隆可以用以下SQL命令:

創建取代loan_details_delta_clone深克隆loan_details_delta;

您可以查詢原始表(loan_details_delta)和克隆的表(loan_details_delta_clone)使用以下SQL語句:

——原始視圖的數據選擇addr_state, funded_amntloan_details_delta集團通過addr_state, funded_amnt——克隆視圖的數據選擇addr_state, funded_amntloan_details_delta_clone集團通過addr_state, funded_amnt

下麵的圖形顯示了使用磚筆記本的地圖可視化的結果。

克隆三角洲表的精確複製原始的,證明了這種磚筆記本地圖可視化。
https://raw.githubusercontent.com/databricks/tech-talks/master/images/delta-lake-original-clone-view-map.png

深克隆的一個重要特征是它們允許增量更新。,而不是複製整個表,確保原始之間的一致性和克隆,隻行包含更改數據(例如,記錄被更新,刪除、合並或插入)需要被複製和/或修改下次表克隆。

深三角洲克隆表允許增量更新
https://raw.githubusercontent.com/databricks/tech-talks/master/images/deep-clone-incremental-update.png

來說明增量更新處理深克隆,我們原來的表中刪除一些行(loan_details_delta)使用以下SQL語句(步驟1在上麵的圖):

刪除loan_details_delta在哪裏addr_state=“哦”;

在這一點上,原來的表(loan_details_delta)不再包含俄亥俄州(OH)的行,而克隆表(loan_details_delta_clone)仍然包含那些行。地麵兩個表,我們再次執行克隆操作(步驟2):

創建取代loan_details_delta_clone深克隆loan_details_delta

克隆和原始表現在同步(這將在以下部分中顯而易見)。但而不是複製整個原始表的內容,逐步刪除行,大大加快這一過程。克隆表隻會更新修改原始表的行,所以在這種情況下,行對應於俄亥俄州被移除,但所有其他行保持不變。

好的,讓我們從這場災難恢複的一個博客

雖然災難恢複通過克隆概念簡單,所有DBA或DevOps工程師將證明,一個災難恢複解決方案的實際實現要複雜的多。許多生產係統需要一個雙向災難恢複過程,類似於關係數據庫係統的active - active集群。當活動服務器()脫機時,備用服務器(克隆)需要上線的讀和寫操作。所有後續係統發生的變化(如插入和修改數據)被記錄到備用服務器,目前活躍的服務器集群中。然後,一旦最初的服務器()重新上線,需要re-sync上執行的所有更改克隆。在完成re-sync,服務器又變得活躍克隆服務器將返回到二級狀態。因為係統不斷地服務和/或修改數據,重要的是,數據的副本同步快速消除數據丟失

深克隆很容易執行這個工作流,即使在一個分布式係統多區,見以下圖片。

三角洲深克隆很容易工作流執行同步,即使在多區分布式係統。
來源:https://raw.githubusercontent.com/databricks/tech-talks/master/images/delta-lake-deep-clone-timeline.png

在這個例子中,磚的活躍區域和一個表克隆表在二級地區:

  • 在t0: insert / update語句(合並)上執行表,然後執行深克隆保持克隆表同步。
  • 在t1:兩個表保持同步。
  • t2:桌子是無法訪問。的克隆表現在變成源的,這是所有查詢和數據修改發生的時間戳。
  • 在t3:執行DELETE語句源的
  • t4:現在表是可訪問的,但源的不同步。
  • 在t4”:我們深克隆同步運行源的
  • 在t5:現在兩個副本都是同步的,簡曆的身份活躍的表和源的二次表,克隆

接下來,我們將向您展示如何執行這些步驟在磚使用SQL命令。你也可以通過運行數據磚的筆記本使用深克隆進行災難恢複與三角洲湖在磚

修改源

我們開始通過修改表中的數據在我們的活動區域(),我們正常的數據處理的一部分。

在三角洲克隆過程的第一步,活躍區域中的數據被修改的正常數據處理工作流。
來源:https://raw.githubusercontent.com/databricks/tech - talks/master/images/delta - -深湖-克隆-時間- 0. - png
例子更新表說明第一步的δ克隆的過程。
來源:https://raw.githubusercontent.com/databricks/tech-talks/master/images/delta-lake-insert-update-example.png

在本例中,我們將實現合並使用“更新”聲明(更新列)“TX”和一個插入聲明為“哦”(根據條目插入新行“TX”“阿茲”)。

檢查版本的源和克隆表
我們開始這個場景在t0,loan_details_deltaloan_details_delta_clone表是同步的;然後,我們修改了loan_details_delta表。我們如何判斷表具有相同版本的數據沒有查詢和比較他們嗎?三角洲湖,這個信息是存儲在事務日誌,所以深克隆語句可以自動確定源和克隆版本單個表中查詢。

當您執行描述曆史DeltaTable,你會得到類似於下麵的截圖。

三角洲湖,版本信息是存儲在事務日誌,所以深克隆語句可以自動確定源和克隆版本在單個表查詢。

注意:原始表loan_details_delta雖然克隆表loan_details_delta_clone

潛水深入:

  • 源表,我們查詢最新版本確定表版本——在這裏,版本2。
  • 對於克隆表,我們查詢最近的operationParameters.sourceVersion來確定的版本克隆源表的表——在這裏,版本1。

如上所述,所有這些信息都存儲在三角洲湖事務日誌。您還可以使用checkTableVersions ()函數包含在相關的筆記本查詢事務日誌來驗證版本的兩個表:

checkTableVersions ()三角洲湖原始版本:2,克隆版本:1

有關日誌的更多信息,請查看深入三角洲湖:開箱事務日誌

地麵源和克隆

我們看到在前麵的部分中,源表現在v2克隆表在v1。

來源:https://raw.githubusercontent.com/databricks/tech-talks/master/images/delta-lake-deep-clone-timeline-0b1.png

同步兩個表,我們在t1運行以下命令:

創建取代loan_details_delta_clone深克隆loan_details_delta;
同步三角洲克隆的兩個表,您運行一個創建o
來源:https://raw.githubusercontent.com/databricks/tech - talks/master/images/delta - -深湖-克隆-時間- 1. - png

源表並不容易

在t2,桌子是無法訪問。無論什麼原因——從用戶錯誤到整個區域下降——你不得不承認這不是一個偉大的生活黑客醒來。

生產開發人員應該準備他們的係統去offlne。
來源:https://www.reddit.com/r/ProgrammerHumor/comments/kvwj9f/burn_the_backups_if_you_need_that_extra_kick

笑話,現實情況是,你應該做好準備生產係統脫機。幸運的是,因為你的業務連續性計劃,你有二次克隆,你可以重定向服務來讀取和修改你的數據。

數據校正

與你的原在二級區域(不可用,您的表克隆)現在是源的表。

與達美克隆,當你的原始來源是不可用,你的表在二級地區(克隆)願取而代之。
來源:https://raw.githubusercontent.com/databricks/tech - talks/master/images/delta - -深湖-克隆-時間- 2. - png

一些服務,不需要馬上修改數據可以切換到隻讀模式無法訪問,但很多服務和生產環境無法承受這樣的延誤。在這種情況下,在t3,我們需要修改源的數據和刪除一些記錄:

——運行”刪除“三角洲湖源”表刪除loan_detail_delta_clone在哪裏addr_state=“哦”;

如果你回顧一下表曆史或運行checkTableVersions (),(源)表運行後現在在版本4刪除聲明:

#檢查版本checkTableVersions (2)三角洲湖原始版本:沒有一個,克隆版本:4

因為原來的表是遙不可及的,它的版本是報道一個也沒有。

與達美克隆,當最初的來源是遙不可及的,它的版本是沒有報道。
來源:https://raw.githubusercontent.com/databricks/tech-talks/master/images/delta-lake-deep-clone-timeline-3b.png

克隆表的原因是在版本4可以快速確定通過回顧其曆史,這顯示了前三克隆操作和刪除命令:

描述曆史loan_details_delta_clone

版本 時間戳 操作
4 刪除
3 克隆
2 克隆
1 克隆
0 創建表選擇

回到源

唷, ,原表重新上線!

與達美克隆,一旦原始回到線上,它將不同步的克隆。
來源:https://raw.githubusercontent.com/databricks/tech-talks/master/images/delta-lake-deep-clone-timeline-4b.png

但當我們看到在前麵的步驟,現在有差異源的複製品。幸運的是,很容易解決這個問題:

/ *失敗從“loan_details_delta_clone”表的“loan_details_delta”表* /創建取代loan_details_delta深克隆loan_details_delta_clone;

通過運行一個深克隆來替換原來的(loans_details_delta_clone),我們可以快速返回到原始狀態。

三角洲湖,通過運行一個深克隆替換原來的源表(克隆,我們可以迅速返回到原始狀態。
來源:https://raw.githubusercontent.com/databricks/tech - talks/master/images/delta - -深湖-克隆-時間- 5. - png

現在我們所有的服務可以回到最初,源的表返回它克隆(或二次)狀態。

你們中的一些人可能已經指出表是3,而現在版本克隆桌子是版本4。這是因為版本號與桌子上操作的數量。在這個例子中,表有更少的操作:

描述曆史loan_details_delta|- - - - - - - | - - - - - - - - - - - - | - - - | - - - - - - - - - - - - | - - - ||版本|時間戳|推薦- - - - - - | - - - | |操作|- - - - - - - | - - - - - - - - - - - - | - - - | - - - - - - - - - - - - | - - - ||3|||克隆|||2|||合並|||1|||刪除|||0|||||

謹慎的話語


              

這災難恢複的方法確保可用性的讀和寫無論中斷。然而,這種付出的成本可能失去中間變化。考慮以下場景。

δ克隆方法對於數據災難恢複,你放心的可用性的讀和寫,但是有可能你會失去中間變化在某些場景。

請注意,這裏有一個更新在t = 1,這兩者之間發生克隆操作。很有可能在這個區間的任何更改都將丟失在t = 4當第二個克隆操作發生。以確保不會丟失任何變化,你必須保證沒有寫入源表發生從t = 1 t = 4。這可能是一個挑戰來完成,考慮到整個區域可能是行為不端。話雖這麼說,有很多用例,可用性是更重要的考慮。

總結

本文演示了如何執行雙向災難恢複使用深克隆特性與三角洲湖磚。隻使用SQL語句與三角洲湖,可以極大地簡化和加速數據複製你的業務連續性計劃的一部分。有關三角洲克隆的更多信息,請參考輕鬆克隆你的三角洲湖測試,分享和毫升再現性。看看使用深克隆進行災難恢複與三角洲湖在磚走過這個鍛煉自己與磚運行時。

確認

我們要感謝彼得·斯特恩,瑞秋的頭,瑞恩•肯尼迪Afsana阿夫紮爾,阿什利•特這個博客為他們寶貴的貢獻。

免費試著磚
看到所有工程的博客的帖子
Baidu
map