本頁面說明資料如何在 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 效率作業,而且資料通常已在傳輸中。系統會自動處理這項通訊。
如要進一步瞭解陳舊讀取和強制讀取,請參閱「讀取內容」一節。
選用的唯讀備用資源
您可以建立自訂區域或多區域執行個體設定,並新增選用的唯讀備用資源,以便擴充讀取作業並支援低延遲時間的陳舊讀取作業。新增的唯讀備用資源必須位於不屬於預先定義基礎執行個體設定的地區。如需可新增的選用唯讀區域清單,請參閱「可用的區域設定」和「可用的多地區設定」下方的「選用區域」欄。如果您沒有看到所選的唯讀備用資源位置,可以申請新的選用唯讀備用資源區域。
所有選用的唯讀備用資源都會產生運算能力、儲存空間和複製費用。此外,將唯讀備用資源新增至自訂例項設定,不會變更例項設定的 Spanner SLA。如果您選擇在與主要地區不同的大陸新增唯讀備用資源,建議至少新增兩個唯讀備用資源。這樣一來,如果其中一個唯讀備援資料庫無法使用,讀取延遲時間就不會太長。
最佳做法是先在自訂執行個體設定的非正式環境執行個體中,測試效能工作負載。如要查看區域間延遲時間中位數資料,請參閱區域間延遲時間和吞吐量基準資訊主頁。舉例來說,如果您使用 eur6
多區域基本設定和 us-east1
中的選用唯讀備用資源,建立自訂執行個體設定,由於 europe-west4
中的領導區域的來回時間,us-east1
中用戶端的預期強式讀取延遲約為 100 毫秒。過時讀取如果過時程度足夠,就不會產生來回行程,因此速度會快得多。您也可以使用鎖定洞察和交易洞察,找出導致延遲時間過長的交易。
如需新增選用唯讀備用資源的操作說明,請參閱「建立自訂執行個體設定」。
見證副本
見證備用資源不支援讀取,但可參與確認寫入的投票。見證備用資源能更簡單達到寫入仲裁,與讀寫備用資源不同,不需要儲存空間和運算資源來儲存完整資料複本和提供讀取。見證備用資源:
- 會用於雙區域和多區域執行個體。
- 不會維護完整資料複本。
- 不會提供讀取。
- 會投票確認是否寫入。
- 參與主要備用資源的選擇,但不具有成為主要備用資源的資格。
備用資源在寫入和讀取中的角色
本節說明備用資源在 Spanner 寫入和讀取中的角色,這有助於瞭解 Spanner 為何在雙區域和多區域設定中使用見證備用資源。
在寫入中的角色
用戶端寫入要求一律先在主要備用資源上處理,即使有更靠近用戶端的非主要備用資源,或主要備用資源所在的地理位置距離用戶端很遠也是如此。如果您使用雙區域或多區域執行個體設定,且用戶端應用程式位於非領導區域,Spanner 會使用領導人感知路由,動態地將讀取/寫入交易路由,以便縮短資料庫的延遲時間。詳情請參閱「Leader 感知路由」。
主要備用資源會記錄傳入寫入,再將寫入並行轉送至其他有資格對該寫入進行投票的備用資源。每個有資格的備用資源都會完成其寫入,然後透過投票確認是否寫入,來回應主要備用資源。當大多數投票的備用資源 (也稱為「寫入仲裁」) 同意確認寫入時,就會確認寫入。在背景中,所有其餘 (非見證) 備用資源會記錄這個寫入作業。如果讀寫或唯讀備用資源記錄寫入的進度落後,即可從其他備用資源要求遺失資料,以擁有完整且最新的資料複本。
在讀取中的角色
視讀取要求的並行模式而定,用戶端讀取要求可能會在主要備用資源執行,或需要與主要備用資源進行通訊。
主要備用資源會提供屬於讀寫交易的讀取作業,因為主要備用資源會維護強制執行可序列化所需的鎖定。
視讀取的並行模式而定,單一讀取方法 (交易內容以外的讀取) 和唯讀交易中的讀取可能需要與主要備用資源進行通訊。如要進一步瞭解並行模式,請參閱「讀取類型」。
強式讀取要求可送往任何讀寫或唯讀備用資源。如果要求送往非主要備用資源,該備用資源必須與主要備用資源進行通訊,才能執行讀取作業。
過時讀取要求會送往最接近要求時間戳記、距離最近的可用唯讀備用資源或讀寫備用資源。如果主要備用資源是離發出讀取要求的用戶端最近的備用資源,系統可能就會將要求送往主要備用資源。
監控資料複製
您可以監控變更率,以及從主要備援機制複寫到跨區域備援機制的資料量,以便瞭解實例設定。變化率以每秒位元組為單位,資料量則以位元組為單位。如要這麼做,請使用「跨區域複製的位元組」(instance/cross_region_replicated_bytes_count
) 監控指標。
如要在 Google Cloud 控制台中查看這項指標,請按照下列步驟操作:
在 Google Cloud 控制台中,前往「Monitoring」:
在導覽選單中,選取「Metrics Explorer」。
在「指標」欄位中,按一下「選取指標」下拉式選單。
在「依據資源或指標名稱篩選」欄位中,依序選取「Cloud Spanner 執行個體」>「執行個體」>「跨區域複製的位元組」,然後點選「套用」。
只有在執行個體中發生跨區域複製活動時,這項指標才會顯示在「Active metrics」下方。否則會顯示在「Inactive metrics」下方。根據預設,使用者介面會篩除並只顯示「Active」指標。取消勾選「有效」核取方塊,即可查看有效和無效指標。
這張圖表顯示指定時間範圍內,所有 Spanner 例項中複本資料的變化速率 (以每秒位元組為單位)。
選用步驟:如要顯示複製的資料量 (以位元組為單位) 而非變更率,請按照下列步驟操作:
- 在「Aggregation」欄位中,按一下「Sum」下拉式選單,然後選取「Configure aligner」。
- 在「對齊函數」欄位中,按一下「速率」下拉式選單,然後選取「Delta」。
選取「表格」或「兩者皆是」做為表格類型,而非「圖表」。
表格會顯示在指定時間範圍內複製的資料量 (以位元組為單位)。
選用:如要查看特定例項或屬性的用量,請按照下列步驟操作:
- 使用「Filter」欄位新增篩選器,例如執行個體 ID、資料庫 ID、來源區域、目的地區域或標記。
- 按一下「新增篩選器」即可新增多個篩選器。
如要查看 Google Cloud 指標的完整清單,請參閱「Google Cloud 指標」。
後續步驟
- 進一步瞭解執行個體設定。
- 瞭解如何建立及管理執行個體。
- 瞭解如何建立及管理執行個體設定。
- 進一步瞭解Google Cloud 地理位置與地區。