複製功能總覽
Bigtable 的複製功能可從多個地區或同個地區的多個區域複製您的資料,從而提高資料的可用性及耐用性。您也可以將不同類型的要求轉送到不同的叢集,藉此區隔工作負載。
本頁說明 Bigtable 的複製功能運作方式,並介紹常見的複製功能案例。本文也會說明啟用複製功能時,Bigtable 使用的一致性模型,並描述叢集故障轉移至另一個叢集時會發生什麼情況。
- 如需常用設定範例,請參閱「複製設定範例」。
- 如要瞭解如何建立使用複製功能的執行個體,請參閱建立執行個體。
- 如要瞭解如何啟用現有執行個體的複製功能,請參閱新增叢集。
- 如要瞭解與複製功能相關的費用,請參閱定價。
閱讀本頁之前,請先熟悉 Bigtable 總覽。
複製功能如何運作
如要在 Bigtable 執行個體中使用複製功能,請建立新的執行個體 (其中應包含一個以上的叢集),或是在現有執行個體中新增叢集。
Bigtable 執行個體最多可有 8 個 Bigtable 區域的叢集,且在每個區域中,執行個體每個可用區只能包含一個叢集。舉例來說,如果您在 8 個區域中建立執行個體,每個區域有 3 個可用區,則執行個體最多可有 24 個叢集。
地區中的每個區域只能包含一個叢集。 將叢集放在不同的區域或地區,就能確保萬一某個 Google Cloud 區域或地區無法使用時,您還是可以存取執行個體的資料。
當您建立具有多個叢集的執行個體時,Bigtable 會立即開始同步處理不同叢集的資料,並在執行個體存有叢集的每個區域,另外為資料建立獨立複本。同樣地,當您新增叢集到現有執行個體時,Bigtable 會將現有資料從原始叢集區域複製到新叢集的所在區域,然後再同步處理區域之間的變更。
Bigtable 會複製您的資料發生的任何變化,包括下列所有類型的變更:
- 現有資料表中資料的更新
- 新的和被刪除的資料表
- 新增和被移除的欄位系列
- 變更資料欄系列的垃圾收集政策
複寫作業會有延遲,且叢集之間的一致性是最終一致性。
Bigtable 會將執行個體中的每個叢集視為主要叢集,因此您可以在每個叢集中執行讀取和寫入作業。您也可以設定您的執行個體,讓來自不同類型應用程式的要求轉送到不同叢集。
在您將叢集新增到叢集執行個體之前,必須注意更改複製表上的垃圾收集政策時適用的限制。
成效
使用複製功能會影響效能,因此在建立複製執行個體,或透過在單一叢集執行個體中新增叢集來啟用複製功能時,請先做好規劃。舉例來說,與相同地區中的複製叢集相較,不同地區中的複製叢集所需的複製延遲時間較長。此外,如果執行個體有多個叢集,通常需要更多節點來處理複製作業的額外工作。詳情請參閱「瞭解成效」。
用途
本節說明 Bigtable 複製功能的一些常見用途。若需要各種應用的最佳設定範例,以及其他應用的實施秘訣,請參閱複製功能設定值範例。
將伺服應用程式與批次讀取隔離
當您使用單一叢集執行需要多次大量讀取操作的批次分析工作,以及會混合執行讀取與寫入操作的應用程式時,龐大的批次工作會拖慢應用程式使用者的作業。複製功能可讓您將應用程式設定檔和單叢集轉送功能搭配使用,把批次分析工作和應用程式流量轉送至其他叢集,避免批次工作對應用程式的使用者造成影響。 進一步瞭解如何實施此應用做法。
提高可用性
如果執行個體只有一個叢集,資料的耐用性和可用性將受限於該叢集所在的區域。複製功能會將資料的複本分別儲存在多個區域或地區,並視需要自動在叢集之間進行容錯移轉,進而改善耐用性和可用性。進一步瞭解如何實施此應用做法。
提供近乎即時的備份功能
在某些情況下 (例如您無法讀取過時資料),您一律需要將要求轉送至單一叢集。然而,您仍然可以用一個叢集處理要求,並讓另一個叢集保持近乎即時的備份。如果提供服務的叢集無法使用,您可以手動容錯移轉到備份叢集,讓停機時間降到最短。進一步瞭解如何實施此應用做法。
確保您的資料遍及全球
您可在全球多個地區設定複製功能,將資料存放在距離客戶較近的位置。舉例來說,您可以在美國、歐洲和亞洲都建立具有複寫叢集的執行個體,然後將應用程式設定檔設為把應用程式流量轉送到最近的叢集。進一步瞭解如何實施此應用做法。
一致性模型
本節說明 Bigtable 可為複製作業提供的各種一致性模式,具體取決於您使用的路由政策。
最終一致性
根據預設,Bigtable 的複製功能具有最終一致性。這個術語是指如果您將一項變更寫入某個叢集,等系統將這項變更複製到各叢集後,最終您一定可以從這些叢集讀取到這項變更。
如果執行個體有回應,複製的延遲時間通常只需幾秒鐘或幾分鐘,不用耗費數小時。然而,如果您將大量資料寫入某一叢集,或如果某一叢集負載過重或暫時無法使用,複製功能可能要花一段時間才能趕上。而且要是叢集彼此距離很遠,複製延遲時間也會拉長。因此,請勿假設您每次都能讀取到寫入的最新值,或認為在寫入後幾秒鐘 Bigtable 就能複製該項變更。
讀寫一致性
您可以透過單一叢集轉送實現讀寫一致性,並使用多叢集轉送搭配資料列親和性轉送,或在執行個體的叢集分別位於不同區域時,達到高讀寫一致性。
單一叢集轉送
如果使用單叢集轉送,Bigtable 就能在啟用複製功能時提供讀後寫入一致性。這個一致性模型可確保應用程式讀取到的資料不會比應用程式本身最近寫入的資料更舊。
您使用的每個應用程式設定檔都必須設定為單叢集轉送,且所有應用程式設定檔都必須將要求轉送到同一個叢集。您可以同時將執行個體的其他叢集做為其他用途使用。
多叢集轉送,每個區域各有一個叢集
使用多叢集轉送時,Bigtable 一律會將要求轉送至最近的叢集。如果執行個體中的每個叢集都位於不同的 Bigtable 區域,且您使用為多叢集轉送設定的應用程式設定檔,則資料在來源區域內具有讀寫一致性,除非發生容錯移轉。
資料列相依性轉送
如要透過多叢集轉送,提高讀寫一致性的比率,請使用針對資料列親和性轉送 (黏性轉送) 設定的應用程式設定檔,將要求轉送至區域中有多個叢集的執行個體。
透過資料列親和性轉送,Bigtable 會根據要求的資料列鍵,自動將單一資料列的讀取和寫入要求轉送至特定叢集。您無法手動設定資料列鍵與叢集之間的對應。由於各種原因 (包括叢集狀況不佳、發生網路問題,或叢集收到過多要求),要求仍可能失敗,因此無法保證一致性。
同步一致性
在某些複製用途中,Bigtable 也可提供同步一致性,確保您所有應用程式的資料狀態都相同。如要獲得同步一致性,您使用的單叢集轉送應用程式設定檔設定應符合上述的讀寫一致性。不過,除非您必須容錯移轉到其他叢集,否則「不應」使用執行個體中的另一個叢集。請參閱複製功能設定範例,確認是否適用於您的用途。
解決衝突
Bigtable 資料表中的每個儲存格值,都會以四元組 (資料列鍵、資料欄系列、資料欄限定詞、時間戳記) 進行唯一識別。如要進一步瞭解這些 ID,請參閱 Bigtable 儲存模型。如果兩個寫入作業的四元組完全相同,但傳送至兩個不同的叢集,Bigtable 會根據伺服器端時間,使用內部「最後寫入者勝出」演算法自動解決衝突。Bigtable 的「最後寫入者勝出」實作方式是決定性的,當複寫趕上進度時,所有叢集都會有四元組的相同值。
應用程式設定檔
如果執行個體使用複製功能,您可以使用應用程式設定檔或應用程式設定檔,指定轉送政策。應用程式設定檔也會決定您是否可以執行單一資料列交易,包括讀取/修改/寫入作業 (包含遞增和附加) 及檢查/異動作業 (也稱為有條件的變動或有條件的寫入)。
詳情請參閱「應用程式設定檔」。 如需常用設定範例,請參閱「複製設定範例」。
路由政策
每個應用程式設定檔都有轉送政策,可控管哪些叢集會處理應用程式傳入的要求。轉送政策選項包括:
- 單一叢集轉送:將所有要求傳送至您指定的單一叢集。
- 多叢集路由:
- 任何叢集轉送:將要求傳送至執行個體中最接近的叢集。
- 叢集群組轉送:將所有要求限制在您指定的叢集。
- 資料列親和性轉送:根據要求的資料列鍵,將單一資料列讀取或寫入要求傳送至特定叢集。詳情請參閱資料列相依性轉送。
容錯移轉
如果某個 Bigtable 叢集沒有回應,複製功能可讓連入流量容錯移轉至同一個執行個體中的另一個叢集。容錯移轉可以手動或自動執行,這取決於應用程式所使用的應用程式設定檔,以及應用程式設定檔的設定方式。詳情請參閱「容錯移轉」。
複製功能啟動時刪除資料列範圍
Cloud Bigtable Admin API 可讓您根據資料列索引鍵,從資料表捨棄連續範圍的資料列。在不使用複寫的執行個體中,Bigtable 可以快速且有效率地捨棄資料列範圍。然而,當複製功能啟動時,刪除資料列範圍的速度和效率會變得非常低。