TXSQL(TencentDB for MySQL) 8.0特性介紹

  • 2020 年 3 月 30 日
  • 筆記

概述


隨著MySQL-8.0新版本不斷的迭代推出,修復老版本的缺陷,其穩定性逐漸得到保障。騰訊雲在此趨勢下,推出具有自身功能特性的MySQL資料庫產品TXSQL-8.0。在性能上以及在功能上,既集成了前序TXSQL的特點,又在此基礎上進行了大幅度提高。以下,我們將重點介紹一下其中的一些亮點功能。

列存引擎CSTORE

InnoDB提供的是OLTP服務的存儲引擎,適用於事務密集型的業務場景。對於分析型OLAP的業務場景,InnoDB就無法勝任。為了向TXSQL的用戶提供全面的服務層次,借用MySQL成熟生態圈的已有技術。如下圖,在MySQL已有架構下,提供列存儲引擎(CSTORE)。

通過CSTORE,用戶可以完成大型數據的查詢與分析,可以適用於歷史存檔數據、日誌數據、大數據、更新不頻繁的OLTP數據和數據倉庫和分析處理,數據處理量達到PB級別。 在性能方面,通過高壓縮比、快速載入、針對性的查詢優化這些技術實現,向用戶提供高效的服務,從而達到單節點可支援百億行記錄的秒級查詢。TXSQL的列存儲可以達到10比1的壓縮比,通過減少磁碟空間的使用,實現大批量數據的秒級寫入和讀取。在已有MySQL查詢優化的基礎上,利用多種形式的稀疏索引過濾數據實現高速的數據過濾於選擇。並利用多列並行處理的方式,高速完成數據的載入與處理。

非易失存儲優化

Intel推出一種新的3D XPoint固態存儲介質,該存儲介質提供超越普通SSD的存儲速度,根據如下Intel提供性能指標,最高讀取速度是8.3G每秒,寫入為3GB每秒

眾所周知,InnoDB存儲引擎的文件寫主要是以頁面為單位進行的,也就是在默認的模式下,每次將以16KB為單位進行讀取和寫入,在這一點上就可以極大的利用該存儲系統的特性。

TXSQL針對性的改造了文件讀寫介面,以適應該存儲介質的特性,提供了該模式下的性能改進,如下測試結果,可以看出改進後的TXSQL在各個方面所達到的性能提升。

資料庫審計功能

審計功能是資料庫安全服務的必備特性之一,通過提供提供旁路模式,實時記錄用戶訪問資料庫行為,通過實時審計資訊形成不同維度的審計報告,對風險行為和攻擊行為進行實時告警。所有企業級資料庫,必須向用戶提供該項功能,保障資料庫用戶的數據安全的選項。TXSQL通過資料庫插件方式,根據用戶的需求,提供全面,精準和高效的審計功能。 全面,可對所有資料庫訪問進行記錄,最大程度保留用戶使用資料庫的操作資訊,以滿足用戶最苛刻的審計需求,如追溯對應用者的身份和行為,並提供海量數據存儲,根據用戶要求提供長期備份。

精準,用戶可通過設置審計規則,在資料庫實際運行中,保留用戶關心的用戶行為,提供最為核心的審計資訊。

高效,提供用戶、IP、客戶端工具、訪問時間、操作對象、SQL 操作類型、成功與否、訪問時長、影響行數等多種檢索條 件的快速分析與檢索,30多億級數據6 - 8秒內響應。

資料庫加密功能

在TXSQL中,我們沿用MySQL的透明加密體系,提供 KEYRING插件的另外一種實現:KEYRING_KMS。將KEYRING與騰訊雲企業級的秘鑰管理服務KMS(Key Management Service) 集成。

KMS是騰訊雲一項保護數據及密鑰安全的密鑰服務。服務涉及的各個流程均採用高安全性協議通訊,保證服務高安全;提供分散式集群管理和熱備份,保證服務高可靠和高可用。KMS也採用的是兩層密鑰體系。KMS涉及兩類密鑰,即用戶主密鑰(CMK)與數據密鑰(Datakey)。用戶主密鑰用於加密數據密鑰或密碼、證書、配置文件等小包數據(最多 4KB)。數據密鑰用於加密業務數據。海量的業務數據在存儲或通訊過程中使用數據密鑰以對稱加密的方式加密,而數據密鑰又通過用戶主密鑰採用非對稱加密方式加密保護。通過兩層密鑰體系,確保數據在在記憶體和文件中都進行加密。

TXSQL通過密鑰管理服務提供安全的密鑰管理模式,如下圖展示,如何完成密鑰的管理,生成和獲取。

非同步刪除大表功能

在日常運維過程中,當刪除一個大表時(如一個20G的ibd文件的大表),在刪除這個大文件的過程中,文件系統IO達到峰值,持續好幾秒,這樣會導致文件系統無法響應其他資料庫實例的IO請求,對上層應用表現為資料庫無法響應。在有些業務中,如果有好幾秒資料庫沒有響應,就是很嚴重的事故。為了讓刪除大文件的IO更平滑,運維人員總結出一系列的操作,以降低系統級不可用的風險。但這這些做法缺少統一的模式,以及操作上的不確定性。 TXSQL在內核實現了非同步刪除表的功能,通過自動化的方式,減少人為操作中可能犯的錯誤。其通過分離數據文件,將原有的數據文件脫離MySQL系統,並建立後台任務,將文件的刪除轉化為文件的逐步回收,當數據文件進入低風險大小後,完成最後的刪除動作。這種分散的操作,極大的分攤的系統開銷,提供系統的可用度。

對於用戶來說,可以通過簡單的開關模式,動態開啟或者關閉該功能,就可以使 用TXSQL提供的該項功能,極大的避免起停服務,導致對業務的影響。

semi-sync強一致性

原生semi-sync存在著以下問題,semi-sync在時間超過rpl_semi_sync_master_timeout會退化為非同步;採用select進行監聽,當句柄值大於1024時則會出現異常;在after commit後等待ACK容易出現幻讀的問題;以上問題的出現,將會影響高可用的一致性,在主從切換時無法確保用戶數據的完整。

為了解決上面的問題並對強同步進行優化及顯示狀態資訊,TXSQL做了相應的調整。在半同步基礎上實現強同步,在同步的過程中,一直保持讀取狀態,直到收到ack資訊後,確認數據完成同步;修改同步方式時,喚醒正在等待的用戶執行緒,繼續等待或者退出;增加一些狀態,用於展示當前等待的情況(正在等待的binlog位點,已等待時間),提供準確的運維資訊,增加運維人員的線上處理所能獲取的資訊,為更精準的判斷同步狀態提供支援手段。

執行緒池

Mysql默認的處理連接的方式是One-Connection-Per-Thread,即對於每一個資料庫連接,Mysql伺服器都會創建一個獨立的執行緒服務,請求結束後,銷毀執行緒;再來一個連接請求,則再創建一個連接,結束後再進行銷毀。該模式相較於最早期的進程服務模式有了極大的效率提升,但在互聯網高並發的業務場景下,該模式顯示除了極大的問題。在高併發模式下,會創建大量的執行緒,這些執行緒會不停的爭用CPU資源,並將大量的CPU資源消耗在執行緒上下文的切換中。並且,在互聯網業務中,連接不一定會長期保持,高並發下會出現執行緒頻繁的創建和銷毀,這些額外的操作都大量的消耗CPU,做了無用功。

TXSQL針對這些問題改進了執行緒服務模型,才分了連接和服務的概念,創建執行緒池,當客戶端發起請求後,由空閑的執行緒對該請求進行處理,從而減少執行緒運行時切換消耗和創建銷毀的消耗。如下圖所展示,可以了解執行緒池的架構模型,以及在高並發下,執行緒池所帶來的性能優勢。

複製限速

在MySQL 的主從之間,一般原生的是通過獲取node來訪問主從複製,但這樣就會有一個問題,就是在主從之間(也就是 master 和 slave之間)新建了一個實例,如果中斷時間比較長,而你的網路剛開始恢復的時候,它會瞬間把你主從之間的頻寬給打滿,這可能會影響到其他一些正常的業務邏輯。為了避免類似這樣的問題,TxSQL提供了一個限速插件。這個插件在主從同步的時候,可以設置閾值。因此即便在這種情況下,也可以保證為業務應用預留一定的頻寬。

在實現上,TXSQL採用對線上業務影響最小的slave端限速的方案。該方案下,只需原地升級slave,不會影響線上服務,在確保不停服務的前提下,這個方案更容易被業務方接受。實際的限流演算法採用了經典的流量管控演算法,令牌桶的模式,該演算法更適於流量不穩定的網路模式,讓流量更平滑,這種不穩定的處理方式對於TXSQL所面臨的複雜應用場景有更好的應用,避免了前面所描述的可能的突發流量導致伺服器的可用性降低。

以上主要介紹了一些TXSQL8.0的亮點特性,相信在產品正式上線後,會給大家帶來更多的驚喜。


騰訊資料庫技術團隊對內支援QQ空間、微信紅包、騰訊廣告、騰訊音樂、騰訊新聞等公司自研業務,對外在騰訊雲上依託於CBS+CFS的底座,支援TencentDB相關產品,如CynosDB、CDB、CTSDB、MongoDB、CES等。騰訊資料庫技術團隊專註於持續優化資料庫內核和架構能力,提升資料庫性能和穩定性,為騰訊自研業務和騰訊雲客戶提供「省心、放心」的資料庫服務。此公眾號旨在和廣大資料庫技術愛好者一起推廣和分享資料庫領域專業知識,希望對大家有所幫助。

Tags: