mysql是世界上最流行的開源資料庫,集可靠、易用、功能豐富、適用範圍廣等特點於一身,尤其對開發者友好,使其成為華為雲關係型資料庫(rds)使用者的首選。儘管mysql備受關注,更是各種應用的第一選擇,但也面臨著諸多挑戰,其社群版在雲上和線下技術侷限性會造成一定的影響,難以完全滿足使用者的需求。
現由華為雲rds團隊自研的hwsql即將公測。那麼,華為雲rds的明星產品hwsql—卓越的雲上mysql,到底解決了哪些難題?技術上又有哪些突破?
華為雲rds for mysql
華為雲rds可自動安裝,是基於最佳實踐來部署mysql集群。不僅資料庫的安全性極高,還能定期進行備份,並可輕鬆完成一定範圍內的軟硬體故障恢復,資料庫管理員再也不用為備份和故障發愁了。
圖 1: 華為雲rds for mysql
注:圖1是典型的rds for mysql部署示例。mysql執行在ecs上,其數量取決於rds的部署方式。通常包含乙個mysql主例項、乙個備例項和最多五個唯讀副本為查詢密集型的應用增加吞吐量和可擴充套件性。
mysql中庫表資料存放在可靠的華為塊儲存雲硬碟(evs)中。evs提供三副本,增加資料可靠性。rds服務支援手動和自動資料庫備份,資料庫備份儲存在低成本的物件儲存服務(obs)中以確保資料庫是可恢復的,防止軟體錯誤、人為錯誤、或惡意活動等。整個環境監控採用華為雲監控服務(ces),主動通知rds環境相關的任何問題。
開源mysql面臨的挑戰
高併發場景下效能差
mysql社群版中,使用innodb作為儲存引擎,不論是雲上還是線下,使用者都會面臨一些挑戰。當活躍的資料庫連線數過多(一般情況下,連線數大於500),效能將變差,可能會造成查詢響應緩慢。尤其是mysql5.6,併發連線數太多會直接影響資料庫效能。即便採用更高規格的例項也解決不了這個問題,根本原因在於mysql社群版處理執行緒的方式。當併發連線增多,鎖和資源爭用問題會導致效能降低。
複製延遲突出
開源mysql面臨的第二個挑戰是複製延遲問題。在關係型資料庫中,資料庫的更新操作會被同步寫入事件日誌以保證其可恢復。在mysql中,這種日誌叫二進位制日誌(或「binlog」),使用二進位制日誌能保證故障場景下事務可恢復。例如,若需要將乙個舊的資料庫備份恢復到最新狀態,管理員可以重放二進位制日誌中的事務。
在mysql資料庫中,備庫、唯讀副本與主庫之間的同步是依靠二進位制日誌重放來實現的。在mysql5.7以前都沒有實現真正的多執行緒複製,導致從庫的複製延遲問題很突出。
故障恢復時間長
主例項高負荷的情況下,備例項的複製可能會滯後。如圖2所示,備例項的事務處理能力遠遠落後於主例項,導致事務積壓。
圖2 rds for mysql主備庫tps和複製延遲情況
注:通過開啟半同步複製並執行sysbench 0.5壓測, 在mysql5.6.36上獲取到如圖2所示的結果。該場景包括mysql主例項和備例項,規格均為32 v cpus, 128gb, 客戶端採用華為雲標準的8 v cpus,32gb vm。測試的資料庫大小是1.5gb,包含64個表,每個表100000行。在標準sysbench壓測中,讀操作(查詢)與寫操作(插入,重新整理,刪除)的比例是14:4。
如上圖紅線所示,在有負載的場景下,主例項能每秒處理大約1200個事務(每秒22,000次查詢)。不幸的是,備例項收集和執行binary日誌中事務的速度較慢,處理事務能力遠落後於主例項,每秒只能複製和確認200多個事務。高負荷的情況越持久,事務積壓越嚴重,故障情況下恢復所需的時間越長。在上面的示例中,如果主例項在 1,000秒之後故障,備例項要花費大約750秒(12分多鐘),去重放落後的日誌,故障恢復時間因此變得很長。
華為雲rds for hwsql
儘管並不是所有的環境都存在這個問題,但是對於事務繁忙且對故障恢復時間有要求的資料庫來說,上面描述的問題可能是個很大的挑戰。幸運的是,華為雲rds for hwsql服務為大型生產資料庫解決了這些問題和其他挑戰。
hwsql是高效能、100%相容mysql、由華為自研的資料庫服務。不僅具備rds for mysql的所有特性,同時提供更多功能:
• 事務吞吐量約為mysql社群版的3倍,支援更多的使用者連線,同時不影響響應速度。
• 解決併發連線帶來的挑戰,即使高達8000併發連線,查詢效能依舊良好。
• 採用更快、更可靠、無損的半同步複製協議,即使在超高負荷的情況下,也能保證故障快速恢復。
• 充分利用大規格例項的資源,發揮強大 hwsql資料庫引擎的優越性能和可擴充套件性。
採用圖1中相同的硬體,相同的sysbench模型進行效能壓測之後, rds for hwsql明顯優於開源mysql,吞吐量是mysql社群版本的三倍。在sysbench壓測中,每個事務包括18個離散查詢,不論資料庫連線數有多少, rds for hwsql的事務吞吐量達到90000qps(或者5000tps),並且時延很低。
圖3 - 華為雲rds for hwsql與mysql效能壓測對比
注:圖3是使用sysbench0.5對多個資料庫引擎壓測獲取的測試結果。該場景包括mysql主例項和備例項,規格均為32 v cpus, 128gb, 客戶端採用華為雲標準的8 v cpus,32gb vm。測試的資料庫大小為150gb,包含64個表,每個表10000000行。
對dba來說,情況變得明朗。採用上面相同的高負荷環境測試rds for hwsql效能。複製到備例項的速度相當快,備例項基本上與主例項保持同步。如果主例項故障,快速複製可以保障備例項立即恢復操作,減少停機時間,提高業務可用性。同時,rds for hwsql採用優化的半同步複製協議來保證資料不僅寫入而且提交到副本上,進一步提高可靠性。rds for hwsql減少主例項與備例項或者唯讀副本的延遲,即使在高吞吐量的環境下,也能保證恢復快速無損。從下面圖4不難看出,使用hwsql可大幅降低複製延遲。
圖4: 華為雲rds for hwsql的複製延遲情況
卓越的rds雲服務
hwsql除了以上特性外,還在諸多方面有所突破,比如:
• 強大的執行緒池外掛程式支援高併發連線
• 事務級mts並行複製可降低複製時間,快速恢復服務,保證唯讀副本的資料與主庫一致
• 優化的半同步協議確保資料完整性
• 多個唯讀事務優化
• 寫事務和日誌優化
it優選——hwsql 值得擁有
青出於藍勝於藍 (樹狀陣列 DFS序)
武當派一共有 n n 人,門派內 n n 人按照武功高低進行排名,武功最高的人排名第 1 1,次高的人排名第 2 2,武功最低的人排名第 n n。現在我們用武功的排名來給每個人標號,除了祖師爺,每個人都有乙個 每個人可能有多個徒弟。我們知道,武當派人才輩出,連祖師爺的武功都只能排行到 p p。也就是...
計蒜客 青出於藍勝於藍 dfs 樹狀陣列
題目描述 武當派一共有 n人,門派內 n 人按照武功高低進行排名,武功最高的人排名第 1,次高的人排名第 2,武功最低的人排名第 n。現在我們用武功的排名來給每個人標號,除了祖師爺,每個人都有乙個 每個人可能有多個徒弟。我們知道,武當派人才輩出,連祖師爺的武功都只能排行到 p。也就是說徒弟的武功是可...
計蒜客 青出於藍勝於藍 dfs序 歸併樹
武當派一共有 nn 人,門派內 nn 人按照武功高低進行排名,武功最高的人排名第 11,次高的人排名第 22,武功最低的人排名第 nn。現在我們用武功的排名來給每個人標號,除了祖師爺,每個人都有乙個 每個人可能有多個徒弟。我們知道,武當派人才輩出,連祖師爺的武功都只能排行到 pp。也就是說徒弟的武功...