複製

本頁面說明資料如何在 Cloud Spanner 中複製、不同類型的 Cloud Spanner 備用資源及其在讀取和寫入作業中的角色,以及複製功能的優點。

Cloud Spanner 中的複製功能概覽

Cloud Spanner 會以位元組為單位,從基礎分散式檔案系統中自動取得複製的資料 (如 Cloud Spanner 讀取和寫入流程所述)。Cloud Spanner 會將資料庫變異寫入此檔案系統中的檔案,而檔案系統會在機器或磁碟故障時負責處理複製和復原檔案。

即使 Cloud Spanner 的基礎分散式檔案系統已提供位元組層級的複製功能,Cloud Spanner 也會複製資料,以提供額外的資料可用性和地理本地性優點。整體來說,Cloud Spanner 中的所有資料會整理為資料列。Cloud Spanner 會建立這些資料列的多個複本,或稱為「備用資源」,然後將這些備用資源儲存在不同的地理區域。Cloud Spanner 使用以 Paxos 為基礎的同步複製結構定義,讓投票備用資源 (詳情請參閱下方說明) 在確認寫入前,針對每個寫入要求進行投票。這個全域同步複製的屬性可讓您從任何 Cloud Spanner 讀寫備用資源或唯讀備用資源讀取最新資料。

Cloud Spanner 會建立每個資料庫分割的備用資源,以將上述概念連結至結構定義與資料模型一文中介紹的術語和概念。分割是頂層資料表中的一組連續資料列,其中資料列會依主鍵排序。分割中的所有資料實際上會一起儲存在備用資源中,而 Cloud Spanner 會從獨立的故障區域中提供每個備用資源。

系統使用 Paxos 儲存及複製一組分割。在每個 Paxos 備用資源組合中,會選擇一個備用資源做為主要備用資源。主要備用資源負責處理寫入作業,而任何讀寫備用資源或唯讀備用資源可提供讀取要求,不需要與主要備用資源通訊 (雖然如果要求強式讀取,通常將會查詢主要備用資源,以確保唯讀備用資源已收到最近所有的變異)。如要進一步瞭解主要備用資源和非主要備用資源在讀取和寫入作業中的角色,請參閱下方的討論。

Cloud Spanner 複製功能的優點

如上所述,Cloud Spanner 複製功能的優點包括:

  • 資料可用性:擁有更多的資料複本讓想讀取這些資料的用戶端更能取得資料。此外,即使某些備用資源無法使用,Cloud Spanner 仍可提供寫入,因為只需要大多數的投票備用資源就能確認寫入。

  • 地理本地性:如果能夠透過 Cloud Spanner 將資料放置在不同的地區和洲別,就表示資料能夠在地理位置上更靠近需要資料的使用者和服務,因此能更快速地存取資料。

  • 單一資料庫體驗:由於同步複製和全球同步一致性,任何規模的 Cloud Spanner 都會以相同的方式運作,提供單一資料庫體驗。

  • 簡化應用程式開發程序:Cloud Spanner 的 ACID 交易搭配全球同步一致性,表示開發人員不需要在應用程式中新增額外的邏輯即可處理最終一致性,讓應用程式開發和後續的維護作業變得更快、更簡單。

備用資源類型

Cloud Spanner 有三種備用資源:讀寫備用資源唯讀備用資源見證備用資源。單一地區備用資源只會使用讀寫備用資源,而多地區執行個體設定會使用這三種類型的組合。(如要詳細瞭解原因,請參閱為什麼使用唯讀和見證備用資源?)

下表概要說明 Cloud Spanner 備用資源的類型及其屬性。下列各節將詳細說明各種類型。

備用資源類型 可投票 可成為主要備用資源 可提供讀取
讀寫
唯讀
見證

讀寫

讀寫備用資源支援讀取和寫入。這些備用資源:

  • 維護完整資料複本。
  • 提供讀取。
  • 可投票確認是否寫入。
  • 參與主要備用資源的選擇。
  • 具有成為主要備用資源的資格。
  • 是單一地區執行個體中使用的唯一類型。

唯讀

唯讀備用資源僅支援讀取 (不支援寫入)。這些備用資源不會投票選出主要備用資源或確認是否要寫入,因此可讓您調度讀取資源,而不需要增加寫入所需的仲裁大小。唯讀備用資源:

  • 只會用於多地區執行個體。
  • 維護從讀寫備用資源複製的完整資料複本。
  • 提供讀取。
  • 不參與投票確認是否寫入。因此,唯讀備用資源的位置絕不會增加寫入延遲時間。
  • 通常可提供過時讀取,而不需要往返預設的主要地區,假設過時至少為 15 秒。強式讀取可能需要往返主要備用資源;系統會自動處理這項通訊。(如要進一步瞭解過時和強式讀取,請參閱下方說明。)
  • 不具有成為主要備用資源的資格。

見證

見證備用資源不支援讀取,但可參與確認寫入的投票。見證備用資源能更簡單達到寫入仲裁,與讀寫備用資源不同,不需要儲存空間和運算資源來儲存完整資料複本和提供讀取。見證備用資源:

  • 只會用於多地區執行個體。
  • 不會維護完整資料複本。
  • 不會提供讀取。
  • 會投票確認是否寫入。
  • 參與主要備用資源的選擇,但不具有成為主要備用資源的資格。

備用資源在寫入和讀取中的角色

本節說明備用資源在 Cloud Spanner 寫入和讀取中的角色,這有助於瞭解 Cloud Spanner 為何在多地區設定中使用唯讀和見證備用資源。

在寫入中的角色

用戶端寫入要求一律先送往主要備用資源,即使有更靠近用戶端的非主要備用資源,或主要備用資源所在的地理位置距離用戶端很遠也是如此。

主要備用資源會記錄傳入寫入,再將寫入並行轉送至其他有資格對該寫入進行投票的備用資源。每個有資格的備用資源都會完成其寫入,然後透過投票確認是否寫入,來回應主要備用資源。當大多數投票的備用資源 (也稱為「寫入仲裁」) 同意確認寫入時,就會確認寫入。在背景中,所有其餘 (非見證) 備用資源會記錄這個寫入作業。如果讀寫或唯讀備用資源記錄寫入的進度落後,即可從其他備用資源要求遺失資料,以擁有完整且最新的資料複本。

在讀取中的角色

視讀取要求的並行模式而定,用戶端讀取要求可能會在主要備用資源執行,或需要與主要備用資源進行通訊。

  • 主要備用資源會提供屬於讀寫交易的讀取作業,因為主要備用資源會維護強制執行可序列化所需的鎖定。

  • 視讀取的並行模式而定,單一讀取方法 (交易內容以外的讀取) 和唯讀交易中的讀取可能需要與主要備用資源進行通訊。如要進一步瞭解這些並行模式,請參閱讀取類型

    • 強式讀取要求可送往任何讀寫或唯讀備用資源。如果要求送往非主要備用資源,該備用資源必須與主要備用資源進行通訊,才能執行讀取作業。

    • 過時讀取要求會送往最接近要求時間戳記、距離最近的可用唯讀備用資源或讀寫備用資源。如果主要備用資源是離發出讀取要求的用戶端最近的備用資源,系統可能就會將要求送往主要備用資源。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Spanner 說明文件