天天看點

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

本文将從2方面為大家介紹企業級的自治的資料庫系統。

  • RDS MySQL 産品
  • RDS MySQL 自研核心
前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

一、RDS MySQL 産品

1)阿裡雲RDS - 雲原生自治資料庫

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

阿裡雲RDS是國内起步最早的RDS服務,基于阿裡巴巴的MySQL分支AliSQL。在阿裡巴巴完成IOE目标後,阿裡巴巴整個電商業務由RDS支撐。RDS的可靠性和穩定性是經過了雙十一這樣極其苛刻的現實場景的驗證的。經過十幾年的發展,除了在穩定性、性能等方面有長足的發展之外,阿裡雲RDS也在堅定的向雲原生和智能化的方向邁進,現在RDS整體架構基于雲原生K8S進行部署和管理,底層依托于阿裡雲的高性能ECS和高吞吐的ESSD分布式雲存儲,真正做到了計算和存儲的分離。基于人工智能的技術和專家的經驗,實作DAS的 RDS自治能力。

2)RDS MySQL 産品 - 服務高可用

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

從産品層面看,高可用是MySQL生态裡經典的架構,通過binlog進行複制,RDS提供跨可用區的高可用,可以做到4個9的可用性和秒級的切換。

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

除了經典的兩節點架構,RDS還基于多數派協定提供了三節點高可架構。在三節點高可用架構中,包括主和備兩個資料節點和一個日志節點,讓使用者的資料0丢失做到RPO等于0。這個複制不是用MySQL原生binlog複制,而是采用自己實作的多數派協定(Consensuse)進行binlog的分發。

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

除了熱備、RDS也提供了冷備的能力。RDS可以周期性做全量資料備份、以及實時binlog的備份,并把資料上傳到OSS上。如果有資料恢複需求時,可以快速通過OSS進行資料恢複。

3)RDS MySQL 産品 – 資源池化和雲原生

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

在計算與存儲分離的架構下,RDS執行個體可以提供高達32TiB的存儲量。全量資料備份采用的是快照的方式進行的,無論使用者資料有多大,都可以做到秒級備份,真正做到使用者無感。基于秒級的資料快照能力,RDS做到了分鐘級的執行個體建立。建立隻讀執行個體大概在兩三分鐘就可以完成。

4)RDS MySQL 産品 – 自動讀寫分離

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

隻讀節點是MySQL裡經典的架構,通過建立隻讀執行個體擴充讀的能力,阿裡雲的RDS上提供中間介讓使用者應用不做修改自動實作讀寫分離。提供多位址的讀寫分離可以把不同的業務用不同的位址通路,好處是業務之間不會互相影響和位址的隔離性能非常好。

5)RDS MySQL 産品 – 企業級資料安全

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

現在安全越來越被重視,雲上有很多使用者有合規、審計等需求,RDS為使用者提供了全鍊路加密的能力、以及審計日志等安全能力,除此之外,使用者還能享受到阿裡雲網絡層面和作業系統層面的安全設施。從整體看,可以做事前、事中、事後非常嚴格的安全合規要求。

6)RDS MySQL 産品 - 整體架構

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

RDS不隻有MySQL的核心還有很多子產品一起為使用者服務,使用者隻需通過控制台進行控制,或者通過OpenAPI來建立或者管理執行個體就可以了,剩下的工作由RDS自動完成。

二、RDS MySQL 自研核心

1)實用性:線上固化SQL執行計劃

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

線上上使用RDS的時候會使用者會遇到SQL特别慢的情況,因為一些原因SQL可能沒有選擇到最優執行計劃,MySQL提供hint的功能,使用者可以在SQL語句裡加hint來提示MySQL是否要使用索引,或者是否開啟某一項優化器的政策。通過Hint來提高SQL的執行效率。 為什麼這個功能使用者用得很少?因為當發現SQL慢的時候,應用已經線上運作了。這時修改應用裡的SQL、可能需要一個漫長的過程、甚至不可能修改。SQL Outline讓使用者可以在RDS伺服器側為SQL語句添加Hint。隻需要調用一個存儲過程。比如加一個Index Hint,隻需在add_index_outline中指定這個SQL語句,以及對應的索引政策即可。在做規則比對時,Where條件中的值會自動忽略掉,同樣的語句不同的值,都會比對到這條規則。使用者的應用不需要做任何變化,加上規則後會立即生效,這是非常實用的功能 。

2)實用性:可診斷、可度量

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

我們加了大量的監控和診斷資訊,可分為執行個體級别、對象級别、語句級别三大類。

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

執行個體級别的名額非常多,把MySQL和系統裡的名額以秒為機關存儲到表裡去,讓使用者非常友善地通過MySQL語句查詢。包括執行個體的CPU使用情況、記憶體使用情況、磁盤IO情況、Server層連接配接數量、網絡通路情況,已經InnoDB中的大量狀态資訊。RDS把這些狀态資訊以秒為機關記錄下來,出現問題時很容易通過狀态的變化準确地定位出問題。

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

對象級别添加加了對表使用和Index使用的統計,為我們做資料結構的調整提供了依據。

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

語句級别MySQL有一個語句級别的統計資訊表,RDS在這個表裡添加了一些非常實用的資訊。比如:語句使用CPU的時間,MDL、InnoDB鎖等待的時間,Mutex的spin、wait的統計資訊,Read/Write IO的統計資訊。這些統計項幫助使用者準快速精準的定位SQL的問題。

3)穩定性:Buffer Pool優化

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

雲原生下需要能夠做到線上規格的調整,Buffer Pool就是很重要的資源。當規格、記憶體變化的時候Buffer Pool也需要跟着變化,MySQL提供線上調整Buffer Pool大小的能力。在測試中,我們發現MySQL Buffer Pool Resize會對業務流量造成一定的影響。業務流量抖動的頻率和幅度都很大(綠色線條)。阿裡雲RDS在Buffer Pool Resize上做了優化,優化後、Buffer Pool Resize對業務流量的影響就好了很多(藍色線條).

4)穩定性:并發控制

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

線上經常碰到某些SQL語句會使用大量的CPU資源或者記憶體資源。如果不做限制,可能會耗光CPU、記憶體資源,導緻整個執行個體不穩定。并發控制這個功能可以用來限制特定SQL的并發數量。并發控制的政策可以分為三個次元:操作類型、操作對象、關鍵字。操作類型指的是SELECT、INSERT、UPDATE、DELETE四種類型。操作對象指的是庫、表。并發控制和SQL Outline差不多,都是在RDS服務側配置的。

5)安全性:透明資料加密

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

透明加密支援AES加密算法和國秘算法SM4。因為有些機關有合規要求,必須使用國密算法。

6)安全性:資源回收筒

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

資源回收筒是表級的資料快速找回的工具。當使用者删除表或者Truncate表的時候,表不是直接從磁盤上删除,而是放到資源回收筒裡。使用者可以設定多長時間後自動在背景把表真正删除,當發生了誤操作,錯誤的删除或者清空了表時,能快速從資源回收筒中找回表。

7)安全性:Flashback Query

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

Flashback Query提供了快速找回資料行的能力。行級資料找回的功能利用了Undo裡面的曆史資料。RDS可以以秒為機關,為曆史資料建立快照。RDS提供了基于時間的快照查詢機制,通過Undo的記錄回溯到指定時間的曆史資料。當發生了誤操作、或者有回檔需求時,使用者可以通過SELECT查詢到指定時間點的曆史資料。

8)高性能 – Binlog In Redo

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

MySQL在事務送出時要持久化Redo和Binlog檔案,為了保證Crash Safe兩個檔案必須順序進行持久化對性能影響很大。RDS會把Binlog同時寫到Redo裡面去,是以事務送出時,隻要持久化Redo檔案。Binlog檔案隻需要在背景異步持久化就可以了。這個功能在保證資料一緻性的同時,對寫性能有顯著的提升。

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

上圖是這個功能的性能測試結果,有30%-40%性能峰值的提升,在小并發的情況下甚至能超過百分之百的性能提升。

9)高性能 – DDL優化

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

當做非Instant DDL操作的時候,往往會處理DDL表的大量的Page。MySQL通過掃描Buffer Pool的LRU連結清單來完成這個操作。LRU包含了Buffer Pool中所有的資料頁,特别是對大規格的執行個體,掃描一遍LRU的時間很長,還會影響其他SQL語句的執行。RDS做了優化後,DDL可以直接命中它的Page,不在需要掃描LRU。既能提高性能又能保持執行個體的穩定性。上圖性能測試,是在有業務流量的情況下做一次Export Table。Export Table的執行時間從原來的80秒降低到了0.34秒。

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

上圖是對Optimize Table的測試,在有業務流量的同時做Optimize Table,這個表有600MB資料,DDL的優化将OPTIMIZE TABLE的性能提升了十幾倍,由原來的220秒降低到了17秒時間。

10)高性能 – Faster Query Cache

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

我們基于MySQL的Query Cache做了重構,對并發控制、記憶體管理、緩存機制都做了大量的修改,在命中率較高的情況下性能得到提升,在命中率較低的情況下對性能沒什麼影響,預設的就能打開這個功能。

11)RDS MySQL自研核心: 企業級三節點

前沿分享|阿裡雲資料庫進階技術專家 宋利兵:阿裡雲企業級自治資料庫RDS詳解一、RDS MySQL 産品二、RDS MySQL 自研核心

基于自研的多數派協定來傳輸Binlog。Leader負責把Binlog傳輸到日志節點或者Follower節點後,到達多數派後在Leader節點上做事務送出,三節點自己選主形成自治的系統,在整個的過程中沒有資料丢失做到RTO為0。