NDCS 中的全域作用中表格
Oracle NoSQL Database Cloud Service 支援全域作用中表格架構,您可以在其中建立表格、在多個區域複寫表格,以及維護跨區域複本的同步資料。
現今的企業需要為客戶提供更快更好的服務。網路延遲是評估任何應用程式效能的重要參數。網路延遲是資料封包在網路上行進的最短時間。使用者希望能夠從任何地方順暢且快速地完成線上活動。為了達到這樣的期望,企業需要在最靠近使用者的分散式區域代管應用程式和資料。
Oracle NoSQL Database Cloud Service 透過全域作用中表格提供這些需求的解決方案。此功能可讓區域中寫入的應用程式資料以通透的方式跨多個區域複製。
- 在本機讀取和寫入資料,並在全域存取您的資料:多個區域中「全域作用中」表格的主動 - 主動組態可確保在一個區域中對表格執行的更新,會自動複製到其他複製區域中的表格複本。您可以從任何複製的區域存取資料。
- 效能:「全域作用中」表格可讓您在本機讀取和寫入資料,提供單一位數毫秒的延遲,這是您全球分散式應用程式的本機存取特性。這可提升大規模調整全域應用程式的效能,並減少應用程式要求的延遲。
- 輕鬆設定及管理:Oracle NoSQL Database Cloud Service 可消除使用全域作用中表格部署及管理多區域複寫的複雜性。新增區域表格複本相當簡單,可以使用 API、Terraform 或 OCI 主控台進行。
- 多重區域復原能力:全域作用中表格也會在區域失敗的罕見案例中啟用容錯能力。如果單一區域變成無法使用或離線,則可將應用程式要求重新導向至複製表格的區域,並可針對此表格執行讀取和寫入。
如何選擇 NDCS 中的全域作用中設定?
「全域作用中」表格功能可讓以區域寫入的應用程式資料,以通透的方式跨多個區域複製。
單一區域故障的罕見事件不應影響使用者的體驗。例如,如果單一區域變成離線、隔離或降級,您的應用程式應重新導向至其他區域,並繼續如之前般執行讀取和寫入。簡而言之,即使區域失敗,您的資料庫也必須提供災害復原。您可以使用 Oracle NoSQL Database Cloud Service (NDCS) 中的「全域作用中」表格,透過作用中組態提供災害復原,或主動跨多個區域複製資料,以使用本機資料存取達到低延遲的目的。
考慮到來自熱門網站的旅行使用者需求。他們可以在同一天從世界各地存取相同的購物網站。無論使用者身在何處,都必須確保使用者體驗最低延遲和無縫互動。
NDCS 中的「全域作用中」表格功能提供上述兩種情況的解決方案。讓我們探索這兩種情況,並瞭解「全域作用中」表格如何成為提供高可用性、低延遲及災害復原的最佳解決方案。
在第一個案例中,假設貴公司在鳳凰城 (美國 - 西部)、法蘭克福 (德國) 和東京 (日本) 使用 NDCS,而且您有一個名為 ShoppingCart 的表格,用來儲存全球不同地區購物的客戶購物資訊。在此範例中,您的公司正透過與客戶地理位置最接近的資料中心提供服務。此類設定涉及多個提供 Oracle NoSQL Database Cloud Service 的地理位置。每個區域都提供具有兩個或多個地理分散式區域和 NoSQL Database Cloud 服務的架構,稱為全域作用中表格架構。ShoppingCart 表格是「全域作用中」表格,並且複寫在多個區域中。
在主動 - 主動組態中,您有多個區域可用的 NDCS,且所有區域的資料都會同步化。當區域失敗時,其他複本區域中的「全域作用中」表格會繼續如常運作,不會受到失敗區域的影響。當失敗的區域返回時,其區域表格複本將會與其他區域同步。「全域作用中」表格提供災害復原,當區域停止運作時,您的應用程式會連線至另一個複本。
在第二個案例中,假設鳳凰城的使用者、線上商店,以及新增行動電話至其購物車。西岸 NDCS 區域會服務此階段作業,使用者會從區域的本機資料存放區獲得最低讀取和寫入要求延遲。這位使用者隨後搭機前往德國,在 13 小時後便前往酒店、連接 Wi-Fi 網路、前往行動公司的線上商店,並發現還有另一種電話模式,看起來更吸引人。因此,使用者決定以這個新的電話模式更新購物車,並繼續瀏覽行動電子商務商店。法蘭克福 (Frankfurt) 的區域資料存放區是最繁榮的資料存放區,為使用者提供與美國相同低延遲讀取和寫入體驗。使用者隨後前往日本,決定造訪當地行動商店以取得最新行動模型的詳細資訊。然後,使用者會以行動商店上的最新電話模型來更新購物車。由於 NoSQL Database Cloud Service 位於鳳凰城 (德國) 和日本第三個區域,因此每當使用者更新購物車或瀏覽行動電子商務商店、個人化搜尋結果和其他資料時,都會有多個區域表格複本。這種本機處理可提供最低延遲、最佳效能,並消除廣域網路存取。
基本概念
「全域作用中」表格中使用的術語:
- 區域:Oracle Cloud Infrastructure (OCI) 區域。它是單一的本地化地理區域,客戶可以在此部署應用程式。
- 寄件者區域:將表格更新複製到其他區域的區域。
- 接收者區域:從其他區域接收表格更新的區域。
- 單一表格:非區域性複製的表格。
- 區域表格複本:在其他區域中建立的表格複本。
- 全域作用中表格:包含一或多個區域表格複本的表格。
建立及管理「全域作用中」表格的基本規則:
- 單一表格至少必須要有一個 JSON 資料欄。
- 表格的綱要狀態必須是 FROZEN 。
- 在接收者區域中,不能有相同名稱的表格存在。
- 在接收者區域中,區間 (與傳送者區域中的區間名稱相同) 必須已經存在。
- 刪除表格之前,必須先移除表格的所有區域表格複本。
附註:
在 NDCS 中,區域表格複寫會在背景以非同步方式執行。您可以在「全域作用中表格」上建立子項表格。「全域作用中」表格的子項表格可以是單一表格或「全域作用中表格」。若要讓子項表格成為「全域作用中」表格,您必須凍結子項表格的綱要並新增區域複本。您可以從父項表格的其中一個區域複本進行挑選。
全域有效表格工作流程
「全域作用中」表格中有複寫的項目?
- 表格定義 / 綱要
- 表格中的索引 - 次要索引的數目和定義。
- 表格中的資料。
- 讀取容量與寫入容量 - 區域複本的讀取限制預設與「全域作用中表格」任何其他區域複本的讀取限制相同。不過,讀取作業純為本機作業,因此您可以選擇性地設定每個區域自己的讀取限制。依照預設,區域複本的寫入限制與 Global Active 表格中任何其他區域複本的寫入限制相同。不過,寫入限制可設為每個區域中的不同值。
- 儲存容量 - 由於「全域作用中」表格的所有區域複本都儲存相同的表格資料,因此區域複本的儲存限制會複製到「全域作用中」表格的所有其他區域複本。
- 表格的預設表格存留時間 (TTL)
新增區域表格複本
附註:
新增區域表格複本時,接收者區域中的表格會放置在與傳送者區域中表格相同的表格名稱相同的區間中。Over the life of the Global Active table, you can move it to another compartment at any time.區域表格複本的容量 (讀取單位、寫入單位及儲存)
當您新增表格的區域複本時,讀取容量、寫入容量以及儲存容量欄位會自動預設為寄件者區域中表格的對應值。不過,您可以在接收端區域中編輯及變更表格的讀取容量和寫入容量值。無法變更表格的儲存容量。接收者區域中的表格儲存容量與寄件者區域中的表格相同。「全域作用中」表格的容量模式可視需要或佈建。建立 Global Active 表格後,您還可以變更任何區域複本的容量模式。容量模式的變更是該區域複本的本機變更,不會影響「全域作用中」表格的任何其他區域複本。
區域表格複本中記錄的 TTL
表格存留時間 ( TTL) 是以允許資料在表格中存留的時間量 (時數或天數) 來表示。Oracle NoSQL Database Cloud Service 可讓開發人員在表格資料列上設定到期時間,之後資料列就會自動到期且無法再使用。在指定的期間之後,列會自動到期且不再可用。區域表格複本中的 TTL 與寄件者區域中表格的 TTL 值相同。將資料列複製到其他區域時,其到期時間會以絕對時間戳記複製。因此不論複製此資料列的時間為何,此資料列都會同時到期。
區域表格複本建立之後,就會使用寄件者區域表格的資料起始區域表格複本。在表格資料初始化期間,如果達到 TTL 值,這些資料列就會過期,而讀取作業將不會看到這些記錄。
建立區域表格複本後的 DDL 作業範圍:
- 新增索引
- Drop Index - 刪除索引
- 表格的儲存容量變更
- 表格 TTL 變更
- 讀取單位變更
- 寫入單位變更
- 將容量模式從隨選變更為已佈建 (反之亦然)
全域作用中表格的資料模型設計考量
為何必須凍結表格的綱要?
在「全域作用中」表格組態中,您將 NDCS 中的表格部署在多個區域,而所有區域也會同時提供讀取和寫入要求。連線至 NDCS 的應用程式應設計成連線至最近的複製區域。表格的主索引鍵、分區索引鍵和資料在複寫區域之間必須相同,因為這三個是應用程式使用表格和查詢執行方式的本質部分。在「全域作用中」表格中,因為表格記錄可以同時寫入多個區域的表格,所以必須達到表格綱要的一致性。您可以防止綱要變更,強制所有區域立即一致表格的綱要。為了簡化、效能及可預測性,Oracle NoSQL Cloud Service 需要針對任何參與區域複寫的表格凍結綱要。因此,在將單一表格轉換成「全域作用中」表格之前,必須先凍結表格綱要,而且不允許進一步變更綱要。如果在建立區域複本之後需要變更「全域作用中」表格的綱要,您必須先刪除所有區域複本、更改表格的綱要,然後重新新增區域複本。Oracle NoSQL 雲端服務會以寄件者區域的最新資料重新填入所有區域複本。
凍結表格的綱要時,為何至少需要一個 JSON 資料欄?
協調區域表格複本中的綱要更改相當困難,導致可能的錯誤情況。提供 JSON 資料欄可在綱要中提供更大的彈性,並防止綱要更改的需求。
在全域作用中表格定義識別
-
區域表格複本中的記錄識別在所有表格的區域複本中必須是唯一的。一般索引鍵 (識別表格中每筆記錄的全域唯一 ID) 只有在能夠保證所有區域表格複本的唯一性時,才能在「全域作用中」表格中作為識別。
- 在「全域作用中」表格中使用系統產生的識別時,應使用 UUID 。在大多數情況下,不應使用識別資料欄,因為在區域表格複本中不保證是唯一的。
原則和使用者權限
表格的 IAM 原則專屬於寄件者區域。
當使用者新增單一表格或「全域作用中」表格的複本時,接收者區域中不會新增任何原則或使用者權限。來源區域中想要建立及管理複本的使用者也必須具備接收者區域中必要的權限。否則,使用者新增區域表格複本時會發生錯誤。
建立區域表格複本之後,將任何資料修改從寄件者區域複製到接收者區域並不需要任何使用者權限。這表示無論使用者權限為何,都會在所有其他表格複本中複製一個複本表格中的資料變更。下面列出建立及管理區域表格複本所需的權限。
新增複本:
要管理表格複本的使用者,必須在寄件者區域和所有現有的接收者區域中擁有 NOSQL_TABLE_ALTER 權限。想要建立新複本的使用者必須在接收端區域中具備 NOSQL_TABLE_CREATE 權限 (必須建立複本的位置)。建立區域表格複本時,不會在接收端區域中建立傳送端區域中表格的現有讀取和寫入權限。想要在接收者區域中建立新複本的使用者,必須負責為他們建立的每個區域表格複本建立表格讀取和寫入權限。
刪除複本:
要管理表格複本的使用者必須在寄件者區域和所有現有的接收者區域中具備 NOSQL_TABLE_ALTER 權限。想要刪除複本的使用者必須在接收端區域中具備 NOSQL_TABLE_DROP 權限 (必須刪除複本的位置)。
建立索引:
要在區域表格複本中建立索引的使用者必須具備 NOSQL_INDEX_CREATE 權限。
Drop Index - 刪除索引:
要在區域表格複本中刪除索引的使用者必須具備 NOSQL_INDEX_DROP 權限。
更新表格限制 /TTL/:
想要管理表格複本的使用者,必須具備所有區域表格複本中的 NOSQL_TABLE_ALTER 權限。
讀取、寫入以及 ACID 交易
建立「全域作用中」表格之後,您可以使用現有的資料存取 API 或 DML 敘述句,對表格執行讀取或寫入作業。
為了得到最佳的延遲,您的應用程式通常會從本機區域複本讀取。本機區域複本中的資料也將包括從其他區域表格複本複製的資料更新。每當您在「全域作用中」表格執行寫入作業 (INSERT、UPDATE 或 DELETE) 時,變更都會以非同步方式複寫到多個區域。也就是說,當您在寄件者區域中寫入資料列時,會在寄件者區域中完全執行寫入作業,而無須等待複本區域更新。若多個區域以相同主索引鍵更新一列,則會套用規則以決定哪一個區域的更新被視為最終更新。在所有這類情況下,此內建衝突解決規則都會導致更新時戳得標並確認資料庫。同時從多個區域更新 TTL 值時,也會套用此規則。
ACID 異動是區域的本端。交易確認時,在發生寫入的區域中,僅保證其為單元、一致、隔離以及持久性。區域表格複本的一致性模型語意與非複製表格的語意相同。區域表格複本的一致性不是絕對複本。絕對一致性是您執行讀取作業之單一區域的本機區域。將資料從寄件者區域複製到接收者區域的讀取一律一致。
寄件者區域的寫入會在一段時間內跨所有接收者區域複製。此時跨多個區域複寫變更的延遲時間包括從寄件者區域的區域表格複本接收資料所花費的時間,以及在接收者區域完成寫入作業所花費的時間。最後,接收者區域會從傳送者區域取得更新,接收者區域永遠不會遺漏傳送者區域中發生的交易更新。所有區域表格複本最終都會收到寫入資料,並且變得更持久。
複本延遲簡介
每當您在「全域作用中」表格執行寫入作業 (INSERT、UPDATE 或 DELETE) 時,變更都會以非同步方式複寫到多個區域。
也就是說,當您在寄件者區域中寫入資料列時,會在寄件者區域中完全執行寫入作業,而無須等待複本區域更新。網路延遲會在將變更複製到接收端區域時建立時間延遲。跨多個區域複製變更的延遲包括從複本接收寫入並將其套用至接收者區域所花費的時間。如果在寄件者區域沒有應用程式寫入表格,服務會使用偵測機制來計算延遲的近似值,而且接收者區域中仍可使用延遲統計資料。
如需「複本延遲」測量結果的詳細資訊,請參閱複本延遲的詳細資訊。
建立「全域作用中」表格簡介
建立「全域作用中」表格的處理作業從建立單一表格開始,然後將它轉換成「全域作用中」表格。
- 建立單一表格,並確定一個資料欄是 JSON。
- 將表格的綱要狀態從可變變更為已凍結。
- 決定您要新增表格區域複本的區域。新增區域複本時,讀取容量、寫入容量以及儲存容量欄位會自動填入寄件者區域的對應值。您可以變更表格的讀取容量和寫入容量。
- 雲端服務會在接收者區域中建立表格。如果來源區域中的表格有資料,就會開始將資料從寄件者區域複製到接收者區域。當資料從傳送者區域複製到接收者區域時,初始化百分比會從 0 增加到 100。您可以在 OCI 主控台的表格資訊底下檢視初始化百分比的值,如下所示。在初始化程序完成之前,新區域表格複本中不允許執行 DML 作業。