如何使用地理分區(qū)來遵守數(shù)據(jù)法規(guī)并在全球范圍內(nèi)提供低延遲
譯文譯者 | 李睿
審校 | 重樓
在當今互聯(lián)互通的世界中,用戶可以跨越多個大洲和國家使用應用程序。在處理數(shù)據(jù)監(jiān)管要求的同時,在遙遠的地理位置保持低延遲可能是一個挑戰(zhàn)。分布式SQL數(shù)據(jù)庫的地理分區(qū)功能可以通過將用戶數(shù)據(jù)固定到所需的位置來幫助解決這一挑戰(zhàn)。
因此,以下探討如何使用YugabyteDB Managed部署符合數(shù)據(jù)規(guī)則并跨多個區(qū)域提供低延遲的地理分區(qū)數(shù)據(jù)庫集群。
使用YugabyteDB Managed部署地理分區(qū)集群
YugabyteDB是一個基于PostgreSQL的開源分布式SQL數(shù)據(jù)庫。用戶可以使用YugabyteDB Managed (YugabyteDB的DBaaS版本)在幾分鐘內(nèi)部署地理分區(qū)集群。
開始使用地理分區(qū)的YugabyteDB托管集群很容易。只需遵循以下步驟:
1.選擇“多區(qū)域部署”選項。在創(chuàng)建專用YugabyteDB Managed集群時,選擇“多區(qū)域”選項,以確保數(shù)據(jù)分布在多個區(qū)域。
2.將數(shù)據(jù)分布模式設置為“分區(qū)”。選擇“按區(qū)域劃分”數(shù)據(jù)分發(fā)選項,以便用戶可以將數(shù)據(jù)固定到特定的地理位置。
3.選擇目標云區(qū)域。將數(shù)據(jù)庫節(jié)點放置在用戶選擇的云區(qū)域中。在這篇博客文章中,將數(shù)據(jù)分散到兩個區(qū)域——南卡羅來納州(美國東部)和法蘭克福(歐洲西部)。
一旦設置了地理分區(qū)的YugabyteDB Managed集群,就可以連接到它并創(chuàng)建帶有分區(qū)數(shù)據(jù)的表。
創(chuàng)建地理分區(qū)表
為了演示地理分區(qū)如何改善延遲和數(shù)據(jù)法規(guī)的合規(guī)性,以一個帳號表為例。
首先,創(chuàng)建PostgreSQL表空間,讓用戶可以將數(shù)據(jù)固定在USA (usa_tablespace)或Europe (europe_tablespace)的YugabyteDB節(jié)點上。
SQL
CREATE TABLESPACE usa_tablespace WITH (
replica_placement = '{"num_replicas": 3, "placement_blocks":
[
{"cloud":"gcp","region":"us-east1","zone":"us-east1-c","min_num_replicas":1},
{"cloud":"gcp","region":"us-east1","zone":"us-east1-d","min_num_replicas":1},
{"cloud":"gcp","region":"us-east1","zone":"us-east1-b","min_num_replicas":1}
]}'
);
CREATE TABLESPACE europe_tablespace WITH (
replica_placement = '{"num_replicas": 3, "placement_blocks":
[
{"cloud":"gcp","region":"europe-west3","zone":"europe-west3-a","min_num_replicas":1},
{"cloud":"gcp","region":"europe-west3","zone":"europe-west3-b","min_num_replicas":1},
{"cloud":"gcp","region":"europe-west3","zone":"europe-west3-c","min_num_replicas":1}
]}'
);
- num_replicas: 3——每個表空間要求用戶在一個區(qū)域內(nèi)的三個可用性區(qū)域中存儲數(shù)據(jù)副本。這使用戶能夠容忍云中的區(qū)域級中斷。
其次,創(chuàng)建帳號表并按country_code列對其進行分區(qū):
SQL
CREATE TABLE Account (
id integer NOT NULL,
full_name text NOT NULL,
email text NOT NULL,
phone text NOT NULL,
country_code varchar(3)
)
PARTITION BY LIST (country_code);
第三,為美國和歐洲記錄定義分區(qū)表
SQL
CREATE TABLE Account_USA PARTITION
OF Account (id, full_name, email, phone, country_code,
PRIMARY KEY (id, country_code))
FOR VALUES IN ('USA') TABLESPACE usa_tablespace;
CREATE TABLE Account_EU PARTITION
OF Account (id, full_name, email, phone, country_code,
PRIMARY KEY (id, country_code))
FOR VALUES IN ('EU') TABLESPACE europe_tablespace;
- FOR VALUES IN ('USA')——如果country_code等于‘USA',則自動從存儲在usa_tablespace(南卡羅來納州的區(qū)域)中的Account_USA分區(qū)中放置或查詢該記錄。
- FOR VALUES IN ('EU') ——否則,如果記錄屬于歐洲(country_code等于‘EU’),那么它將存儲在europe_tablespace(法蘭克福地區(qū))的Account_EU分區(qū)中。
現(xiàn)在檢查一下用戶從美國連接時的讀寫延遲。
從美國連接時的延遲
打開一個從愛荷華州(us-central1)到位于南卡羅來納州(us-east1)的數(shù)據(jù)庫節(jié)點的客戶端連接,并插入一條新的帳戶記錄:
SQL
INSERT INTO Account (id, full_name, email, phone, country_code)
VALUES (1, 'John Smith', 'john@gmail.com', '650-346-1234', 'USA');
只要country_code為“USA”,記錄就會存儲在來自南卡羅來納州的數(shù)據(jù)庫節(jié)點上。寫入和讀取延遲大約為30毫秒,因為客戶端請求需要在衣阿華州和南卡羅來納州之間傳輸。
接下來,看看當添加和查詢country_code設置為‘EU’的帳戶時會發(fā)生什么:
SQL
INSERT INTO Account (id, full_name, email, phone, country_code)
VALUES (2, 'Emma Schmidt', 'emma@gmail.com', '49-346-23-1234', 'EU');
SELECT * FROM Account WHERE id=2 and country_code='EU';
由于這一帳戶必須存儲在歐洲數(shù)據(jù)中心中,并且必須在美國和歐洲之間傳輸,因此增加了延遲。
- INSERT的延遲(230毫秒)高于SELECT的延遲(130毫秒),因為在INSERT期間,記錄會在法蘭克福的三個可用性區(qū)域中復制。
美國的客戶端連接和歐洲的數(shù)據(jù)庫節(jié)點之間的延遲更高,這意味著地理分區(qū)集群使用戶符合數(shù)據(jù)監(jiān)管要求。即使來自美國的客戶端連接到基于美國的數(shù)據(jù)庫節(jié)點并寫入/讀取來自歐洲居民的記錄,這些記錄也將始終從歐洲的數(shù)據(jù)庫節(jié)點存儲/檢索。
從歐洲連接時的延遲
讓我們看看,如果打開從法蘭克福(europe-west3)到同一區(qū)域的數(shù)據(jù)庫節(jié)點的客戶端連接,并查詢最近從美國添加的歐洲記錄,延遲是如何改善的:
這一次延遲低至3毫秒(從美國查詢同一條記錄時為130毫秒),因為該記錄存儲在歐洲數(shù)據(jù)中心并從歐洲數(shù)據(jù)中心檢索。
只要數(shù)據(jù)不復制到美國,添加和查詢另一個歐洲記錄也可以保持低延遲。
SQL
INSERT INTO Account (id, full_name, email, phone, country_code)
VALUES (3, 'Otto Weber', 'otto@gmail.com', '49-546-33-0034', 'EU');
SELECT * FROM Account WHERE id=3 and country_code='EU';
當訪問存儲在同一區(qū)域的數(shù)據(jù)時,延遲顯著降低。其結果是在遵守數(shù)據(jù)監(jiān)管要求的同時提供了更好的用戶體驗。
結語
地理分區(qū)是一種符合數(shù)據(jù)規(guī)則和實現(xiàn)全局低延遲的有效方法。通過使用YugabyteDB Managed部署地理分區(qū)集群,可以智能地跨區(qū)域分發(fā)數(shù)據(jù),同時保持高性能查詢功能。
原文標題:How To Use Geo-Partitioning to Comply With Data Regulations and Deliver Low Latency Globally,作者:Denis Magda