腾讯研发专家:TXSQL如何成为云计算时代数据库核弹头?
背景:5月23-24日,以“煥啟”為主題的騰訊“云+未來”峰會在廣州召開,廣東省各級政府機(jī)構(gòu)領(lǐng)導(dǎo)、海內(nèi)外業(yè)內(nèi)學(xué)術(shù)專家、行業(yè)大咖及技術(shù)大牛等在現(xiàn)場共議云計(jì)算與數(shù)字化產(chǎn)業(yè)創(chuàng)新發(fā)展。
騰訊MySQL內(nèi)核研發(fā)專家張青林在騰訊“云+未來”峰會的「開發(fā)者專場」做了主題為“TXSQL:云計(jì)算時(shí)代數(shù)據(jù)庫核彈頭”的技術(shù)內(nèi)容分享,本次分享從五個(gè)方介紹TXSQL:
第一部分:MySQL和TXSQL的概念
騰訊云作為國內(nèi)云計(jì)算領(lǐng)先公司,在全球建立了500多個(gè)數(shù)據(jù)中心,供數(shù)以萬計(jì)的開發(fā)者使用。
TXSQL是CDB的內(nèi)核,而CDB則是騰訊云對外提供的產(chǎn)品,提供數(shù)據(jù)庫相關(guān)服務(wù),CDB產(chǎn)品提供了一整套的解決方案,包括用戶上云,數(shù)據(jù)遷移、備份、恢復(fù)、升級等操作,相比于傳統(tǒng)用戶來構(gòu)建MySQL服務(wù),減少了投入的時(shí)間同時(shí)也更方便使用。
騰訊云的CDB服務(wù)滲透到了各行各業(yè),包括銀行、證券、物流,還有傳統(tǒng)企業(yè)等都是騰訊云的客戶,用戶購買 CDB 后,會分配相應(yīng)的主機(jī)、端口、用戶名、密碼等信息,用戶通過這些信息可以直接聯(lián)接到后臺的數(shù)據(jù)庫。
CDB服務(wù)目前分為本地盤和網(wǎng)盤,TXSQL是基礎(chǔ)架構(gòu)部數(shù)據(jù)庫內(nèi)核團(tuán)隊(duì)獨(dú)立維護(hù)的MySQL分支,對外通過CDB服務(wù)提供給客戶。
可以看到TXSQL是內(nèi)核,也是底層提供數(shù)據(jù)服務(wù)的核心。
第二部分:我們?yōu)楹螘?chuàng)造 TXSQL
我們來詳細(xì)看看構(gòu)建TXSQL的必要性:
從2016到2017年,存儲規(guī)模達(dá)到了4倍以上,并且隨著云計(jì)算市場的不斷成熟,行業(yè)覆蓋率也得到了前所未有的發(fā)展,整個(gè)規(guī)模已經(jīng)達(dá)到了10萬+級別。
當(dāng)用戶自己構(gòu)建數(shù)據(jù)庫服務(wù)的時(shí)候,運(yùn)行在自己的服務(wù)器上,一年可能只會遇到一兩個(gè)問題,但是如果有數(shù)十萬個(gè)服務(wù)器在同時(shí)運(yùn)行,那么每天遇到問題的概率是很大的,所以我們遇到了三大挑戰(zhàn):
第一,客戶使用了CDB產(chǎn)品,他會把數(shù)據(jù)庫的請求返回交給上層應(yīng)用,如果數(shù)據(jù)庫出現(xiàn)問題,可用性基本上得不到保障,所以隨著規(guī)模的不斷增長,我們必須能夠快速定位和解決客戶問題。
第二,來自業(yè)務(wù)的需求,隨著行業(yè)覆蓋率的不斷擴(kuò)展,比如金融或者對數(shù)據(jù)要求比較高的行業(yè),他們就會對數(shù)據(jù)安全等功能有多元化的需求,所以需要具備滿足客戶需求的開發(fā)能力。
第三,關(guān)于性能,我們知道在電商大促或者游戲有活動的時(shí)候,數(shù)據(jù)庫所受到的壓力很大,為了提升單機(jī)的性能,讓用戶花最少的錢買最好的服務(wù)。
綜上所述,面臨著三大挑戰(zhàn),一個(gè)是穩(wěn)定性,一個(gè)是新的業(yè)務(wù)需求,還有一個(gè)是性能的提升。
基于此,騰訊云需要有一個(gè)自己的內(nèi)核團(tuán)隊(duì)來快速定位客戶問題,來幫助客戶解決問題,并且最大速度的提升單機(jī)性能。
第三部分:我們?nèi)绾卧O(shè)計(jì) TXSQL
B3M是我們的代碼設(shè)計(jì)模型,可以讓客戶操作的時(shí)候更方便,更好的解決問題,也可以幫助客戶實(shí)現(xiàn)一些新的需求。
用戶可能會問,MySQL作為一個(gè)基礎(chǔ)軟件,有幾百萬代碼,門檻比較高,怎么保持修改后MySQL版本的穩(wěn)定性呢?
我們不是隨意改MySQL,我們改的每一處地方都要經(jīng)過嚴(yán)格的測試。
首先,我們會進(jìn)行需求分析,需求分析主要來源于幾個(gè)方面,一個(gè)是數(shù)據(jù)庫在運(yùn)行過程中出現(xiàn)的問題,比如官方的BUG,另外是用戶需求相關(guān)的東西,幫助他們更好的使用數(shù)據(jù)庫,再就是做性能調(diào)優(yōu),用戶在使用MySQL過程中,我們也逐漸提升性能和競爭力。
經(jīng)過需求分析之后會做設(shè)計(jì),然后再進(jìn)行代碼編寫的工作,編寫之后我們會嚴(yán)格把控代碼質(zhì)量,每一個(gè)步驟都會經(jīng)過嚴(yán)格測試,比如代碼覆蓋率測試和單元測試,我們基本每兩到三個(gè)月會發(fā)布一個(gè)數(shù)據(jù)庫內(nèi)核版本,每一個(gè)版本都要通過穩(wěn)定測試和性能測試,以及崩潰恢復(fù)測試,從而保證我們的代碼不會引入新的BUG。
在版本發(fā)布的時(shí)候,首先進(jìn)行個(gè)別實(shí)例的發(fā)布,然后對新的TXSQL版本的實(shí)例進(jìn)行秒級監(jiān)控,沒有問題再進(jìn)行小集群的發(fā)布,最后再進(jìn)行全網(wǎng)發(fā)布,通過這種方式我們保證了MySQL版本的穩(wěn)定性以及可靠性。
第四部分:用戶在使用 TXSQL 內(nèi)核版本的時(shí)候需要注意哪些問題
對于用戶來說,所使用CDB內(nèi)核提供了哪些服務(wù)?
因?yàn)槲覀儗ySQL的改動,是在MySQL的基礎(chǔ)上進(jìn)行二次開發(fā)的,一種是性能調(diào)優(yōu),一種是線上問題的解決,還有功能開發(fā),針對于新的業(yè)務(wù)需求來實(shí)現(xiàn)。
我們會通過在壓測過程中比較他們資源競爭的情況,比如說內(nèi)存資源或鎖資源,下圖中的前三個(gè)是我們對redo logo所做的性能調(diào)優(yōu),第一個(gè)是redo log,通過減少Sync盤的次數(shù)來提升性能,第二部分是通過多緩沖buffer,即Redo Log在Sync的同時(shí)不影響其他事務(wù)日志的寫入,第三個(gè)則可以保證事務(wù)在向系統(tǒng)緩沖區(qū)寫Redo日志時(shí)互不影響,提升并發(fā)性。Select offset limit 操作則是將計(jì)算下推到引擎層,降低 CPU資源消耗的同時(shí),提升性能。
而在功能方面,我們實(shí)現(xiàn)了官方版本所沒有的功能,比如加密、審計(jì)、線程池、并行復(fù)制。首先是審計(jì)功能,官方的版本是沒有審計(jì)這個(gè)功能的,只有企業(yè)版才有,我們結(jié)合自己的實(shí)際情況,為了保證用戶的性能,我們做了一個(gè)audit的插件,從而保證性能的同時(shí)實(shí)現(xiàn)了用戶所需要的功能。
第三個(gè)是thread handling,我們在測試壓力測試的時(shí)候,隨著并發(fā)的加大,性能會首先提升,然后下降,原因則是系統(tǒng)內(nèi)部各種資源的競爭比較嚴(yán)重,TXSQL 通過把Thread Pool 引入來解決這個(gè)問題,并且解決了以下幾個(gè)問題:
1. 解決了 Threadpool 情況下全局讀鎖所造成的死鎖問題
2. 解決了 Dump 線程對于Thread Pool 的影響
3. 添加新的Information Schema 表來觀察ThreadPool內(nèi)部的運(yùn)行情況
當(dāng)主庫壓力不斷變大的時(shí)候,我們備庫的消耗數(shù)趕不上主庫生產(chǎn)的時(shí)候,從5.1,5.5, 5.6,5.7,這個(gè)問題始終沒有得到很好的解決,5.6的時(shí)候雖然有一個(gè)并行算法,但是并不能完全解決延遲問題,我們引入了自己的并行,從而很好解決了這個(gè)問題。
當(dāng)你主庫延遲的時(shí)候,主庫掛了,備庫沒有消費(fèi)完累積的RelayLog之前,服務(wù)器是不能夠提供服務(wù)的,如果接受服務(wù)的話會有雙寫的問題。
無論是我們在上云過程中還是服務(wù)用戶過程中,都遇到了各種各樣的困難。
比如我們在幫一個(gè)游戲公司上云過程中發(fā)現(xiàn)了他們的性能問題,我們對系統(tǒng)進(jìn)行分析的時(shí)候我們對它進(jìn)行優(yōu)化,調(diào)優(yōu)了各種參數(shù)并升級內(nèi)核,最終使用戶的性能從7萬上升到17萬。
占用內(nèi)存不斷上升,造成了機(jī)器的OOM,這個(gè)問題我們花了將近一周的時(shí)間找到問題RootCause,然后用一周的時(shí)間進(jìn)行灰度發(fā)布和測試,我們Fix Bug的速度一般是兩周,而官方受限于版本發(fā)布,一般都需要兩到三個(gè)月才能解決。
TXSQL只是作為內(nèi)核版本來幫助用戶進(jìn)行計(jì)算。我們的穩(wěn)定性有如下能力來保證,一個(gè)是全鏈路監(jiān)控,一個(gè)是機(jī)器層面操作系統(tǒng)方面的監(jiān)控,還有MySQL的秒級監(jiān)控,以及人工的在線幫助。
? ?第五部分:TXSQL未來的發(fā)展方向
在保持穩(wěn)定性,性能調(diào)優(yōu)和功能實(shí)現(xiàn)的基礎(chǔ)上,未來我們會以這幾個(gè)方向。?
批量計(jì)算:對于可以讓 Engine做的事情,我們可以將計(jì)算下推到Engine層來做,減少消耗。?
執(zhí)行計(jì)劃緩存也是我們在不久將來要做的事情,之前做過一個(gè)測試,最簡單的基于主鍵的查詢就會有10%的性能提升。?
為了解決存儲的問題,我們將RocksDB 引入到了TXSQL中,即 TXRocks,也會在近期推出這個(gè)產(chǎn)品,在支持事務(wù)操作的同時(shí),可以極大的降低用戶成本。
騰訊數(shù)據(jù)庫技術(shù)團(tuán)隊(duì)維護(hù)MySQL內(nèi)核分支TXSQL,100%兼容原生MySQL版本,對內(nèi)支持微信紅包,彩票等集團(tuán)內(nèi)部業(yè)務(wù),對外為騰訊云CDB for MySQL提供內(nèi)核版本。
騰訊數(shù)據(jù)庫技術(shù)團(tuán)隊(duì)專注于增強(qiáng)MySQL內(nèi)核功能,提升數(shù)據(jù)庫性能,保證系統(tǒng)穩(wěn)定性并解決用戶在生產(chǎn)過程中遇到的問題。
騰訊前沿技術(shù) | 產(chǎn)品 | 行業(yè)信息交流發(fā)布平臺
?總結(jié)
以上是生活随笔為你收集整理的腾讯研发专家:TXSQL如何成为云计算时代数据库核弹头?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯安全平台部专家研究员胡育辉:千亿黑产
- 下一篇: 腾讯数据库内核团队资深架构师:TXSQL