如今越來(lái)越多的企業(yè)借助云計(jì)算
在全球范圍內(nèi)提供服務(wù)
過(guò)去我們需要借助非常復(fù)雜的技術(shù)手段
花費(fèi)大量的成本、甚至犧牲一定的可用性
才能實(shí)現(xiàn)快速、穩(wěn)定、安全的
跨區(qū)域的數(shù)據(jù)復(fù)制
而如今,Amazon Aurora Global Database
能夠允許用戶輕松實(shí)現(xiàn)跨區(qū)域的數(shù)據(jù)庫(kù)部署
讓用戶輕松在區(qū)域之間
復(fù)制數(shù)據(jù)和解決更新沖突
專注于應(yīng)用程序的業(yè)務(wù)邏輯
接下來(lái)就跟著小編一起揭開它的神秘面紗吧~
Amazon Web Services(AWS)于2018年正式推出Amazon Aurora全球數(shù)據(jù)庫(kù)。Amazon Aurora全球數(shù)據(jù)庫(kù)主要支持兩類主要用例,其一為災(zāi)難恢復(fù)類解決方案,旨在以更優(yōu)的恢復(fù)點(diǎn)目標(biāo)(RPO)與恢復(fù)時(shí)間目標(biāo)(RTO)處理區(qū)域整體故障,同時(shí)最大程度降低受保護(hù)數(shù)據(jù)庫(kù)集群遭受的性能影響。使用Amazon Aurora全球數(shù)據(jù)庫(kù),我們通??梢詫?shí)現(xiàn)5秒以內(nèi)的RPO與1分鐘以內(nèi)的RTO。即使寫入工作負(fù)載巨大,新的災(zāi)難恢復(fù)方案對(duì)源集群及目標(biāo)集群的性能影響也將被控制在可忽略不計(jì)的水平。
為了能讓大家更生動(dòng)清晰地認(rèn)識(shí)了解
AWS全球數(shù)據(jù)庫(kù)的知識(shí)與魅力
今天小編特意請(qǐng)來(lái)AWS大咖
為你講解更多關(guān)于AWS全球同庫(kù)的信息
Amazon Aurora全球數(shù)據(jù)庫(kù)的第二大主要用例,是在最多5個(gè)遠(yuǎn)程區(qū)域中建立Amazon Aurora集群的讀取副本,用以服務(wù)這些區(qū)域周邊的鄰近用戶。與直接接入地理跨度更大的主區(qū)域相比,訪問(wèn)位置更接近的本地附近區(qū)域?qū)橛脩魩?lái)更低的讀取延遲。
下圖所示,為在兩個(gè)區(qū)域之間使用MySQL邏輯復(fù)制的示例。隨著查詢數(shù)量的逐步增加,我們?cè)谀繕?biāo)集群上觀察到的復(fù)制時(shí)間延遲也開始呈指數(shù)級(jí)增長(zhǎng)。此外,測(cè)試配置中能夠處理的查詢數(shù)量峰值約為每秒35000次。
相比之下,下圖所示為使用Amazon Aurora全球數(shù)據(jù)庫(kù)時(shí),相同工作負(fù)載與實(shí)例大小情況下的對(duì)應(yīng)性能表現(xiàn)。其中復(fù)制時(shí)間延遲始終保持在1秒以內(nèi),每秒查詢峰值約為20萬(wàn)次(5.7倍)。
讀取副本寫入轉(zhuǎn)發(fā)
除了為各區(qū)域周邊的用戶提供更低的讀取延遲之外,運(yùn)行在遠(yuǎn)程區(qū)域當(dāng)中的應(yīng)用程序可能還需要執(zhí)行數(shù)據(jù)庫(kù)寫入。為此,應(yīng)用程序需要執(zhí)行以下操作步驟:
建立從各遠(yuǎn)程區(qū)域指向主區(qū)域的連接。
在應(yīng)用程序代碼中將讀取與寫入流量拆分開來(lái),保證將讀取數(shù)據(jù)發(fā)送至周邊區(qū)域的本地集群,并將寫入數(shù)據(jù)發(fā)送至主區(qū)域。
管理寫入與后續(xù)讀取操作之間的一致性,因?yàn)锳mazon Aurora全球數(shù)據(jù)庫(kù)將以異步方式進(jìn)行復(fù)制,所以雖然延遲較低、但仍然存在數(shù)據(jù)復(fù)制滯后情況。如果未能正確加以管理,則此前應(yīng)用程序?qū)χ鲄^(qū)域執(zhí)行的寫入操作,不一定會(huì)正確體現(xiàn)在后續(xù)指向本地集群的讀取結(jié)果當(dāng)中。
借助Amazon Aurora全球數(shù)據(jù)庫(kù)提供的讀取副本寫入轉(zhuǎn)發(fā)新功能,我們可以更輕松地立足遠(yuǎn)程區(qū)域執(zhí)行寫入操作。通過(guò)寫入轉(zhuǎn)發(fā),應(yīng)用程序先將寫入操作發(fā)送至本地讀取集群,再由該集群隨后以透明方式把寫入轉(zhuǎn)發(fā)至主區(qū)域。如此一來(lái),應(yīng)用程序即可將寫入操作發(fā)送至任意Aurora全球數(shù)據(jù)庫(kù)遠(yuǎn)程集群,從而簡(jiǎn)化應(yīng)用程序的開發(fā)考量。下面來(lái)看寫入轉(zhuǎn)發(fā)機(jī)制的幾項(xiàng)主要優(yōu)點(diǎn):
托管解決方案–將遠(yuǎn)程集群上發(fā)出的寫入操作,以透明方式轉(zhuǎn)發(fā)至主集群。
無(wú)復(fù)制沖突–由于所有寫入均作用于主集群,因此不會(huì)發(fā)生與復(fù)制相關(guān)的更新沖突。
簡(jiǎn)單–您可以向遠(yuǎn)程集群發(fā)出寫入操作,而后執(zhí)行讀取操作,這些操作將體現(xiàn)此前完成的寫入結(jié)果。
靈活–您可以在多種讀取一致性級(jí)別中做出選擇,借此在一致性與性能之間取得平衡。
為了簡(jiǎn)化應(yīng)用程序開發(fā)并面向遠(yuǎn)程Amazon Aurora全球數(shù)據(jù)庫(kù)集群執(zhí)行寫入,寫入轉(zhuǎn)發(fā)機(jī)制為用戶提供以下功能:
使用Amazon的骨干網(wǎng)絡(luò)及安全連接連通自動(dòng)托管的遠(yuǎn)程集群與主集群。
我們可以對(duì)遠(yuǎn)程集群中的同一實(shí)例執(zhí)行讀取與寫入操作,而無(wú)需額外拆分讀取與寫入流量,或者管理單獨(dú)的連接、會(huì)話或事務(wù)。
提供多種一致性模式,幫助用戶在一致性與性能之間尋求平衡點(diǎn)。
Amazon Aurora全球數(shù)據(jù)庫(kù)寫入轉(zhuǎn)發(fā)功能的基本原理,在于接收來(lái)自遠(yuǎn)程集群中某一實(shí)例上應(yīng)用程序的寫入語(yǔ)句,而后將該語(yǔ)句與必要的上下文一同轉(zhuǎn)發(fā)至主集群,在該主實(shí)例上執(zhí)行寫入語(yǔ)句。該語(yǔ)句的任何執(zhí)行結(jié)果(包括警告與錯(cuò)誤)都將返回至遠(yuǎn)程實(shí)例,并最終返回至應(yīng)用程序。整個(gè)過(guò)程對(duì)應(yīng)用程序而言完全透明,我們只需要在集群上啟用寫入轉(zhuǎn)發(fā)功能,并為需要執(zhí)行寫入操作的各個(gè)會(huì)話設(shè)置一致性模式即可。
要使用寫入轉(zhuǎn)發(fā)功能,大家還需要注意以下幾點(diǎn):
1.您需要設(shè)置aurora_replica_read_consistency選項(xiàng),在會(huì)話當(dāng)中啟用寫入轉(zhuǎn)發(fā)功能。
2.全面支持INSERT,UPDATE以及DELETE等操作,但不支持根據(jù)臨時(shí)表結(jié)果修改永久表的操作。
3.可使用鎖定讀取(SELECT…FOR UPDATE,SELECT…LOCK IN SHARE MODE)。
4.支持使用PREPARE與EXECUTE語(yǔ)法的預(yù)處理語(yǔ)句。
5.不支持存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程必須在主集群上執(zhí)行。
6.不支持DDL語(yǔ)句,DDL語(yǔ)句必須在主集群上執(zhí)行。
一致性模式
當(dāng)應(yīng)用程序面向遠(yuǎn)程集群執(zhí)行寫入語(yǔ)句時(shí),該語(yǔ)句的結(jié)果將在主集群上執(zhí)行,結(jié)果立即返回至應(yīng)用程序。換言之,無(wú)論我們使用哪一種一致性模式,事務(wù)本身的持久性都將不受影響。但是,當(dāng)主集群發(fā)生變更之后,相關(guān)結(jié)果需要一段時(shí)間才能被復(fù)制回遠(yuǎn)程集群以實(shí)現(xiàn)遠(yuǎn)程讀取。根據(jù)應(yīng)用程序中的具體事務(wù)類型,我們可能需要/不需要保證寫入后讀取一致性。
具體來(lái)看,我們可能希望首先等待復(fù)制完成,以確保最新讀取能夠體現(xiàn)上一項(xiàng)寫入操作帶來(lái)的變化;也可能希望保證較高的系統(tǒng)性能并繼續(xù)執(zhí)行下一條語(yǔ)句,而不必等待集群間復(fù)制完成。為了滿足這些具體要求,Amazon Aurora全球數(shù)據(jù)庫(kù)在寫入轉(zhuǎn)發(fā)當(dāng)中提供多種可配置的一致性模式選項(xiàng)。
一致性模式的配置作用于會(huì)話層級(jí),并由aurora_replica_read_consistency參數(shù)負(fù)責(zé)控制。在默認(rèn)情況下,此參數(shù)將被設(shè)置為空值;大家需要將此選項(xiàng)設(shè)置為session,global或者eventual,而后才能使用寫入轉(zhuǎn)發(fā)功能。
會(huì)話一致性
在將aurora_replica_read_consistency設(shè)置為session之后,我們可以確保位于同一會(huì)話中的讀取操作首先等待上一項(xiàng)寫入操作,待復(fù)制完成后才實(shí)際執(zhí)行讀取。如此即可確保該會(huì)話中體現(xiàn)出寫入變更,但不保證能夠體現(xiàn)其他會(huì)話發(fā)出的變更。
全局一致性
在將aurora_replica_read_consistency設(shè)置為global之后,我們可以確保讀取查詢將始終等待復(fù)制變更被追平在讀取操作開始時(shí)間點(diǎn)。這意味著遠(yuǎn)程集群上執(zhí)行的讀取操作將能夠體現(xiàn)主集群上發(fā)生的所有變更。盡管這種模式能夠帶來(lái)最強(qiáng)大的寫入后讀取一致性,但同時(shí)也會(huì)給系統(tǒng)性能造成巨大影響。在使用此模式時(shí),查詢的等待時(shí)間將至少等同于復(fù)制操作的滯后時(shí)間。
最終一致性
在將aurora_replica_read_consistency設(shè)置為eventual之后,讀取查詢將不再受到復(fù)制滯后的影響。由于遠(yuǎn)程副本無(wú)需等待復(fù)制完成,讀取操作的延遲水平將大大降低,需要權(quán)衡的是,不確保寫之后緊接著讀操作能馬上看到之前寫操作的修改。需要注意的是,寫入操作仍然有效;在后續(xù)查詢當(dāng)中,主集群將在正常應(yīng)用寫入變更后將確認(rèn)結(jié)果返回至遠(yuǎn)程集群。需要注意的是,寫入操作的響應(yīng)將即時(shí)完成,只是讀取操作的數(shù)據(jù)變更結(jié)果可能無(wú)法及時(shí)被復(fù)制至遠(yuǎn)程集群。
在Aurora全球數(shù)據(jù)庫(kù)中設(shè)置寫入轉(zhuǎn)發(fā)
假定存在一個(gè)預(yù)配置集群,要在Aurora全球數(shù)據(jù)庫(kù)上啟用寫入轉(zhuǎn)發(fā)功能,我們首先需要?jiǎng)?chuàng)建一個(gè)全局集群。具體操作步驟如下:
在Amazon RDS控制臺(tái)中,選擇Database。
選擇您的源集群。
在Actions下拉菜單中,選擇Add region。
在Add an AWS Region頁(yè)面中的Global database identifier位置,為您的全局?jǐn)?shù)據(jù)庫(kù)輸入一項(xiàng)名稱,例如globalcluste。此名稱即代表同時(shí)包含寫入與讀取區(qū)域的全球集群。
在Secondary Region部分,選擇您的目標(biāo)區(qū)域。本文示例選擇EU(Ireland)區(qū)域。
在當(dāng)前頁(yè)面中的其余設(shè)置部分,使用同樣的設(shè)置創(chuàng)建一個(gè)Aurora DB集群,但請(qǐng)注意考慮以下幾項(xiàng)設(shè)置區(qū)別:
1.在Read replica write forwarding部分,選擇Enable read replica write forwarding。
在全局集群創(chuàng)建完成之后,控制臺(tái)上的視圖應(yīng)如以下截屏所示。
到這里,寫入與讀取集群都已經(jīng)在線啟動(dòng),并隨時(shí)準(zhǔn)備接收流量。
在不同區(qū)域間寫入
要在讀取區(qū)域中執(zhí)行寫入操作,我們需要完成以下操作步驟:
接入寫入?yún)^(qū)域內(nèi)的集群,使用以下代碼創(chuàng)建一個(gè)新schema:
mysql>create schema globaldb;
Query OK,1 row affected(0.00 sec)
寫入轉(zhuǎn)發(fā)將只轉(zhuǎn)發(fā)DML命令,意味著我們只能在寫入?yún)^(qū)域中使用CREATE TABLE等DDL命令。詳見以下操作代碼:
Database changed
mysql> CREATE TABLE `test_table` (
-> `row_id` int(11) NOT NULL AUTO_INCREMENT,
-> `column01` varchar(45) DEFAULT NULL,
-> PRIMARY KEY (`row_id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.02 sec)
在使用新表創(chuàng)建了新的schema之后,向?qū)懭雲(yún)^(qū)域內(nèi)的該表插入一行,而后選定對(duì)應(yīng)結(jié)果。具體請(qǐng)參見以下代碼:
mysql> INSERT INTO `globaldb`.`test_table`
-> (`column01`)
-> VALUES
-> ('writer region column 01');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM `globaldb`.`test_table`;
+--------+-------------------------+
| row_id | column01 |
+--------+-------------------------+
| 1 | writer region column 01 |
+--------+-------------------------+
1 row in set (0.00 sec)
現(xiàn)在,我們的寫入?yún)^(qū)域中已經(jīng)包含一個(gè)schema、一個(gè)表以及一個(gè)行。
接入讀取區(qū)域以確認(rèn)該區(qū)域內(nèi)的所有條目是否正常存在。詳見以下操作代碼:
mysql> use globaldb;
Database changed
mysql> SELECT * FROM `globaldb`.`test_table`;
+--------+-------------------------+
| row_id | column01 |
+--------+-------------------------+
| 1 | writer region column 01 |
+--------+-------------------------+
1 row in set (0.07 sec)
設(shè)置讀取一致性模式,插入一行,檢查當(dāng)前表內(nèi)容。詳見以下操作代碼:
mysql> set @@aurora_replica_read_consistency = 'session';
Query OK, 0 rows affected (0.07 sec)
mysql> INSERT INTO `globaldb`.`test_table`
-> (`column01`)
-> VALUES
-> ('reader region column 01');
Query OK, 1 row affected (0.15 sec)
mysql> SELECT * FROM `globaldb`.`test_table`;
+--------+-------------------------+
| row_id | column01 |
+--------+-------------------------+
| 1 | writer region column 01 |
| 2 | reader region column 01 |
+--------+-------------------------+
2 rows in set (0.08 sec)
在執(zhí)行任何受支持語(yǔ)句之前,我們必須首先在會(huì)話層級(jí)設(shè)置@@aurora_replica_read_consistency模式。如果未設(shè)置這項(xiàng)參數(shù),則會(huì)引發(fā)以下異常:
mysql> INSERT INTO `globaldb`.`test_table`
-> (`column01`)
-> VALUES
-> ('reader region column 01');
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement
Amazon Aurora全球數(shù)據(jù)庫(kù)允許用戶創(chuàng)建全局分布式應(yīng)用程序,保證為遠(yuǎn)程區(qū)域內(nèi)的本地讀取操作提供支持。以此為基礎(chǔ),您可以在災(zāi)難恢復(fù)解決方案中實(shí)現(xiàn)極優(yōu)的RPO與RTO水平,也可以向世界各地的用戶提供延遲更低的讀取響應(yīng)。通過(guò)寫入轉(zhuǎn)發(fā)功能,我們現(xiàn)在還能夠讓全局應(yīng)用程序以更少的代碼變更在遠(yuǎn)程區(qū)域內(nèi)輕松執(zhí)行寫入操作。
歡迎大家即刻體驗(yàn)Amazon Aurora全球數(shù)據(jù)庫(kù)與寫入轉(zhuǎn)發(fā)帶來(lái)的精彩體驗(yàn)!
在眾多組織都在利用Redis為全球用戶提供低延遲訪問(wèn)的背景下,為更好滿足客戶的需求,現(xiàn)已上線能夠在不同AWS區(qū)域之間復(fù)制Amazon ElastiCache集群的數(shù)據(jù)管理Amazon ElastiCache Global Datastore for Redis。