本頁面說明資料如何在 Spanner 中複製、不同類型的 Spanner 備用資源及其在讀取和寫入作業中的角色,以及複製功能的優點。
總覽
Spanner 會以位元組為單位自動複製資料。如「Spanner 讀取和寫入流程」一文所述,這項功能是建構 Spanner 的基礎檔案系統所提供。Spanner 會將資料庫變異寫入此檔案系統中的檔案,而檔案系統會在機器或磁碟故障時負責處理複製和復原檔案。
即使 Spanner 的基礎分散式檔案系統已提供位元組層級的複製功能,Spanner 也會複製資料,以提供額外的資料可用性和地理本地性優點。整體來說,Spanner 中的所有資料會整理為資料列。Spanner 會建立這些資料列的多個複本,或稱為「備用資源」,然後將這些備用資源儲存在不同的地理區域。Spanner 使用以 Paxos 為基礎的同步複製結構定義,讓投票備用資源在確認寫入前,針對每個寫入要求進行投票。這個全域同步複製的屬性可讓您從任何 Spanner 讀寫備用資源或唯讀備用資源讀取最新資料。
Spanner 會建立每個資料庫分割的備用資源。分割會保留某個範圍的連續資料列,其中資料列會依主鍵排序。分割中的所有資料實際上會一起儲存在備用資源中,而 Spanner 會從獨立的故障區域中提供每個備用資源。詳情請參閱結構定義總覽。
系統使用 Paxos 儲存及複製一組分割。在每個 Paxos 備用資源組合中,會選擇一個備用資源做為主要備用資源。主要備用資源負責處理寫入作業,讀寫或唯讀備用資源則可執行讀取要求,不需要與主要備用資源通訊。如果要求強式讀取,通常會諮詢領導者,確保唯讀備用資源已收到所有近期變動。如要監控從主要副本複製到執行個體設定中跨區域副本的資料變更率和資料量,請參閱「監控資料複製作業」。
Spanner 複製功能的優點
Spanner 複製功能的優點包括:
資料可用性:擁有更多的資料複本讓想讀取這些資料的用戶端更能取得資料。此外,即使某些備用資源無法使用,Spanner 仍可提供寫入,因為只需要大多數的投票備用資源就能確認寫入。
地理本地性:如果能夠透過 Spanner 將資料放置在不同的地區和洲別,就表示資料能夠在地理位置上更靠近需要資料的使用者和服務,因此能更快速地存取資料。
單一資料庫體驗:Spanner 具有同步複製和全球同步一致性,因此可提供單一資料庫體驗。
簡化應用程式開發程序:Spanner 符合 ACID 標準,並提供全球同步一致性,因此開發人員使用 Spanner 時,不需要在應用程式中新增額外的邏輯即可處理最終一致性,讓應用程式開發和後續的維護作業變得更快、更簡單。
備用資源類型
Spanner 有三種備用資源:讀寫備用資源、唯讀備用資源及見證備用資源。構成基本執行個體設定的區域和複製拓撲是固定的:
- 單一區域 (區域) 執行個體基本設定只會使用讀寫備用資源。
- 基本雙區域執行個體設定會使用讀寫和見證備用資源。
- 基本多地區執行個體設定會混用這三種備用資源類型。
您可以建立自訂執行個體設定,並為地區和多地區執行個體設定新增額外的唯讀備用資源。
下表概要說明 Spanner 備用資源的類型及其屬性:
備用資源類型 | 可投票 | 可成為主要備用資源 | 可提供讀取 | 可手動設定副本 |
---|---|---|---|---|
讀寫 | 是 | 是 | 是 | 否 |
唯讀 | 否 | 否 | 是 | 是* |
見證 | 是 | 否 | 無 | 否 |
* 詳情請參閱如何使用自訂執行個體設定建立執行個體。
讀寫副本
讀寫備用資源支援讀取和寫入。這些備用資源:
- 維護完整資料複本。
- 提供讀取。
- 可投票確認是否寫入。
- 參與主要備用資源的選擇。
- 具有成為主要備用資源的資格。
- 是區域執行個體中使用的唯一備用資源類型。
唯讀副本
唯讀備用資源僅支援讀取,不支援寫入。這些備用資源不會投票選出主要備用資源或確認是否要寫入,因此可讓您調度讀取資源,而不需要增加寫入所需的仲裁大小。唯讀備用資源:
- 維護從主要讀寫備用資源複製的完整資料複本。
- 不參與投票確認是否寫入。因此,唯讀備用資源的位置絕不會增加寫入延遲時間。
- 不具有成為主要備用資源的資格。
- 提供讀取。
- 可非對稱調度資源。詳情請參閱「非對稱唯讀自動調度資源模式」。
如果這是離應用程式最近的副本,唯讀副本通常可以提供過時讀取,而不需要往返主要地區,假設過時至少為 15 秒。您也可以使用導向讀取,將唯讀交易和單一讀取作業,導向至多地區執行個體設定中的特定備用資源類型或地區。詳情請參閱「導向讀取」。
強式讀取可能需要往返主要備用資源。往返行程僅用於協商時間戳記,不會從領導者運送實際資料。時間戳記協商是領導者 CPU 效率高的作業,而且資料通常已在傳輸途中。系統會自動處理這項通訊。
如要進一步瞭解過時讀取和強烈讀取,請參閱「讀取」一節。
選用的唯讀副本
您可以建立自訂區域或多區域執行個體設定,並新增選用的唯讀備用資源,以擴充讀取作業及支援低延遲時間的過時讀取作業。新增的唯讀備用資源必須位於不屬於預先定義基本執行個體設定的區域。如需可新增的選用唯讀區域清單,請參閱「Regional available configurations」(地區可用設定)和「Multi-region available configurations」(多區域可用設定)下方的「Optional Region」(選用區域) 欄。 如果沒有看到所選的唯讀副本位置,可以要求新的選用唯讀副本區域。
所有選用的唯讀副本都會產生運算能力、儲存空間和複製費用。此外,在自訂執行個體設定中新增唯讀備用資源,不會變更執行個體設定的 Spanner SLA。
如果您選擇在與主要地區不同的大陸新增唯讀備用資源,建議至少新增兩個唯讀備用資源。萬一其中一個唯讀副本無法使用,這有助於維持低讀取延遲時間。
最佳做法是先在自訂執行個體設定中,於非正式環境執行個體測試效能工作負載,如要查看區域間延遲時間中位數資料,請參閱區域間延遲時間和輸送量基準測試資訊主頁。舉例來說,如果您使用 eur6
多區域基本設定建立自訂執行個體設定,並在 us-east1
中建立選用的唯讀副本,由於往返時間會傳送到 europe-west4
中的領導者區域,因此 us-east1
中用戶端的預期強式讀取延遲時間約為 100 毫秒。過時讀取若過時程度足夠,就不會產生來回行程,因此速度快得多。您也可以使用鎖定洞察和交易洞察找出導致延遲時間過長的交易。
如要瞭解如何新增選用的唯讀備用資源,請參閱「建立自訂執行個體設定」。
見證副本
見證備用資源不支援讀取,但可參與確認寫入的投票。見證備用資源能更簡單達到寫入仲裁,與讀寫備用資源不同,不需要儲存空間和運算資源來儲存完整資料複本和提供讀取。見證備用資源:
- 用於雙區域和多區域執行個體。
- 不會維護完整資料複本。
- 不會提供讀取。
- 會投票確認是否寫入。
- 參與主要備用資源的選擇,但不具有成為主要備用資源的資格。
備用資源在寫入和讀取中的角色
本節說明備用資源在 Spanner 寫入和讀取中的角色,這有助於瞭解 Spanner 為何在雙區域和多區域設定中使用見證備用資源。
在寫入中的角色
用戶端寫入要求一律先在主要備用資源處理,即使有更靠近用戶端的非主要備用資源,或主要備用資源所在的地理位置距離用戶端很遠也是如此。如果您使用雙區域或多區域執行個體設定,且用戶端應用程式位於非領導者區域,Spanner 會使用領導者感知路由,動態將讀寫交易路由傳送至資料庫,以減少延遲。詳情請參閱「Leader-aware routing」。
主要備用資源會記錄傳入寫入,再將寫入並行轉送至其他有資格對該寫入進行投票的備用資源。每個有資格的備用資源都會完成其寫入,然後透過投票確認是否寫入,來回應主要備用資源。當大多數投票的備用資源 (也稱為「寫入仲裁」) 同意確認寫入時,就會確認寫入。在背景中,所有其餘 (非見證) 備用資源會記錄這個寫入作業。如果讀寫或唯讀備用資源記錄寫入的進度落後,即可從其他備用資源要求遺失資料,以擁有完整且最新的資料複本。
在讀取中的角色
視讀取要求的並行模式而定,用戶端讀取要求可能會在主要備用資源執行,或需要與主要備用資源進行通訊。
主要備用資源會提供屬於讀寫交易的讀取作業,因為主要備用資源會維護強制執行可序列化所需的鎖定。
視讀取的並行模式而定,單一讀取方法 (交易內容以外的讀取) 和唯讀交易中的讀取可能需要與主要備用資源進行通訊。如要進一步瞭解並行模式,請參閱「讀取類型」。
強式讀取要求可送往任何讀寫或唯讀備用資源。如果要求送往非主要備用資源,該備用資源必須與主要備用資源進行通訊,才能執行讀取作業。
過時讀取要求會送往最接近要求時間戳記、距離最近的可用唯讀備用資源或讀寫備用資源。如果主要備用資源是離發出讀取要求的用戶端最近的備用資源,系統可能就會將要求送往主要備用資源。
監控資料複製
您可以監控從主要副本到執行個體設定中跨區域副本的資料複製量和變化率。變更率以每秒位元組為單位,資料量則以位元組為單位。如要這麼做,請使用「跨區域複製的位元組」(instance/cross_region_replicated_bytes_count
) 監控指標。
如要在 Google Cloud 控制台中查看這項指標,請按照下列步驟操作:
前往 Google Cloud 控制台的「Monitoring」:
在導覽選單中,選取「指標探索器」。
在「指標」欄位中,按一下「選取指標」下拉式選單。
在「依據資源或指標名稱篩選」欄位中,依序選取「Cloud Spanner 執行個體」>「執行個體」>「跨區域複製的位元組數」,然後點選「套用」。
如果執行個體有跨區域複製活動,這項指標只會顯示在「有效指標」下方。否則會顯示在「未使用的指標」下方。根據預設,使用者介面會篩選並只顯示「有效」指標。清除「有效」勾選記號,即可同時查看有效和無效指標。
圖表顯示指定時間範圍內,所有 Spanner 執行個體中複製資料的變化率 (以每秒位元組數為單位)。
選用:如要顯示複製的資料量 (以位元組為單位),而非變更率,請按照下列步驟操作:
- 在「Aggregation」(匯總) 欄位中,按一下「Sum」(總和) 下拉式選單,然後選取「Configure aligner」(設定對齊器)。
- 在「Alignment function」(對齊函式) 欄位中,按一下「Rate」(比率) 下拉式選單,然後選取「Delta」(差異)。
選取「表格」或「兩者」做為表格類型,而非「圖表」。
這個表格顯示在指定時間範圍內複製的資料量 (以位元組為單位)。
選用:如要查看特定執行個體或屬性的用量,請按照下列步驟操作:
- 使用「篩選器」欄位新增篩選器,例如執行個體 ID、資料庫 ID、來源區域、目的地區域或標記。
- 按一下「新增篩選器」即可新增多個篩選器。
如要查看完整的 Google Cloud 指標清單,請參閱Google Cloud 指標。
後續步驟
- 進一步瞭解執行個體設定。
- 瞭解如何建立及管理執行個體。
- 瞭解如何建立及管理執行個體設定。
- 進一步瞭解Google Cloud 地理位置與區域。