如何使用地理分區(qū)來(lái)遵守?cái)?shù)據(jù)法規(guī)并在全球范圍內(nèi)提供低延遲
譯文譯者 | 李睿
審校 | 重樓
在當(dāng)今互聯(lián)互通的世界中,用戶可以跨越多個(gè)大洲和國(guó)家使用應(yīng)用程序。在處理數(shù)據(jù)監(jiān)管要求的同時(shí),在遙遠(yuǎn)的地理位置保持低延遲可能是一個(gè)挑戰(zhàn)。分布式SQL數(shù)據(jù)庫(kù)的地理分區(qū)功能可以通過(guò)將用戶數(shù)據(jù)固定到所需的位置來(lái)幫助解決這一挑戰(zhàn)。
因此,以下探討如何使用YugabyteDB Managed部署符合數(shù)據(jù)規(guī)則并跨多個(gè)區(qū)域提供低延遲的地理分區(qū)數(shù)據(jù)庫(kù)集群。
使用YugabyteDB Managed部署地理分區(qū)集群
YugabyteDB是一個(gè)基于PostgreSQL的開源分布式SQL數(shù)據(jù)庫(kù)。用戶可以使用YugabyteDB Managed (YugabyteDB的DBaaS版本)在幾分鐘內(nèi)部署地理分區(qū)集群。
開始使用地理分區(qū)的YugabyteDB托管集群很容易。只需遵循以下步驟:
1.選擇“多區(qū)域部署”選項(xiàng)。在創(chuàng)建專用YugabyteDB Managed集群時(shí),選擇“多區(qū)域”選項(xiàng),以確保數(shù)據(jù)分布在多個(gè)區(qū)域。
2.將數(shù)據(jù)分布模式設(shè)置為“分區(qū)”。選擇“按區(qū)域劃分”數(shù)據(jù)分發(fā)選項(xiàng),以便用戶可以將數(shù)據(jù)固定到特定的地理位置。
3.選擇目標(biāo)云區(qū)域。將數(shù)據(jù)庫(kù)節(jié)點(diǎn)放置在用戶選擇的云區(qū)域中。在這篇博客文章中,將數(shù)據(jù)分散到兩個(gè)區(qū)域——南卡羅來(lái)納州(美國(guó)東部)和法蘭克福(歐洲西部)。
一旦設(shè)置了地理分區(qū)的YugabyteDB Managed集群,就可以連接到它并創(chuàng)建帶有分區(qū)數(shù)據(jù)的表。
創(chuàng)建地理分區(qū)表
為了演示地理分區(qū)如何改善延遲和數(shù)據(jù)法規(guī)的合規(guī)性,以一個(gè)帳號(hào)表為例。
首先,創(chuàng)建PostgreSQL表空間,讓用戶可以將數(shù)據(jù)固定在USA (usa_tablespace)或Europe (europe_tablespace)的YugabyteDB節(jié)點(diǎn)上。
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——每個(gè)表空間要求用戶在一個(gè)區(qū)域內(nèi)的三個(gè)可用性區(qū)域中存儲(chǔ)數(shù)據(jù)副本。這使用戶能夠容忍云中的區(qū)域級(jí)中斷。
其次,創(chuàng)建帳號(hào)表并按country_code列對(duì)其進(jìn)行分區(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);
第三,為美國(guó)和歐洲記錄定義分區(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',則自動(dòng)從存儲(chǔ)在usa_tablespace(南卡羅來(lái)納州的區(qū)域)中的Account_USA分區(qū)中放置或查詢?cè)撚涗洝?/span>
- FOR VALUES IN ('EU') ——否則,如果記錄屬于歐洲(country_code等于‘EU’),那么它將存儲(chǔ)在europe_tablespace(法蘭克福地區(qū))的Account_EU分區(qū)中。
現(xiàn)在檢查一下用戶從美國(guó)連接時(shí)的讀寫延遲。
從美國(guó)連接時(shí)的延遲
打開一個(gè)從愛荷華州(us-central1)到位于南卡羅來(lái)納州(us-east1)的數(shù)據(jù)庫(kù)節(jié)點(diǎn)的客戶端連接,并插入一條新的帳戶記錄:
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”,記錄就會(huì)存儲(chǔ)在來(lái)自南卡羅來(lái)納州的數(shù)據(jù)庫(kù)節(jié)點(diǎn)上。寫入和讀取延遲大約為30毫秒,因?yàn)榭蛻舳苏?qǐng)求需要在衣阿華州和南卡羅來(lái)納州之間傳輸。
接下來(lái),看看當(dāng)添加和查詢country_code設(shè)置為‘EU’的帳戶時(shí)會(huì)發(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';
由于這一帳戶必須存儲(chǔ)在歐洲數(shù)據(jù)中心中,并且必須在美國(guó)和歐洲之間傳輸,因此增加了延遲。
- INSERT的延遲(230毫秒)高于SELECT的延遲(130毫秒),因?yàn)樵贗NSERT期間,記錄會(huì)在法蘭克福的三個(gè)可用性區(qū)域中復(fù)制。
美國(guó)的客戶端連接和歐洲的數(shù)據(jù)庫(kù)節(jié)點(diǎn)之間的延遲更高,這意味著地理分區(qū)集群使用戶符合數(shù)據(jù)監(jiān)管要求。即使來(lái)自美國(guó)的客戶端連接到基于美國(guó)的數(shù)據(jù)庫(kù)節(jié)點(diǎn)并寫入/讀取來(lái)自歐洲居民的記錄,這些記錄也將始終從歐洲的數(shù)據(jù)庫(kù)節(jié)點(diǎn)存儲(chǔ)/檢索。
從歐洲連接時(shí)的延遲
讓我們看看,如果打開從法蘭克福(europe-west3)到同一區(qū)域的數(shù)據(jù)庫(kù)節(jié)點(diǎn)的客戶端連接,并查詢最近從美國(guó)添加的歐洲記錄,延遲是如何改善的:
這一次延遲低至3毫秒(從美國(guó)查詢同一條記錄時(shí)為130毫秒),因?yàn)樵撚涗洿鎯?chǔ)在歐洲數(shù)據(jù)中心并從歐洲數(shù)據(jù)中心檢索。
只要數(shù)據(jù)不復(fù)制到美國(guó),添加和查詢另一個(gè)歐洲記錄也可以保持低延遲。
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';
當(dāng)訪問(wèn)存儲(chǔ)在同一區(qū)域的數(shù)據(jù)時(shí),延遲顯著降低。其結(jié)果是在遵守?cái)?shù)據(jù)監(jiān)管要求的同時(shí)提供了更好的用戶體驗(yàn)。
結(jié)語(yǔ)
地理分區(qū)是一種符合數(shù)據(jù)規(guī)則和實(shí)現(xiàn)全局低延遲的有效方法。通過(guò)使用YugabyteDB Managed部署地理分區(qū)集群,可以智能地跨區(qū)域分發(fā)數(shù)據(jù),同時(shí)保持高性能查詢功能。
原文標(biāo)題:How To Use Geo-Partitioning to Comply With Data Regulations and Deliver Low Latency Globally,作者:Denis Magda