筆記: Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases

看到今年的 SIGMOD17 上 Amazon 有一篇關(guān)于 Amazon Aurora 的 paper, 趕緊在周末的時候讀了一下, 說不定哪天就 Aurora 就作為存儲選型的一個 option 了, 要準(zhǔn)備一下. 寫點兒筆記

0x00 準(zhǔn)備知識

這篇 paper 主要是關(guān)于 Aurora 如何將 MySQL 的 redo log 獨(dú)立設(shè)計成一個存儲服務(wù), 從而提高了 Aurora 的吞吐的. 那么 MySQL 的 redo log 到底是什么?

redo log 就是 MySQL 的 WAL log, 是為了確保事務(wù)的持久性的. 每次事務(wù)提交前都需要確保 redo log 被持久化. 當(dāng)數(shù)據(jù)庫 crash 時, 會使用 redo log 進(jìn)行 point-in-time recovery

需要注意的是: MySQL 中還有一個 binlog. redo log 和 binlog 不是一回事:

  • binlog 是針對 MySQL 所有的引擎, 主要用來主從復(fù)制, 有 ROWSTATEMENT 兩種格式
  • redo log 僅僅存在于 InnoDB 引擎, 用于記錄每個頁的改動情況.

從數(shù)據(jù)庫架構(gòu)上來說, 僅僅是將下圖中的 Log Manager 中的一部分功能剝離出 MySQL, 做成一個高可用的服務(wù), 其他部分不變.

Architecture of a Database System

0x01 為何要剝離 redo log

在存儲和計算分離的大趨勢下, 大家都是玩兒集群, 因此系統(tǒng)的瓶頸從之前的磁盤, 到現(xiàn)在變成了網(wǎng)絡(luò) IO. 如圖常規(guī)情況下的 MySQL 集群網(wǎng)絡(luò) IO, 在 AWS 中一個常規(guī)使用 EBS 的主從 MySQL 集群, 網(wǎng)絡(luò) IO 是這樣的:

常規(guī)情況下的 MySQL 集群網(wǎng)絡(luò) IO

獨(dú)立出 redo log 服務(wù)后的 Aurora 集群, 網(wǎng)絡(luò) IO 是這樣的:


Aurora 集群中的網(wǎng)絡(luò) IO

也就是說 Aurora 僅僅需要把一個 Quorum 中的日志寫成功就可以. 這種架構(gòu)也有一個缺點: 放大了 replication 的 IO. 之前寫 binlog 到 replica, 現(xiàn)在要寫 redo log.

這么做的好處有3點:

  1. 將存儲服務(wù)做成一個跨數(shù)據(jù)中心的服務(wù), 提高數(shù)據(jù)庫容災(zāi), 降低性能影響
  2. 大幅度將低網(wǎng)絡(luò) IO, 為其他優(yōu)化騰出了空間
  3. 之前備份等操作都很 expensive, 現(xiàn)在在單獨(dú)的存儲服務(wù)上, 都不是事兒

文中給了一個網(wǎng)絡(luò) IO 對比的數(shù)據(jù):

Table 1: Network IOs for Aurora vs MySQL

Configuration Transactions IOs/Transaction
Mirrored MySQL 780,000 7.4
Aurora with Replicas 27,378,000 0.95

0x02 durability at scale: 規(guī)睦缯郑化的 durability

如何確保數(shù)據(jù)的 durablity? 多寫幾份唄. 基于 Quorum 機(jī)制, 常規(guī)來說僅僅需要滿足如下公式:

  • Vr + Vw > V
  • Vw > V/2

而且一般情況下, 大家都是選擇 V=3, Vr = 2, Vw=2 (也就是說數(shù)據(jù)存儲3份: 寫入2份成功才算成功, 讀取2份成功才算成功).

但 Aurora 認(rèn)為使用3個AZ(AZ 就是 AWS 的機(jī)房的概念)每個 AZ 一份數(shù)據(jù)的情況不靠譜, 因此選擇3個 AZ 存儲 6 分?jǐn)?shù)據(jù): 每個 AZ 2份:

  • V = 6
  • Vw = 4
  • Vr = 3

這樣能夠保證一個機(jī)房故障, 并且剩余兩個機(jī)房有一個節(jié)點故障的情況下可用.

為了提高 MTTR(Mean Time To Repair) 時間, 還把存儲每10 GB 作為 Protection Group, 自我修復(fù), 提高修復(fù)時間.

0x03 存儲服務(wù)設(shè)計

說到存儲服務(wù)的設(shè)計, 核心的原則就是 latency 一定要低. 把能異步做的事情都異步都后臺做, 數(shù)據(jù)一旦落地立即返回. 如圖:

  • LOG 請求進(jìn)來, 落地就從 2 返回, 盡最大可能降低 latency
  • 4 是通過 Gossip 協(xié)議, 與其他 peer 通信, 修復(fù)數(shù)據(jù)
IO Traffic in Aurora Storage Node

0x04 Aurora 性能

我也沒有實際用過 Aurora, 貼一張 paper 中的數(shù)據(jù)吧


Aurora 性能

0x05 疑問

關(guān)于 binlog

看完 Aurora 的設(shè)計, 有一點疑惑的是, 主從復(fù)制使用了 redo log, 那么原生的 binlog 在 Aurora 中是否還存在? 找了一下文檔, 發(fā)現(xiàn) binlog 還是在的, 參見 Replication Between Aurora and MySQL or Between Aurora and Another Aurora DB Cluster

關(guān)于 MySQL 新 feature

另外一個疑惑就是關(guān)于 MySQL 新版本的 feature. 如果 MySQL 社區(qū)版本推出了一個新的 feature, Aurora 何時能夠跟進(jìn)并提供相應(yīng)的功能(比如 JSON 字段類型)? 其實 Aurora 到底是基于哪個版本的 MySQL 的 source code 構(gòu)建的, 我們也不得而知.

0x06 總結(jié)

存儲計算分離, 連 OLTP 的數(shù)據(jù)庫都在按照這個思路拆. Aurora 不僅僅止步于 MySQL, 去年的 re:Invent 2016 上發(fā)布了 Aurora 兼容 PostgreSQL 的版本. 至于 Aurora 怎么評價, 可以摘一句 Percona co-founder 的一句:

In general I think Amazon Aurora is a quite advanced proprietary version of MySQL. It is not revolutionary, however, and indeed not “reimagined relational databases” as Amazon presents it. This technology does not address a problem with scaling writes, sharding and does not handle cross-nodes transactions.

-- by Vadim Tkachenko

我個人倒是覺得, 反正我也不去寫數(shù)據(jù)庫(我也不會寫), 是否 re-invent 數(shù)據(jù)庫我不管, 能夠讓我不用分庫分表, 價格還讓我老板滿意我就開心.

Reference

-- EOF --

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末构灸,一起剝皮案震驚了整個濱河市妥箕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌面殖,老刑警劉巖嚣伐,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赂毯,死亡現(xiàn)場離奇詭異战虏,居然都是意外死亡拣宰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門烦感,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巡社,“玉大人,你說我怎么就攤上這事手趣∩胃茫” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵绿渣,是天一觀的道長朝群。 經(jīng)常有香客問我,道長中符,這世上最難降的妖魔是什么姜胖? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮淀散,結(jié)果婚禮上右莱,老公的妹妹穿的比我還像新娘。我一直安慰自己档插,他們只是感情好慢蜓,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著郭膛,像睡著了一般晨抡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饲鄙,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天凄诞,我揣著相機(jī)與錄音,去河邊找鬼忍级。 笑死帆谍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轴咱。 我是一名探鬼主播汛蝙,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朴肺!你這毒婦竟也來了窖剑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤戈稿,失蹤者是張志新(化名)和其女友劉穎西土,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞍盗,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡需了,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年跳昼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肋乍。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡鹅颊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出墓造,到底是詐尸還是另有隱情堪伍,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布觅闽,位于F島的核電站帝雇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛉拙。R本人自食惡果不足惜摊求,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刘离。 院中可真熱鬧室叉,春花似錦、人聲如沸硫惕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恼除。三九已至踪旷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間豁辉,已是汗流浹背令野。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留徽级,地道東北人气破。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像餐抢,于是被迫代替她去往敵國和親现使。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容