本頁面說明 Spanner 中的資料複製方式、不同類型的 Spanner 副本,以及這些副本在讀取和寫入作業中的角色,並介紹資料複製的優點。
總覽
Spanner 會自動在位元組層級複製資料。如「Spanner 讀取和寫入作業的生命週期」一文所述,這項功能是建構 Spanner 的基礎檔案系統所提供。Spanner 會將資料庫異動寫入這個檔案系統中的檔案,並在機器或磁碟故障時,負責複製及復原檔案。
雖然 Spanner 建構的基礎分散式檔案系統已提供位元組層級的複製功能,但 Spanner 也會複製資料,以提供資料可用性和地理位置的額外優勢。大致來說,Spanner 中的所有資料都會整理成資料列。Spanner 會建立這些資料列的多個副本 (replica),然後將這些副本儲存在不同的地理區域。Spanner 採用以 Paxos 為基礎的同步複寫機制,其中投票副本會在寫入作業修訂前,對每項寫入要求進行投票。這項全域同步複製屬性可讓您從任何 Spanner 讀寫或唯讀副本讀取最新資料。
Spanner 會為每個資料庫分割建立副本。分割會保留連續資料列的範圍,這些資料列會依主鍵排序。分割中的所有資料都會實際儲存在副本中,且 Spanner 會從獨立的故障區域提供每個副本。詳情請參閱「結構定義總覽」。
系統使用 Paxos 儲存及複製一組分割。在每個 Paxos 副本集中,系統會選出一個副本做為領導者。主要備用資源負責處理寫入作業,讀寫或唯讀備用資源則可執行讀取要求,不需要與主要備用資源通訊。如果要求強讀取,通常會諮詢領導者,確保唯讀副本已收到所有近期突變。如要監控資料變更率,以及從領導者副本複製到執行個體設定中跨區域副本的資料量,請參閱「監控資料複製」。
Spanner 複製功能的優點
Spanner 複製功能的優點包括:
資料可用性:擁有更多的資料複本讓想讀取這些資料的用戶端更能取得資料。此外,即使部分副本無法使用,Spanner 仍可提供寫入服務,因為只要過半數的投票副本即可提交寫入作業。
地理位置:Spanner 可將資料放置在不同區域和洲,因此資料在地理位置上更接近需要存取的使用者和服務,存取速度也更快。
單一資料庫體驗:Spanner 具有同步複製和全球同步一致性,因此可提供單一資料庫體驗。
簡化應用程式開發:Spanner 符合 ACID 標準,並提供全域同步一致,因此使用 Spanner 的開發人員不必在應用程式中新增額外邏輯來處理最終一致,讓應用程式開發和後續維護作業更加快速輕鬆。
備用資源類型
Spanner 有三種副本:讀寫副本、唯讀副本和見證副本。構成基本執行個體設定的區域和複製拓撲是固定的:
- 基礎單一區域 (區域) 執行個體設定只會使用讀寫備用資源。
- 雙區域執行個體基本設定會使用讀寫和見證副本。
- 多區域執行個體的基本設定會結合使用所有三種備用資源類型。
您可以建立自訂執行個體設定,並為區域和多區域執行個體設定新增唯讀副本。
下表彙整 Spanner 副本的類型和屬性:
| 備用資源類型 | 可投票 | 可成為主要備用資源 | 可提供讀取 | 可手動設定副本 |
|---|---|---|---|---|
| 讀寫 | 是 | 是 | 是 | 否 |
| 唯讀 | 否 | 否 | 是 | 是* |
| 見證 | 是 | 否 | 無 | 否 |
* 詳情請參閱如何使用自訂執行個體設定建立執行個體。
讀寫副本
讀寫備用資源支援讀取和寫入。這些備用資源:
- 維護完整資料複本。
- 提供讀取。
- 可投票決定是否要提交寫入作業。
- 參與主要備用資源的選擇。
- 具有成為主要備用資源的資格。
- 是區域執行個體中使用的唯一副本類型。
唯讀副本
唯讀副本僅支援讀取,不支援寫入。這些副本不會投票選出領導者或提交寫入作業,因此您可擴充讀取容量,不必增加寫入作業所需的法定人數。唯讀備用資源:
- 維護資料的完整副本,該副本是從主要讀寫副本複製而來。
- 請勿參與投票來提交寫入作業。因此,唯讀備用資源的位置絕不會增加寫入延遲時間。
- 不符合成為領導者的資格。
- 提供讀取。
- 可非對稱調度資源。詳情請參閱「非對稱唯讀自動調整資源配置」。
- 無法做為獨立的災難復原 (DR) 解決方案。 執行個體可用性取決於投票副本的法定人數。如果 Spanner 執行個體離線,唯讀副本也會在不久後離線,無法提供讀取服務 (包括過時讀取)。
如果是最接近應用程式的副本,唯讀副本通常可以提供過時的讀取內容,不需要往返於領導者區域,前提是過時時間至少為 15 秒。您也可以使用導向讀取,將唯讀交易和單一讀取作業,導向多區域執行個體設定中的特定副本類型或區域。詳情請參閱「定向讀取」。
強讀取可能需要往返於領導者副本。來回行程僅用於協商時間戳記,不會從領導者傳送實際資料。時間戳記協商是領導者 CPU 效率高的作業,而且資料通常已在傳輸途中。這類通訊內容由系統自動處理。
如要進一步瞭解過時和強烈讀取,請參閱「讀取」一節。
選用的唯讀副本
您可以建立自訂區域或多區域執行個體設定,並新增選用的唯讀副本,以擴充讀取作業並支援低延遲的過時讀取作業。新增的唯讀副本必須位於預先定義的基本執行個體設定以外的區域。如需可新增的選用唯讀區域清單,請參閱「區域可用設定」和「多區域可用設定」下的「選用區域」欄。如果沒有看到所選的唯讀副本位置,可以要求新的選用唯讀副本區域。
所有選用的唯讀備用資源都須支付運算能力、儲存空間和複製作業費用。此外,在自訂執行個體設定中新增唯讀副本,不會變更執行個體設定的 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」:
在導覽選單中,選取「Metrics Explorer」。
在「指標」欄位中,按一下「選取指標」下拉式選單。
在「Filter by resource or metric name」(依資源或指標名稱篩選) 欄位中,依序選取「Cloud Spanner Instance」(Cloud Spanner 執行個體) >「Instance」(執行個體) >「Cross region replicated bytes」(跨區域複製的位元組數),然後點選「Apply」(套用)。
如果執行個體有跨區域複製活動,這項指標只會顯示在「Active metrics」(使用中的指標) 下方。否則,該指標會顯示在「未使用的指標」下方。根據預設,使用者介面會篩選並只顯示「有效」指標。清除「啟用」勾選記號,即可查看啟用和停用的指標。
這張圖表顯示指定日期範圍內,所有 Spanner 執行個體中複製資料的變化率 (以每秒位元組數為單位)。
選用:如要顯示複製的資料量 (以位元組為單位),而非變更率,請按照下列步驟操作:
- 在「Aggregation」(匯總) 欄位中,按一下「Sum」(總和) 下拉式選單,然後選取「Configure aligner」(設定校準器)。
- 在「對齊函式」欄位中,按一下「比率」下拉式選單,然後選取「差異」。
選取「表格」或「兩者」做為表格類型,而非「圖表」。
表格會顯示指定日期範圍內複製的資料量 (以位元組為單位)。
選用:如要查看特定執行個體或屬性的用量,請按照下列步驟操作:
- 使用「Filter」(篩選器) 欄位新增篩選條件,例如執行個體 ID、資料庫 ID、來源區域、目的地區域或標記。
- 按一下「新增篩選器」即可新增多個篩選器。
如要查看完整的 Google Cloud 指標清單,請參閱「Google Cloud 指標」一文。
後續步驟
- 進一步瞭解執行個體設定。
- 瞭解如何建立及管理執行個體。
- 瞭解如何建立及管理執行個體設定。
- 進一步瞭解Google Cloud 地理位置與區域。