前沿分享|阿里云数据库高级技术专家 宋利兵:阿里云企业级自治数据库RDS详解
本文將從2方面為大家介紹企業(yè)級(jí)的自治的數(shù)據(jù)庫(kù)系統(tǒng)。
- RDS MySQL?產(chǎn)品
- RDS MySQL?自研內(nèi)核
一、RDS MySQL?產(chǎn)品
1)阿里云RDS -?云原生自治數(shù)據(jù)庫(kù)
阿里云RDS是國(guó)內(nèi)起步最早的RDS服務(wù),基于阿里巴巴的MySQL分支AliSQL。在阿里巴巴完成IOE目標(biāo)后,阿里巴巴整個(gè)電商業(yè)務(wù)由RDS支撐。RDS的可靠性和穩(wěn)定性是經(jīng)過(guò)了雙十一這樣極其苛刻的現(xiàn)實(shí)場(chǎng)景的驗(yàn)證的。經(jīng)過(guò)十幾年的發(fā)展,除了在穩(wěn)定性、性能等方面有長(zhǎng)足的發(fā)展之外,阿里云RDS也在堅(jiān)定的向云原生和智能化的方向邁進(jìn),現(xiàn)在RDS整體架構(gòu)基于云原生K8S進(jìn)行部署和管理,底層依托于阿里云的高性能ECS和高吞吐的ESSD分布式云存儲(chǔ),真正做到了計(jì)算和存儲(chǔ)的分離。基于人工智能的技術(shù)和專(zhuān)家的經(jīng)驗(yàn),實(shí)現(xiàn)DAS的?RDS自治能力。
2)RDS MySQL?產(chǎn)品?-?服務(wù)高可用
從產(chǎn)品層面看,高可用是MySQL生態(tài)里經(jīng)典的架構(gòu),通過(guò)binlog進(jìn)行復(fù)制,RDS提供跨可用區(qū)的高可用,可以做到4個(gè)9的可用性和秒級(jí)的切換。
除了經(jīng)典的兩節(jié)點(diǎn)架構(gòu),RDS還基于多數(shù)派協(xié)議提供了三節(jié)點(diǎn)高可架構(gòu)。在三節(jié)點(diǎn)高可用架構(gòu)中,包括主和備兩個(gè)數(shù)據(jù)節(jié)點(diǎn)和一個(gè)日志節(jié)點(diǎn),讓用戶(hù)的數(shù)據(jù)0丟失做到RPO等于0。這個(gè)復(fù)制不是用MySQL原生binlog復(fù)制,而是采用自己實(shí)現(xiàn)的多數(shù)派協(xié)議(Consensuse)進(jìn)行binlog的分發(fā)。
除了熱備、RDS也提供了冷備的能力。RDS可以周期性做全量數(shù)據(jù)備份、以及實(shí)時(shí)binlog的備份,并把數(shù)據(jù)上傳到OSS上。如果有數(shù)據(jù)恢復(fù)需求時(shí),可以快速通過(guò)OSS進(jìn)行數(shù)據(jù)恢復(fù)。
3)RDS MySQL?產(chǎn)品?–?資源池化和云原生
在計(jì)算與存儲(chǔ)分離的架構(gòu)下,RDS實(shí)例可以提供高達(dá)32TiB的存儲(chǔ)量。全量數(shù)據(jù)備份采用的是快照的方式進(jìn)行的,無(wú)論用戶(hù)數(shù)據(jù)有多大,都可以做到秒級(jí)備份,真正做到用戶(hù)無(wú)感。基于秒級(jí)的數(shù)據(jù)快照能力,RDS做到了分鐘級(jí)的實(shí)例創(chuàng)建。創(chuàng)建只讀實(shí)例大概在兩三分鐘就可以完成。
4)RDS MySQL?產(chǎn)品?–?自動(dòng)讀寫(xiě)分離
只讀節(jié)點(diǎn)是MySQL里經(jīng)典的架構(gòu),通過(guò)創(chuàng)建只讀實(shí)例擴(kuò)展讀的能力,阿里云的RDS上提供中間介讓用戶(hù)應(yīng)用不做修改自動(dòng)實(shí)現(xiàn)讀寫(xiě)分離。提供多地址的讀寫(xiě)分離可以把不同的業(yè)務(wù)用不同的地址訪問(wèn),好處是業(yè)務(wù)之間不會(huì)互相影響和地址的隔離性能非常好。
5)RDS MySQL?產(chǎn)品?–?企業(yè)級(jí)數(shù)據(jù)安全
現(xiàn)在安全越來(lái)越被重視,云上有很多用戶(hù)有合規(guī)、審計(jì)等需求,RDS為用戶(hù)提供了全鏈路加密的能力、以及審計(jì)日志等安全能力,除此之外,用戶(hù)還能享受到阿里云網(wǎng)絡(luò)層面和操作系統(tǒng)層面的安全設(shè)施。從整體看,可以做事前、事中、事后非常嚴(yán)格的安全合規(guī)要求。
6)RDS MySQL?產(chǎn)品?-?整體架構(gòu)
RDS不只有MySQL的內(nèi)核還有很多模塊一起為用戶(hù)服務(wù),用戶(hù)只需通過(guò)控制臺(tái)進(jìn)行控制,或者通過(guò)OpenAPI來(lái)創(chuàng)建或者管理實(shí)例就可以了,剩下的工作由RDS自動(dòng)完成。
二、RDS MySQL?自研內(nèi)核
1)實(shí)用性:在線固化SQL執(zhí)行計(jì)劃
在線上使用RDS的時(shí)候會(huì)用戶(hù)會(huì)遇到SQL特別慢的情況,因?yàn)橐恍┰騍QL可能沒(méi)有選擇到最優(yōu)執(zhí)行計(jì)劃,MySQL提供hint的功能,用戶(hù)可以在SQL語(yǔ)句里加hint來(lái)提示MySQL是否要使用索引,或者是否開(kāi)啟某一項(xiàng)優(yōu)化器的策略。通過(guò)Hint來(lái)提高SQL的執(zhí)行效率。 為什么這個(gè)功能用戶(hù)用得很少?因?yàn)楫?dāng)發(fā)現(xiàn)SQL慢的時(shí)候,應(yīng)用已經(jīng)在線運(yùn)行了。這時(shí)修改應(yīng)用里的SQL、可能需要一個(gè)漫長(zhǎng)的過(guò)程、甚至不可能修改。SQL Outline讓用戶(hù)可以在RDS服務(wù)器側(cè)為SQL語(yǔ)句添加Hint。只需要調(diào)用一個(gè)存儲(chǔ)過(guò)程。比如加一個(gè)Index Hint,只需在add_index_outline中指定這個(gè)SQL語(yǔ)句,以及對(duì)應(yīng)的索引策略即可。在做規(guī)則匹配時(shí),Where條件中的值會(huì)自動(dòng)忽略掉,同樣的語(yǔ)句不同的值,都會(huì)匹配到這條規(guī)則。用戶(hù)的應(yīng)用不需要做任何變化,加上規(guī)則后會(huì)立即生效,這是非常實(shí)用的功能 。
2)實(shí)用性:可診斷、可度量
我們加了大量的監(jiān)控和診斷信息,可分為實(shí)例級(jí)別、對(duì)象級(jí)別、語(yǔ)句級(jí)別三大類(lèi)。
實(shí)例級(jí)別的指標(biāo)非常多,把MySQL和系統(tǒng)里的指標(biāo)以秒為單位存儲(chǔ)到表里去,讓用戶(hù)非常方便地通過(guò)MySQL語(yǔ)句查詢(xún)。包括實(shí)例的CPU使用情況、內(nèi)存使用情況、磁盤(pán)IO情況、Server層連接數(shù)量、網(wǎng)絡(luò)訪問(wèn)情況,已經(jīng)InnoDB中的大量狀態(tài)信息。RDS把這些狀態(tài)信息以秒為單位記錄下來(lái),出現(xiàn)問(wèn)題時(shí)很容易通過(guò)狀態(tài)的變化準(zhǔn)確地定位出問(wèn)題。
對(duì)象級(jí)別添加加了對(duì)表使用和Index使用的統(tǒng)計(jì),為我們做數(shù)據(jù)結(jié)構(gòu)的調(diào)整提供了依據(jù)。
語(yǔ)句級(jí)別MySQL有一個(gè)語(yǔ)句級(jí)別的統(tǒng)計(jì)信息表,RDS在這個(gè)表里添加了一些非常實(shí)用的信息。比如:語(yǔ)句使用CPU的時(shí)間,MDL、InnoDB鎖等待的時(shí)間,Mutex的spin、wait的統(tǒng)計(jì)信息,Read/Write IO的統(tǒng)計(jì)信息。這些統(tǒng)計(jì)項(xiàng)幫助用戶(hù)準(zhǔn)快速精準(zhǔn)的定位SQL的問(wèn)題。
3)穩(wěn)定性:Buffer Pool優(yōu)化
云原生下需要能夠做到在線規(guī)格的調(diào)整,Buffer Pool就是很重要的資源。當(dāng)規(guī)格、內(nèi)存變化的時(shí)候Buffer Pool也需要跟著變化,MySQL提供在線調(diào)整Buffer Pool大小的能力。在測(cè)試中,我們發(fā)現(xiàn)MySQL Buffer Pool Resize會(huì)對(duì)業(yè)務(wù)流量造成一定的影響。業(yè)務(wù)流量抖動(dòng)的頻率和幅度都很大(綠色線條)。阿里云RDS在Buffer Pool Resize上做了優(yōu)化,優(yōu)化后、Buffer Pool Resize對(duì)業(yè)務(wù)流量的影響就好了很多(藍(lán)色線條).
4)穩(wěn)定性:并發(fā)控制
線上經(jīng)常碰到某些SQL語(yǔ)句會(huì)使用大量的CPU資源或者內(nèi)存資源。如果不做限制,可能會(huì)耗光CPU、內(nèi)存資源,導(dǎo)致整個(gè)實(shí)例不穩(wěn)定。并發(fā)控制這個(gè)功能可以用來(lái)限制特定SQL的并發(fā)數(shù)量。并發(fā)控制的策略可以分為三個(gè)維度:操作類(lèi)型、操作對(duì)象、關(guān)鍵字。操作類(lèi)型指的是SELECT、INSERT、UPDATE、DELETE四種類(lèi)型。操作對(duì)象指的是庫(kù)、表。并發(fā)控制和SQL Outline差不多,都是在RDS服務(wù)側(cè)配置的。
5)安全性:透明數(shù)據(jù)加密
透明加密支持AES加密算法和國(guó)秘算法SM4。因?yàn)橛行﹩挝挥泻弦?guī)要求,必須使用國(guó)密算法。
6)安全性:回收站
回收站是表級(jí)的數(shù)據(jù)快速找回的工具。當(dāng)用戶(hù)刪除表或者Truncate表的時(shí)候,表不是直接從磁盤(pán)上刪除,而是放到回收站里。用戶(hù)可以設(shè)置多長(zhǎng)時(shí)間后自動(dòng)在后臺(tái)把表真正刪除,當(dāng)發(fā)生了誤操作,錯(cuò)誤的刪除或者清空了表時(shí),能快速?gòu)幕厥照局姓一乇怼?/p>
7)安全性:Flashback Query
Flashback Query提供了快速找回?cái)?shù)據(jù)行的能力。行級(jí)數(shù)據(jù)找回的功能利用了Undo里面的歷史數(shù)據(jù)。RDS可以以秒為單位,為歷史數(shù)據(jù)建立快照。RDS提供了基于時(shí)間的快照查詢(xún)機(jī)制,通過(guò)Undo的記錄回溯到指定時(shí)間的歷史數(shù)據(jù)。當(dāng)發(fā)生了誤操作、或者有回檔需求時(shí),用戶(hù)可以通過(guò)SELECT查詢(xún)到指定時(shí)間點(diǎn)的歷史數(shù)據(jù)。
8)高性能?– Binlog In Redo
MySQL在事務(wù)提交時(shí)要持久化Redo和Binlog文件,為了保證Crash Safe兩個(gè)文件必須順序進(jìn)行持久化對(duì)性能影響很大。RDS會(huì)把Binlog同時(shí)寫(xiě)到Redo里面去,因此事務(wù)提交時(shí),只要持久化Redo文件。Binlog文件只需要在后臺(tái)異步持久化就可以了。這個(gè)功能在保證數(shù)據(jù)一致性的同時(shí),對(duì)寫(xiě)性能有顯著的提升。
上圖是這個(gè)功能的性能測(cè)試結(jié)果,有30%-40%性能峰值的提升,在小并發(fā)的情況下甚至能超過(guò)百分之百的性能提升。
9)高性能?– DDL優(yōu)化
當(dāng)做非Instant DDL操作的時(shí)候,往往會(huì)處理DDL表的大量的Page。MySQL通過(guò)掃描Buffer Pool的LRU鏈表來(lái)完成這個(gè)操作。LRU包含了Buffer Pool中所有的數(shù)據(jù)頁(yè),特別是對(duì)大規(guī)格的實(shí)例,掃描一遍L(zhǎng)RU的時(shí)間很長(zhǎng),還會(huì)影響其他SQL語(yǔ)句的執(zhí)行。RDS做了優(yōu)化后,DDL可以直接命中它的Page,不在需要掃描LRU。既能提高性能又能保持實(shí)例的穩(wěn)定性。上圖性能測(cè)試,是在有業(yè)務(wù)流量的情況下做一次Export Table。Export Table的執(zhí)行時(shí)間從原來(lái)的80秒降低到了0.34秒。
上圖是對(duì)Optimize Table的測(cè)試,在有業(yè)務(wù)流量的同時(shí)做Optimize Table,這個(gè)表有600MB數(shù)據(jù),DDL的優(yōu)化將OPTIMIZE TABLE的性能提升了十幾倍,由原來(lái)的220秒降低到了17秒時(shí)間。
10)高性能?– Faster Query Cache
我們基于MySQL的Query Cache做了重構(gòu),對(duì)并發(fā)控制、內(nèi)存管理、緩存機(jī)制都做了大量的修改,在命中率較高的情況下性能得到提升,在命中率較低的情況下對(duì)性能沒(méi)什么影響,缺省的就能打開(kāi)這個(gè)功能。
11)RDS MySQL自研內(nèi)核:?企業(yè)級(jí)三節(jié)點(diǎn)
基于自研的多數(shù)派協(xié)議來(lái)傳輸Binlog。Leader負(fù)責(zé)把Binlog傳輸?shù)饺罩竟?jié)點(diǎn)或者Follower節(jié)點(diǎn)后,到達(dá)多數(shù)派后在Leader節(jié)點(diǎn)上做事務(wù)提交,三節(jié)點(diǎn)自己選主形成自治的系統(tǒng),在整個(gè)的過(guò)程中沒(méi)有數(shù)據(jù)丟失做到RTO為0。
原文鏈接:https://developer.aliyun.com/article/804399?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶(hù)自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開(kāi)發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開(kāi)發(fā)者社區(qū)用戶(hù)服務(wù)協(xié)議》和《阿里云開(kāi)發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫(xiě)侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的前沿分享|阿里云数据库高级技术专家 宋利兵:阿里云企业级自治数据库RDS详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021云上架构与运维峰会将于12月4日
- 下一篇: 前沿分享|阿里云数据库解决方案资深专家