導(dǎo)語(yǔ)|騰訊云數(shù)據(jù)庫(kù)MySQL 8.0版本于2020年7月正式發(fā)布,QPS達(dá)到70w+。騰訊云基于官方8.0版本新增什么特性和功能,這些新能力為B端客戶帶來(lái)了哪些實(shí)際的價(jià)值和幫助?本文是對(duì)騰訊云數(shù)據(jù)庫(kù)產(chǎn)品專家黃稚禹在云+社區(qū)沙龍online的分享整理,希望與大家一同交流。
一、騰訊云MySQL8.0企業(yè)特性
1.官方MySQL 8.0新特征
官方MySQL 8.0是非常大的版本,以前的版本號(hào)是5.6、5.7,現(xiàn)在一下飛躍到8.0,對(duì)于Oracle MySQL官方來(lái)說(shuō)也是非常大的版本,有很多的更新。
在官方8.0版本里,一個(gè)很重要的特性就是秒級(jí)加列,在加列的時(shí)候不再像以前一樣拷數(shù)據(jù),只需要修改數(shù)據(jù)字典就可以快速實(shí)現(xiàn)加列。
另一個(gè)比較重要的特性就是新增了窗口函數(shù)功能(Windows Function),可以實(shí)現(xiàn)若干新的分析統(tǒng)計(jì)查詢功能。它不是將查詢結(jié)果合并放入某一行,而是將結(jié)果放回多行中,可以大大提高分析型業(yè)務(wù)場(chǎng)景的效率。
熟悉Oracle數(shù)據(jù)庫(kù)的朋友們應(yīng)該會(huì)對(duì)窗口函數(shù)比較了解,報(bào)表統(tǒng)計(jì)分析的功能非常方便,有了窗口函數(shù)特性,MySQL 8.0就可以為企業(yè)業(yè)務(wù)增長(zhǎng)助力。
第三個(gè)特性是Atomic DDL(原子DDL)。在8.0之前的版本,在做一些操作時(shí)如果失敗會(huì)有狀態(tài)殘留。比如truncate一張上億行數(shù)據(jù)的表時(shí),如果失敗了中間的殘留狀態(tài)可能需要在源代碼層面去解決。而借助8.0的新特性,可以確保相關(guān)DDL操作的順利完成,避免出現(xiàn)中間的殘留狀態(tài)。
第四個(gè)特性是JSON improve(JSON增強(qiáng)型改進(jìn))。在MySQL 5.7開始,就提供了JSON字段的數(shù)據(jù)類型,在8.0中對(duì)該功能進(jìn)行了更大的改進(jìn)和拓展。
這個(gè)功能的出現(xiàn)對(duì)MySQL具有深遠(yuǎn)的意義,因?yàn)樗撕芏嗥髽I(yè)對(duì)獨(dú)立的NoSQL文檔數(shù)據(jù)庫(kù)的需求依賴性。
比如一些游戲行業(yè)對(duì)NoSQL有很大的需求,因?yàn)槠渲С諮SON字段,但是MySQL8.0引入了JSON字段類型以后,結(jié)合自身ACID的特性消除了對(duì)獨(dú)立文檔數(shù)據(jù)庫(kù)的依賴。MySQL 8.0把包括schema-less模式的存儲(chǔ)數(shù)據(jù)類型全部進(jìn)行了統(tǒng)一。
官方的特性還有很多,比如CTES公共表達(dá)式、直方圖等,讓表的數(shù)據(jù)分布統(tǒng)計(jì)更加的準(zhǔn)確明顯,還包括降序索引、隱藏索引的特性等等。
2.騰訊云MySQL 8.0
騰訊云MySQL 8.0推出八大特性:數(shù)據(jù)加密、SQL審計(jì)、線程池、數(shù)據(jù)強(qiáng)一致性、新硬件支持、輕量級(jí)AP、熱點(diǎn)更新、SQL限流,下文我們?cè)敿?xì)來(lái)做解讀。
(1)SQL審計(jì)
MySQL開源社區(qū)版是不支持企業(yè)級(jí)審計(jì)功能的,只有商業(yè)版里才提供。而騰訊云MySQL 8.0實(shí)現(xiàn)了內(nèi)核級(jí)別的審計(jì)功能,并且結(jié)合了云產(chǎn)品進(jìn)一步提升了SQL審計(jì)功能,讓用戶擁有更好的體驗(yàn)。
上圖展示了騰訊云MySQL 8.0的審計(jì)架構(gòu)圖,用戶連接session產(chǎn)生的審計(jì)記錄,由專門的寫盤線程(Flush thread)將內(nèi)存中的審計(jì)記錄寫入審計(jì)文件中(Audit File),直接落盤。
而審計(jì)代理(Audit Agent)則會(huì)讀取審計(jì)文件,將審計(jì)記錄發(fā)送到審計(jì)日志中心。審計(jì)日志中心是由CTSDB數(shù)據(jù)庫(kù)存儲(chǔ)的,這是一個(gè)時(shí)序數(shù)據(jù)庫(kù),貼合時(shí)序?qū)徲?jì)的數(shù)據(jù)存儲(chǔ)。
選擇這樣的數(shù)據(jù)庫(kù)存儲(chǔ)能帶來(lái)很多好處,首先是數(shù)據(jù)壓縮率高、二是數(shù)據(jù)吞吐量大、三是分析能力強(qiáng),完全可以滿足海量審計(jì)數(shù)據(jù)下的分析處理能力。
同時(shí)我們也會(huì)采用JSON格式對(duì)審計(jì)日志進(jìn)行存儲(chǔ)。記錄的審計(jì)內(nèi)容有時(shí)間戳、影響行數(shù)、執(zhí)行時(shí)間、主機(jī)、來(lái)源IP、實(shí)例名、用戶名、數(shù)據(jù)庫(kù)名,包括具體的SQL語(yǔ)句和類型等。
考慮到審計(jì)日志量巨大,我們也在產(chǎn)品層面上提供了審計(jì)規(guī)則的過(guò)濾。另外,為了減少審計(jì)的打開對(duì)MySQL數(shù)據(jù)庫(kù)的性能影響,目前只會(huì)對(duì)命令執(zhí)行完后的結(jié)果進(jìn)行審計(jì)。
根據(jù)測(cè)試,如果打開審計(jì)并進(jìn)行全量審計(jì)(Audit All),會(huì)達(dá)到6%左右的性能損失。而采用過(guò)濾型審計(jì)性能損失大概是在2%~3%,相對(duì)于官方商業(yè)版本損失也是比較小的。
我們的審計(jì)功能還在不斷往前迭代發(fā)展,現(xiàn)在只是對(duì)事后操作進(jìn)行審計(jì),目前正在開發(fā)一項(xiàng)新的功能:事前攔截功能。
以前MySQL中有許多大數(shù)據(jù)是最讓DBA頭疼的,就是主實(shí)例大事務(wù)容易造成主從延遲等問(wèn)題。事前攔截功能,會(huì)針對(duì)不同語(yǔ)句進(jìn)行并發(fā)控制,從而保護(hù)核心任務(wù)。事前攔截也會(huì)配合5.7版本出現(xiàn)的新參數(shù)——最長(zhǎng)時(shí)序時(shí)間(max_execution_time)。時(shí)序時(shí)間超過(guò)設(shè)定值,就會(huì)啟動(dòng)攔截。
(2)線程池
對(duì)于線程池,之前MySQL默認(rèn)的連接處理方式是:一個(gè)線程一個(gè)連接,每個(gè)數(shù)據(jù)庫(kù)連接都會(huì)創(chuàng)建獨(dú)立的線程,請(qǐng)求結(jié)束后就把線程銷毀,這個(gè)模式相較于最早期的進(jìn)程服務(wù)在效率上有了很大提升。
但是在互聯(lián)網(wǎng)高并發(fā)業(yè)務(wù)場(chǎng)景下此模式就有很大的問(wèn)題,因?yàn)楦卟l(fā)模式會(huì)創(chuàng)建大量的線程,線程會(huì)不停征用CPU資源、導(dǎo)致CPU頻繁進(jìn)行上下文切換,很多短連接也會(huì)出現(xiàn)線程頻繁的創(chuàng)建和銷毀,這些操作都會(huì)額外消耗CPU,導(dǎo)致資源的浪費(fèi)甚至引起數(shù)據(jù)庫(kù)的高負(fù)載。
騰訊云數(shù)據(jù)庫(kù)MySQL 8.0針對(duì)這些問(wèn)題進(jìn)行了線程模式的改進(jìn)。當(dāng)客戶端發(fā)起連接后,由空閑的線程先對(duì)請(qǐng)求進(jìn)行處理,減少上下文切換的消耗和創(chuàng)建銷毀的消耗。同時(shí)引入了多隊(duì)列的機(jī)制。
多隊(duì)列的好處是,可以按照業(yè)務(wù)的訪問(wèn)走不同的隊(duì)列。比如寫業(yè)務(wù)、讀業(yè)務(wù)可以分別在不同的隊(duì)列,大家相互不干擾,各自排隊(duì)處理請(qǐng)求就可以了。
如下圖所示,在開啟了線程池以后,512高并發(fā)線程下性能還有提升,但是在沒(méi)有開啟線程池模型的情況下,線程到512以后性能開始陡降。
(3)數(shù)據(jù)加密
MySQL 5.7以后就開始支持TDE透明加密的數(shù)據(jù)體系。騰訊云MySQL 8.0在此基礎(chǔ)上引入了騰訊云的另外一款產(chǎn)品—KMS。KMS是騰訊云提供的密鑰服務(wù),是一項(xiàng)單獨(dú)的產(chǎn)品,除了與數(shù)據(jù)庫(kù),還可以跟其他云產(chǎn)品相結(jié)合使用。
通過(guò)KMS和TDE的深度集成,實(shí)現(xiàn)了二者的結(jié)合,為騰訊云MySQL用戶提供了一整套安全解決方案。
KMS采用的是兩層密鑰體系。KMS涉及兩類密鑰,即用戶主密鑰(CMK)與數(shù)據(jù)密鑰(Datakey)。用戶主密鑰用于加密數(shù)據(jù)密鑰或密碼、證書、配置文件等小包數(shù)據(jù)(最多4KB)。數(shù)據(jù)密鑰用于加密業(yè)務(wù)數(shù)據(jù)。
海量的業(yè)務(wù)數(shù)據(jù)在存儲(chǔ)或通信過(guò)程中使用數(shù)據(jù)密鑰以對(duì)稱加密的方式加密,而數(shù)據(jù)密鑰又通過(guò)用戶主密鑰采用非對(duì)稱加密方式加密保護(hù)。通過(guò)兩層密鑰體系,確保數(shù)據(jù)在在內(nèi)存和文件中都進(jìn)行加密。
同時(shí),我們也基于云上的訪問(wèn)控制權(quán)限體系——CAM,和MySQL加密體系打通。引入以后,根帳號(hào)的管理員可以設(shè)置多個(gè)子帳號(hào),可以為子帳號(hào)分配部分權(quán)限,把最高級(jí)的權(quán)限集中在根帳號(hào)用戶手中。
(4)新硬件支持
同樣,騰訊云MySQL 8.0在新硬件的探索和適配上也有著重要的進(jìn)展。
目前主流云廠商的關(guān)系數(shù)據(jù)庫(kù)都在使用SSD,但現(xiàn)在市場(chǎng)上已經(jīng)存在一種新的硬件——AEP(英特爾推出的固態(tài)存儲(chǔ)介質(zhì)),它提供了超過(guò)普遍SSD甚至更高級(jí)別SSD的數(shù)據(jù)存儲(chǔ)能力。
根據(jù)英特爾提供的性能指標(biāo),AEP最高的讀寫速度能達(dá)到8.3 GB/s、寫入速度3GB/s,遠(yuǎn)超現(xiàn)在SSD固態(tài)盤或者PCIE固態(tài)盤的性能。
騰訊云MySQL 8.0對(duì)AEP文件讀寫接口進(jìn)行了適配,提供在AEP硬件適配下的性能改進(jìn),把relog放到AEP硬件上做測(cè)試,發(fā)現(xiàn)在同等規(guī)格操作系統(tǒng)條件下,AEP性能大大高于傳統(tǒng)SSD。
經(jīng)過(guò)測(cè)試,騰訊云MySQL 8.0和官方8.0版本在性同硬件、同規(guī)格實(shí)例、同操作系統(tǒng)條件下,性能全面超越了Oracle 8.0。
二、騰訊云內(nèi)核TXSQL
1.TXSQL是什么
為什么騰訊云MySQL 8.0性能可以超越Oracle原生版本?這是因?yàn)轵v訊云有專門做內(nèi)核的數(shù)據(jù)庫(kù)團(tuán)隊(duì),相當(dāng)于騰訊云內(nèi)部有一個(gè)能夠去做MySQL源碼分支技術(shù)研發(fā)的專家團(tuán)隊(duì)。
我們的內(nèi)核叫做TXSQL,項(xiàng)目團(tuán)隊(duì)在十幾年前就已成立。團(tuán)隊(duì)的工作是在原生內(nèi)核源碼深度下做項(xiàng)目定制,對(duì)官方版本進(jìn)行二次開發(fā)。除了支撐騰訊云數(shù)據(jù)庫(kù)MySQL的平穩(wěn)運(yùn)行,也以打造國(guó)產(chǎn)數(shù)據(jù)庫(kù)MySQL分支為已任。
當(dāng)然,我們目前跟其他耳熟能詳?shù)腗ySQL分支(比如:Percona和MariaDB)比起來(lái),仍然處于一個(gè)相對(duì)的稚嫩階段,但是內(nèi)核體系業(yè)已搭建發(fā)展起來(lái),騰訊也會(huì)不斷致力于發(fā)展國(guó)產(chǎn)數(shù)據(jù)庫(kù)。
2.TXSQL演進(jìn)之路
如上圖所示,騰訊云MySQL的內(nèi)核在每一個(gè)版本都做了很多改進(jìn),不斷修理官方Bug,加強(qiáng)性能以及做企業(yè)級(jí)功能的適配。
我們從官方5.1版本的時(shí)候就在不斷跟進(jìn),會(huì)選擇一個(gè)經(jīng)典穩(wěn)定版本做為基礎(chǔ)版本進(jìn)行開發(fā)。所以我們是一個(gè)在內(nèi)核層面能夠自主可控的廠商,因?yàn)閮?nèi)核都是我們自己寫的。
但我們現(xiàn)在還是發(fā)展過(guò)程中,當(dāng)?shù)搅四硞€(gè)階段,我們也會(huì)把TXSQL開源出來(lái)提供給大家,到時(shí)即便不是騰訊云數(shù)據(jù)庫(kù)用戶也可以用上TXSQL,也可以用上國(guó)產(chǎn)數(shù)據(jù)庫(kù)內(nèi)核級(jí)別的軟件,這將是一個(gè)非常有意義的事情。
3.歷史發(fā)布的優(yōu)秀特征
在8.0的版本之前,TXSQL也發(fā)布過(guò)一些優(yōu)秀的特性:
(1)異步大表刪除
在日常運(yùn)維過(guò)程中,當(dāng)刪除一個(gè)大表時(shí)(如一個(gè)20 G的ibd文件的大表),在刪除這個(gè)大文件的過(guò)程中,文件系統(tǒng)IO達(dá)到峰值,持續(xù)好幾秒,這樣會(huì)導(dǎo)致文件系統(tǒng)無(wú)法響應(yīng)其他數(shù)據(jù)庫(kù)實(shí)例的IO請(qǐng)求,對(duì)上層應(yīng)用表現(xiàn)為數(shù)據(jù)庫(kù)無(wú)法響應(yīng)。
在有些業(yè)務(wù)中,如果有好幾秒數(shù)據(jù)庫(kù)沒(méi)有響應(yīng),就是很嚴(yán)重的事故。為了讓刪除大文件的IO更平滑,運(yùn)維人員總結(jié)出一系列的操作,以降低系統(tǒng)級(jí)不可用的風(fēng)險(xiǎn)。但這這些做法缺少統(tǒng)一的模式,以及操作上的不確定性。
TXSQL在內(nèi)核實(shí)現(xiàn)了異步刪除表的功能,通過(guò)自動(dòng)化的方式,減少人為操作中可能犯的錯(cuò)誤。其通過(guò)分離數(shù)據(jù)文件,將原有的數(shù)據(jù)文件脫離MySQL系統(tǒng),并建立后臺(tái)任務(wù),將文件的刪除轉(zhuǎn)化為文件的逐步回收,當(dāng)數(shù)據(jù)文件進(jìn)入低風(fēng)險(xiǎn)大小后,完成最后的刪除動(dòng)作。
這種分散的操作,極大的分?jǐn)偟南到y(tǒng)開銷,提供系統(tǒng)的可用度。對(duì)于用戶來(lái)說(shuō),可以通過(guò)簡(jiǎn)單的開關(guān)模式,動(dòng)態(tài)開啟或者關(guān)閉該功能,就可以使用TXSQL提供的該項(xiàng)功能,極大的避免起停服務(wù),導(dǎo)致對(duì)業(yè)務(wù)的影響。
(2)GTID復(fù)制功能擴(kuò)展
GTID模式下復(fù)制支持create as select,create/drop temporary table,同時(shí)能更新事務(wù)表和非事務(wù)表等語(yǔ)句。適用場(chǎng)景如下:
·CTAS操作頻繁場(chǎng)景,無(wú)法優(yōu)化CTAS為先建空表,再Insert的業(yè)務(wù)場(chǎng)景;
·大量使用臨時(shí)表場(chǎng)景;
·更新MyISAM表場(chǎng)景無(wú)法使用GTID問(wèn)題;
·內(nèi)核層級(jí)新增參數(shù)來(lái)控制開關(guān)。
(3)復(fù)制限速
在MySQL的主從之間,一般原生的是通過(guò)獲取node來(lái)訪問(wèn)主從復(fù)制,但這樣就會(huì)帶來(lái)一個(gè)問(wèn)題。就是在主從之間(也就是master和Slave之間)新建了一個(gè)實(shí)例,如果中斷時(shí)間比較長(zhǎng),而你的網(wǎng)絡(luò)剛開始恢復(fù)的時(shí)候,它會(huì)瞬間把你主從之間的帶寬給打滿,這可能會(huì)影響到其他一些正常的業(yè)務(wù)邏輯。
為了避免類似這樣的問(wèn)題,TXSQL提供了一個(gè)限速插件。這個(gè)插件在主從同步的時(shí)候,可以設(shè)置閾值。因此即便在這種情況下,也可以保證為業(yè)務(wù)應(yīng)用預(yù)留一定的帶寬。
在實(shí)現(xiàn)上,TXSQL采用對(duì)線上業(yè)務(wù)影響最小的Slave端限速的方案。該方案下,只需原地升級(jí)Slave,不會(huì)影響線上服務(wù),在確保不停服務(wù)的前提下,這個(gè)方案更容易被業(yè)務(wù)方接受。
實(shí)際的限流算法采用了經(jīng)典的流量管控算法—令牌桶的模式,該算法更適于流量不穩(wěn)定的網(wǎng)絡(luò)模式,讓流量更平滑,這種不穩(wěn)定的處理方式對(duì)于TXSQL所面臨的復(fù)雜應(yīng)用場(chǎng)景有更好的應(yīng)用,避免了前面所描述的可能的突發(fā)流量導(dǎo)致服務(wù)器的可用性降低。
(4)Redo log雙緩沖區(qū)
MySQL redo log是一個(gè)順序?qū)懙膯尉彌_區(qū),log_sys->mutex鎖資源競(jìng)爭(zhēng)激烈,在事務(wù)落盤的過(guò)程中對(duì)LSN相關(guān)的讀、寫都被堵塞,為了解決log_sys->mutex的鎖競(jìng)爭(zhēng)問(wèn)題,引入雙緩存機(jī)制&w_mutex鎖,在flush redo log的過(guò)程中釋放log_sys->mutex,繼續(xù)持有l(wèi)og_sys->w_mutex,從而堵塞寫,不堵塞LSN相關(guān)的讀操作,flush完成后釋放w_mutex;從而提升并發(fā)性,提升性能。
4.騰訊云MySQL設(shè)計(jì)理念
騰訊云的MySQL數(shù)據(jù)庫(kù)底座因?yàn)橛袃?nèi)核團(tuán)隊(duì)做支撐,并且在上層有非常強(qiáng)健完善的管控系統(tǒng),可以做HA、儲(chǔ)備切換、備份、遷移存儲(chǔ)、遷移升級(jí)等等的操作,這些一起組成了騰訊云數(shù)據(jù)庫(kù)的MySQL服務(wù)。
騰訊云數(shù)據(jù)庫(kù)的MySQL設(shè)計(jì)理念總結(jié)下來(lái),就是數(shù)據(jù)強(qiáng)一致,滿足客戶的高性能需求,在安全性方面也必須得到保障。還有就是云上數(shù)據(jù)庫(kù)的重要特性:具有良好擴(kuò)展性,可以快速進(jìn)行擴(kuò)容、增加實(shí)例,進(jìn)行縱向和橫向的擴(kuò)展以及便捷的運(yùn)維。
另外,騰訊云MySQL周邊也有很大的工具體系,比如和DTS數(shù)據(jù)遷移、智能管家DBbrain結(jié)合在一起,形成了一整套騰訊云數(shù)據(jù)庫(kù)服務(wù)。
騰訊云數(shù)據(jù)庫(kù)的架構(gòu)默認(rèn)是一主一備,但也支持一主兩備三節(jié)點(diǎn)金融版的架構(gòu)。在這個(gè)基礎(chǔ)上,我們還可以進(jìn)行擴(kuò)展只讀實(shí)例(下圖左),方便用戶讀寫分離,也可以擴(kuò)展災(zāi)備實(shí)例(下圖右),實(shí)現(xiàn)異地災(zāi)備,異地多中心的架構(gòu),形成完整健全的HA的切換,保證用戶在HA切換的同時(shí)地址不變更,數(shù)據(jù)也不會(huì)丟失。
三、騰訊云MySQL8.0行業(yè)場(chǎng)景
1.電商場(chǎng)景應(yīng)用
騰訊云在電商行業(yè)有非常多的客戶,電商客戶的需求和痛點(diǎn)我們體會(huì)得比較深。前不久6.18的時(shí)候騰訊云MySQL也支撐了很多電商的大促,其中秒殺是常見(jiàn)的場(chǎng)景。
秒殺發(fā)展到現(xiàn)在,其實(shí)已經(jīng)不只是電商場(chǎng)景在使用,其他比如搶紅包,春運(yùn)搶票等也屬于秒殺。
秒殺場(chǎng)景的特點(diǎn)有三高,分別是瞬時(shí)并發(fā)性高、數(shù)據(jù)一致性高和熱點(diǎn)更新頻度高,商品要頻繁進(jìn)行庫(kù)存加1或減1的操作,會(huì)給企業(yè)級(jí)數(shù)據(jù)庫(kù)造成巨大的壓力。大量的數(shù)據(jù)更新并發(fā)度,按照MySQL數(shù)據(jù)結(jié)構(gòu)和引擎的特點(diǎn)容易產(chǎn)生數(shù)據(jù)庫(kù)的行鎖等待,導(dǎo)致數(shù)據(jù)庫(kù)性能持續(xù)的下降。
騰訊云MySQL8.0針對(duì)電商場(chǎng)景秒殺進(jìn)行了專項(xiàng)優(yōu)化,幫助客戶任何秒殺的場(chǎng)景都可以穩(wěn)如泰山。
8.0電商場(chǎng)景里做的第一個(gè)優(yōu)化是熱點(diǎn)更新,熱點(diǎn)更新可以大幅度優(yōu)化對(duì)單行數(shù)據(jù)的頻繁更新,在控制臺(tái)一點(diǎn)就可以開啟熱點(diǎn)更新,內(nèi)核系統(tǒng)會(huì)自動(dòng)探測(cè)是否有單行熱點(diǎn)更新,如果有的話,會(huì)讓熱點(diǎn)更新的用戶線程排隊(duì)以減少大量的行鎖,以減少并發(fā)性能的下降。
如上圖所示,開啟熱點(diǎn)更新功能后,在高并發(fā)的情況下,MySQL性能有數(shù)十倍的性能提升。
第二個(gè)優(yōu)化是SQL限流。
大家知道,當(dāng)數(shù)據(jù)架構(gòu)上層的緩存(比如Redis)透?jìng)骱螅A康腟QL訪問(wèn)一下子涌入MySQL,會(huì)導(dǎo)致一些極端的現(xiàn)象,可能導(dǎo)致MySQL數(shù)據(jù)庫(kù)性能的急劇下降和連接數(shù)打滿。
騰訊云MySQL8.0的SQL限流功能,會(huì)針對(duì)性對(duì)超高并發(fā)度SQL進(jìn)行限流,避免MySQL系統(tǒng)性能下降或連接數(shù)打滿。該特性也集成到騰訊云數(shù)據(jù)庫(kù)智能管家DBbrain中,用戶可靈活進(jìn)行SQL限流的配置。
該項(xiàng)功能主要通過(guò)限制某些SQL語(yǔ)句的操作,來(lái)避免SQL語(yǔ)句使用不當(dāng)所導(dǎo)致的系統(tǒng)資源占用過(guò)大,導(dǎo)致系統(tǒng)整體性能下降或假死的情況。通過(guò)云上控制臺(tái)的簡(jiǎn)單配置,即可完成對(duì)指定限流SQL語(yǔ)句關(guān)鍵字的匹配以及限流方式,非常靈活便捷。
第三個(gè)優(yōu)化是多隊(duì)列線程池,因?yàn)橛卸嚓?duì)列的模型,可以超高并發(fā)下使用線程池技術(shù)讓MySQL性能不減,減少線程頻繁的銷毀造成的CPU切換。在大規(guī)模連接和復(fù)雜混合SQL模型下,保持MySQL持續(xù)穩(wěn)定。
通過(guò)騰訊云MySQL8.0的SQL限流、熱點(diǎn)更新和多隊(duì)列線程池三大技術(shù)功能保障,讓秒殺場(chǎng)景下MySQL數(shù)據(jù)庫(kù)持續(xù)穩(wěn)定運(yùn)行。
除了這三大優(yōu)化外,騰訊云MySQL還有很多企業(yè)級(jí)產(chǎn)品能力支撐電商行業(yè),比如老牌的功能:只讀實(shí)例,可以掛多個(gè)只讀實(shí)例進(jìn)行負(fù)載均衡,方便用戶讀寫分離。
另外還有置放群組功能,置放群組是一個(gè)分散部署,保障MySQL高可用性的產(chǎn)品功能。有客戶會(huì)擔(dān)心一臺(tái)物理機(jī)上部署的都是同一個(gè)客戶自己的MySQL實(shí)例,如果這臺(tái)機(jī)器掛了,那這個(gè)客戶的實(shí)例就會(huì)全部掛了。
通過(guò)置放群組功能可以把同一個(gè)客戶的多個(gè)MySQL實(shí)例水平分布到不同的物理機(jī)中去,這樣可以很好保障這個(gè)客戶的所有MySQL實(shí)例的可用性。
2.游戲場(chǎng)景應(yīng)用
游戲行業(yè)的特點(diǎn)首先是部署能力要快,游戲行業(yè)經(jīng)常的開服合服,一旦有服務(wù)器不活躍了就要開新的服。
二是游戲行業(yè)要求對(duì)數(shù)據(jù)庫(kù)回檔能力要求非常高,原因是有些游戲行業(yè)可能遇到數(shù)據(jù)道具的回溯(比如:遇到外掛或游戲異常)。
三是大型游戲是要出海的,講究全球同服,多地的數(shù)據(jù)要能夠同步,玩家要就近接入訪問(wèn),保障競(jìng)技公平性。不可能讓新加坡玩家訪問(wèn)廣州的服務(wù)器,這樣延時(shí)太大,游戲玩家也會(huì)投訴。
另外,游戲行業(yè)數(shù)據(jù)的存儲(chǔ)需求靈活多樣,傳統(tǒng)的MySQL存儲(chǔ)是二維表,每添加一個(gè)屬性就要加字段、修改字段,或者把字段刪除,這對(duì)游戲行業(yè)來(lái)說(shuō)并不友好。因?yàn)橛螒蛐袠I(yè)每一行數(shù)據(jù)結(jié)構(gòu)都可能不同,游戲行業(yè)有很多道具和玩家角色的需求,數(shù)據(jù)存儲(chǔ)特點(diǎn)上屬于schema-less架構(gòu)。
基于這樣幾個(gè)行業(yè)特點(diǎn),騰訊云MySQL8.0在JSON數(shù)據(jù)類型上進(jìn)行了擴(kuò)展,豐富了游戲業(yè)務(wù)上的靈活性和支持。比如玩家的道具、玩家的角色屬性都可以放一個(gè)JSON字段中去存儲(chǔ),同時(shí)提供豐富的JSON函數(shù)去讀取游戲?qū)傩缘臄?shù)據(jù)。
當(dāng)然,MySQL 8.0比其他的版本在加字段上也更友好,因?yàn)榧恿惺敲爰?jí)了,但是要修改一些字段的屬性肯定還是不如直接用JSON數(shù)據(jù)類型更加的方便。
二是騰訊云MySQL在回檔的基礎(chǔ)上強(qiáng)化了恢復(fù)功能,可以從物理備份里快速把備份克隆為一個(gè)新的實(shí)例,可以按時(shí)間點(diǎn)進(jìn)行克隆恢復(fù),這樣對(duì)游戲行業(yè)比較友好。開一個(gè)新的服務(wù),拓展一個(gè)新的同類型的游戲時(shí)候使用克隆實(shí)例功能,一鍵可以完成數(shù)據(jù)庫(kù)的拓載。
三是騰訊云MySQL 8.0提供跨可用區(qū)部署主備節(jié)點(diǎn)的功能,因?yàn)橛螒蛐袠I(yè)對(duì)高可用要求非常高,也有容災(zāi)切換的訴求,8.0主節(jié)點(diǎn)和備節(jié)點(diǎn)可以放在不同可用區(qū),主庫(kù)廣州三區(qū)、備庫(kù)在廣州四區(qū),即使三區(qū)整個(gè)可用區(qū)掛了也可以無(wú)縫的為游戲提供服務(wù)。
以上就是騰訊云MySQL 8.0對(duì)游戲行業(yè)的賦能。
3.金融場(chǎng)景應(yīng)用
金融行業(yè)最大的兩個(gè)訴求,一是數(shù)據(jù)一致性,一條數(shù)據(jù)也不能丟,因?yàn)橐粭l數(shù)據(jù)往往意味著大幾十萬(wàn)、幾百萬(wàn)金額的訂單。
二是金融行業(yè)需要高安全,金融行業(yè)不僅僅是對(duì)自身業(yè)務(wù)有安全訴求,同時(shí)也有監(jiān)管的需求,國(guó)家的銀監(jiān)會(huì)、保監(jiān)會(huì)會(huì)對(duì)金融行業(yè)有安全門檻設(shè)定,不然政策上首先就能把金融業(yè)務(wù)卡住。
我們針對(duì)金融場(chǎng)景也做了定制優(yōu)化,首先是TDE透明數(shù)據(jù)加密,結(jié)合云上KMS和CAM訪問(wèn)控制系統(tǒng)進(jìn)一步強(qiáng)化了數(shù)據(jù)安全的保障,用戶可以把自己的密鑰導(dǎo)入進(jìn)來(lái),也可以用云上密鑰。還可以區(qū)分根帳號(hào)、子帳號(hào),根帳號(hào)可以賦予子帳號(hào)不同的權(quán)限,比如賦予子帳號(hào)只能創(chuàng)建實(shí)例不能銷毀實(shí)例,只能下載備份不能刪除備份等。
另外,金融行業(yè)里面有很多財(cái)務(wù)對(duì)帳和分析統(tǒng)計(jì)的需求,金融報(bào)表很復(fù)雜,之前的MySQL做對(duì)帳的功能非常的煩瑣。
MySQL8.0提供便于數(shù)據(jù)分析的窗口函數(shù)和CETS公共表達(dá)式,可以在數(shù)據(jù)庫(kù)表里實(shí)現(xiàn)復(fù)雜的統(tǒng)計(jì)功能。只讀實(shí)例能用騰訊云MySQL 8.0完成復(fù)雜的統(tǒng)計(jì)需求,這對(duì)金融行業(yè)來(lái)說(shuō)也十分友好。
安全性方面更不用說(shuō),之前的騰訊數(shù)據(jù)庫(kù)5.7版本已經(jīng)滿足了需求,比如金融行業(yè)最基本的剛需是兩地三中心的架構(gòu),一主一備、跨可用區(qū)和搭建異地的災(zāi)備,部署騰訊云數(shù)據(jù)庫(kù)可以實(shí)現(xiàn)兩地三中心的架構(gòu),保障金融行業(yè)7*24業(yè)務(wù)的穩(wěn)定運(yùn)行。
騰訊云數(shù)據(jù)庫(kù)MySQL 8.0提供三節(jié)點(diǎn)(一主兩備)金融版,采用強(qiáng)同步復(fù)制模式,更快、更高、更穩(wěn)的金融企業(yè)級(jí)服務(wù)。
強(qiáng)同步復(fù)制需要一主兩從的架構(gòu),僅需其中一臺(tái)Slave成功執(zhí)行即可返回,避免了單臺(tái)Slave不可用影響Master上操作的問(wèn)題,提高了強(qiáng)同步復(fù)制集群的可用性和性能。
4.新零售場(chǎng)景
第四個(gè)場(chǎng)景,是這幾年很火的新零售的場(chǎng)景。比如智慧商超(家樂(lè)福)、智慧門店、大型的餐飲連鎖(麥當(dāng)勞)、和最近很火的叮咚到家都屬于新零售。
新零售的特點(diǎn)是有一個(gè)門店系統(tǒng),類似傳統(tǒng)的O2O,現(xiàn)在具像化成了新零售,線上線下結(jié)合形成門店的效應(yīng)。零售行業(yè)中也有會(huì)員制,如何通過(guò)會(huì)員的屬性達(dá)到會(huì)員數(shù)據(jù)于一體,整合新零售線上線下渠道實(shí)現(xiàn)營(yíng)銷一體化,是這些業(yè)務(wù)架構(gòu)的特點(diǎn)。
新零售場(chǎng)景下數(shù)據(jù)庫(kù)的特點(diǎn)如下:
·需要較高的彈性伸縮能力;
·需要高并發(fā)支持;
·需要數(shù)據(jù)化運(yùn)營(yíng)提升銷售、庫(kù)存、物流等效率。
典型的如商超,這個(gè)場(chǎng)景對(duì)數(shù)據(jù)庫(kù)也有一定的要求,新零售的首要要求是必須把業(yè)務(wù)中臺(tái)和數(shù)據(jù)后臺(tái)相結(jié)合,打破信息孤島。要去分析商圈和會(huì)員的數(shù)據(jù),建立很多后端的零售數(shù)據(jù)分析模型,以方便業(yè)務(wù)靈活的應(yīng)對(duì)。
針對(duì)這種場(chǎng)景,騰訊云MySQL 8.0推出了Cstore引擎功能,Cstore是列存型的引擎,可以實(shí)現(xiàn)高效的中臺(tái)數(shù)據(jù)分析和列式存儲(chǔ)。
傳統(tǒng)的InnoDB提供的是OLTP服務(wù)的存儲(chǔ)引擎,適用于事務(wù)密集型的業(yè)務(wù)場(chǎng)景。對(duì)于分析型OLAP的業(yè)務(wù)場(chǎng)景,InnoDB就無(wú)法勝任。
通過(guò)CSTORE,用戶可以完成大型數(shù)據(jù)的查詢與分析,可以適用于歷史存檔數(shù)據(jù)、日志數(shù)據(jù)、大數(shù)據(jù)、更新不頻繁的OLTP數(shù)據(jù)和數(shù)據(jù)倉(cāng)庫(kù)和分析處理,數(shù)據(jù)處理量達(dá)到PB級(jí)別。
在性能方面,通過(guò)高壓縮比、快速加載、針對(duì)性的查詢優(yōu)化這些技術(shù)實(shí)現(xiàn),向用戶提供高效的服務(wù),從而達(dá)到單節(jié)點(diǎn)可支持百億行記錄的秒級(jí)查詢。
TXSQL的列存儲(chǔ)可以達(dá)到10:1的壓縮比,通過(guò)減少磁盤空間的使用,實(shí)現(xiàn)大批量數(shù)據(jù)的秒級(jí)寫入和讀取。在已有MySQL查詢優(yōu)化的基礎(chǔ)上,利用多種形式的稀疏索引過(guò)濾數(shù)據(jù)實(shí)現(xiàn)高速的數(shù)據(jù)過(guò)濾于選擇。并利用多列并行處理的方式,高速完成數(shù)據(jù)的加載與處理。
除了前文提到的電商、游戲、金融、新零售行業(yè),騰訊云MySQL 8.0在其他行業(yè)也有著許多應(yīng)用,為包括交通、文創(chuàng)、教育行業(yè)賦能。我們也在積極推進(jìn)這些行業(yè)盡快升級(jí)到8.0版本,以適配更多優(yōu)秀的特性。
四、MySQL數(shù)據(jù)庫(kù)未來(lái)展望
最后想跟大家開一些腦洞,暢想一下未來(lái)的數(shù)據(jù)庫(kù)會(huì)怎樣的演進(jìn)。
1.云原生
關(guān)于騰訊云數(shù)據(jù)庫(kù)的未來(lái)展望,第一部分是云原生。誰(shuí)都不否認(rèn)最近十幾年IT技術(shù)上最大的變革是由云帶來(lái)的,而且這場(chǎng)變革的革命仍然在進(jìn)行。
數(shù)據(jù)庫(kù)的未來(lái)是云上原生出來(lái)的,因?yàn)樵粕系漠a(chǎn)品本身就很豐富,云上數(shù)據(jù)庫(kù)并不是孤島,云上專有網(wǎng)絡(luò)有VPC、存儲(chǔ)有COS、CBS等,主機(jī)有虛擬機(jī)CVM,還有各種數(shù)據(jù)安全產(chǎn)品,云數(shù)據(jù)庫(kù)都可以復(fù)用這些能力。
比如:數(shù)據(jù)庫(kù)備份可以存COS,數(shù)據(jù)庫(kù)可以部署在CVM,異地網(wǎng)絡(luò)可以用云聯(lián)網(wǎng)打通,負(fù)載均衡可以用CLB等。因此,未來(lái)的數(shù)據(jù)庫(kù)一定在云上,因?yàn)榻Y(jié)合了其他云上各種產(chǎn)品的能力。
功能的集合將不再局限于一個(gè)軟件包,以前用數(shù)據(jù)庫(kù)就是下個(gè)軟件包,DBA自己寫腳本去備份,去做HA,現(xiàn)在云上本身就有豐富的產(chǎn)品,也就是我們經(jīng)常說(shuō)的跨云產(chǎn)品之間的融合。
騰訊云數(shù)據(jù)庫(kù)也孵化出了CynosDB這樣的云原生數(shù)據(jù)庫(kù)。CynosDB是存儲(chǔ)和計(jì)算相分離的數(shù)據(jù)庫(kù),它解決了彈性的問(wèn)題。
傳統(tǒng)的MySQL在做彈性擴(kuò)展的時(shí)候,有一個(gè)痛點(diǎn),就是必須要拷數(shù)據(jù),增加一個(gè)副本的時(shí)候就得導(dǎo)入備份再追binlog,復(fù)制postion追上才算彈性擴(kuò)容完成。CynosDB存儲(chǔ)和計(jì)算分離架構(gòu),節(jié)點(diǎn)擴(kuò)容不需要再拷數(shù)據(jù),因?yàn)樗泄?jié)點(diǎn)都讀取的是共享存儲(chǔ)的數(shù)據(jù),共享存儲(chǔ)是多副本的,可以保證存儲(chǔ)的高可用。
上層的節(jié)點(diǎn)可以很快的擴(kuò)容,而且是秒級(jí)擴(kuò)容,CynosDB是真正解決MySQL彈性能力的數(shù)據(jù)庫(kù)架構(gòu),實(shí)現(xiàn)了極致的彈性。
另外,CynosDB確實(shí)也復(fù)用了云上面其他產(chǎn)品的能力,比如:底層存儲(chǔ)對(duì)CBS進(jìn)行了深度定制,RDMA網(wǎng)絡(luò)上的定制,以及復(fù)用計(jì)算節(jié)點(diǎn)虛擬化的能力等等。
2.超融合
二是超融合,以前大家講OLTP、OLAP數(shù)據(jù)庫(kù),超融合是把這些TP和AP的數(shù)據(jù)庫(kù)都統(tǒng)一起來(lái)。
以前要做一個(gè)數(shù)據(jù)倉(cāng)庫(kù),可能要從很多MySQL源庫(kù):訂單庫(kù)、用戶庫(kù)和庫(kù)存庫(kù)中搞一個(gè)多源復(fù)制,多個(gè)源端復(fù)制到匯總分析庫(kù)里面,這個(gè)匯總庫(kù)就是分析型的OLAP數(shù)據(jù)庫(kù)。
這是最早的超融合,TP和AP數(shù)據(jù)庫(kù)是分離,通過(guò)復(fù)制打通。當(dāng)然,系統(tǒng)復(fù)雜點(diǎn)的話,中間可能還有數(shù)據(jù)清洗、數(shù)據(jù)映射(ETL的部分)。
這種超融合架構(gòu)騰訊云數(shù)據(jù)庫(kù)也已經(jīng)實(shí)現(xiàn),比如:我們可以從MySQL InnoDB引擎復(fù)制到MySQL Cstore引擎,實(shí)現(xiàn)TP到AP之間的復(fù)制鏈路打通。
未來(lái)的數(shù)據(jù)庫(kù)不用做這么多煩瑣的事情,而是把OLAP、OLTP融合在一起形成一個(gè)數(shù)據(jù)庫(kù),中間省了數(shù)據(jù)鏈路的復(fù)制,真正的超融合的方向在一個(gè)表里面,一個(gè)數(shù)據(jù)庫(kù)里面既可以支持行存也可以支持列存的數(shù)據(jù)。
對(duì)于業(yè)務(wù)層的使用來(lái)說(shuō),少一個(gè)系統(tǒng)意味著更統(tǒng)一的體驗(yàn)和更低的學(xué)習(xí)門檻和更小改造成本,不要低估統(tǒng)一帶來(lái)的力量。
3.自治
最后要說(shuō)的是數(shù)據(jù)庫(kù)自治也就是未來(lái)的智能運(yùn)維,智能運(yùn)維現(xiàn)在還處在比較初級(jí)的階段:智能診斷上,比如:推薦增加缺失的索引,推薦SQL優(yōu)化建議等。
當(dāng)人工智能和AI算法到達(dá)一定程度的時(shí),并且給數(shù)據(jù)庫(kù)的診斷系統(tǒng)喂了大量的數(shù)據(jù)后,是能夠做到自優(yōu)化、自診斷、自恢復(fù)和自運(yùn)維的,至少可以把數(shù)據(jù)庫(kù)常見(jiàn)的異常問(wèn)題自行閉環(huán)搞定,這也是我認(rèn)為未來(lái)的數(shù)據(jù)庫(kù)智能的方向。
現(xiàn)在騰訊云上有數(shù)據(jù)庫(kù)智能管家DBbrain,也正在往這個(gè)方向走,DBbrain產(chǎn)品里有一個(gè)CDBTune的項(xiàng)目,也就是智能調(diào)參,我們正在不斷的給CDBTune喂大量的MySQL參數(shù)優(yōu)化數(shù)據(jù),修正和量化參數(shù)優(yōu)化模型,讓它變的更智能、更準(zhǔn)確。
4.未來(lái)的未來(lái)
前文提到的三個(gè)方面主要聚焦在短期趨勢(shì)上,現(xiàn)在還可以和大家再延展一下,未來(lái)的未來(lái)是什么樣的?
云上技術(shù)發(fā)展成熟以后,數(shù)據(jù)庫(kù)一定可以做到靈活的彈性調(diào)度。彈性這個(gè)詞并僅僅指彈性的拓展,不只是能夠很快的升級(jí)、添加節(jié)點(diǎn),這只是一個(gè)狹隘的彈性。
真正的極致彈性是在此基礎(chǔ)上加上“調(diào)度”,我們做產(chǎn)品的同時(shí)也在思考,未來(lái)的數(shù)據(jù)庫(kù)能不能自動(dòng)識(shí)別工作負(fù)載,自動(dòng)進(jìn)行布控。比如能預(yù)感到峰值即將來(lái)臨,自動(dòng)的采購(gòu)機(jī)器,對(duì)熱數(shù)據(jù)創(chuàng)建更多副本并重分布數(shù)據(jù),提前擴(kuò)容。在業(yè)務(wù)高峰過(guò)去后,自動(dòng)回收機(jī)器進(jìn)行縮容。
未來(lái)數(shù)據(jù)庫(kù)是否能夠感知業(yè)務(wù)特點(diǎn),根據(jù)訪問(wèn)特點(diǎn)決定分布。比如前文談到的游戲行業(yè)里的全球同服,數(shù)據(jù)帶有明顯的地理特征,新加坡的業(yè)務(wù)一定要部署新加坡的數(shù)據(jù)庫(kù)節(jié)點(diǎn),此時(shí)系統(tǒng)將自動(dòng)的將數(shù)據(jù)的地理特征在不同的數(shù)據(jù)中心放置。
另外數(shù)據(jù)庫(kù)能不能感知查詢的類型和訪問(wèn)頻度,從而自動(dòng)決定不同類型數(shù)據(jù)的存儲(chǔ)介質(zhì)?例如:將冷數(shù)據(jù)自動(dòng)轉(zhuǎn)移到S3之類比較便宜的存儲(chǔ),熱數(shù)據(jù)放在高配的閃存上,高效的分配資源,讓企業(yè)的成本降到最低,這也是我們一直在探索做的事情。
5.新硬件的顛覆
最后說(shuō)下硬件對(duì)數(shù)據(jù)庫(kù)的影響,大家可以回顧下數(shù)據(jù)庫(kù)發(fā)展歷史浪潮,最早以前是機(jī)械硬盤(SATA盤),那時(shí)候IOPS幾百上千是很了不起的事情了。
現(xiàn)在來(lái)看SSD,NVME SSD這些存儲(chǔ)介質(zhì),IOPS幾十萬(wàn),上百萬(wàn)都不是問(wèn)題,硬件一定是能夠去顛覆改變數(shù)據(jù)庫(kù)行業(yè)格局的,
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)理念,寫數(shù)據(jù)都是先寫內(nèi)存,然后再刷臟頁(yè)刷新到數(shù)據(jù)文件,中間通過(guò)binlog和redo log這樣的機(jī)制確保事務(wù)一致性。為什么都這樣做,就是因?yàn)樵缙谟脖PIOPS慢,吞吐量低。
假如未來(lái)硬盤IO能力達(dá)到和內(nèi)存相媲美的能力,甚至比內(nèi)存更快,這個(gè)時(shí)候數(shù)據(jù)庫(kù)會(huì)是怎樣的架構(gòu)?大家也可以去思考下,可能buffer pool這樣的組件都會(huì)被取締和顛覆。
當(dāng)然,硬件技術(shù)不像軟件技術(shù)那么快,會(huì)有一個(gè)迭代的周期,但是值得我們期待。
Q&A
Q:數(shù)據(jù)庫(kù)回檔用的是數(shù)據(jù)庫(kù)備份+日志,還是有類似oracle那樣的flashback功能?能快速查詢歷史某個(gè)時(shí)間點(diǎn)的數(shù)據(jù)?
A:目前騰訊云數(shù)據(jù)庫(kù)回檔和克隆,用的都是數(shù)據(jù)備份加追日志的機(jī)制。而且我們現(xiàn)在的回檔都是基于物理備份。但這小伙伴問(wèn)了一點(diǎn)說(shuō)會(huì)不會(huì)未來(lái)有這種Oracle的flashback功能?我們正在做這樣的內(nèi)核研發(fā)。這個(gè)功能就是閃回,未來(lái)會(huì)去實(shí)現(xiàn)這樣的功能,并且把它產(chǎn)品化,也請(qǐng)小伙伴多關(guān)注一下。
針對(duì)克隆和回檔所延展另外一個(gè)問(wèn)題,就是如何能快速查詢某個(gè)歷史時(shí)間點(diǎn)的數(shù)據(jù)?其實(shí)我們也有考慮到,實(shí)際上很多用戶在使用回檔和克隆功能的時(shí)候,都會(huì)遇到一個(gè)問(wèn)題:「不知道回檔到哪個(gè)時(shí)間點(diǎn)」,不可能每個(gè)時(shí)間點(diǎn)都去回檔,耗時(shí)耗力。
所以我們后面會(huì)推出一個(gè)功能,針對(duì)備份池可以查詢它有什么樣的數(shù)據(jù),這樣就可以知道這個(gè)備份池到底缺失什么樣的數(shù)據(jù),從而解決這一問(wèn)題。
Q:實(shí)現(xiàn)國(guó)內(nèi)與歐洲數(shù)據(jù)共享,需要選擇不同地區(qū)的數(shù)據(jù)庫(kù)嗎?
A:目前騰訊云MySQL實(shí)現(xiàn)數(shù)據(jù)共享,還是需要MySQL的復(fù)制功能。以游戲行業(yè)全球同服為例,你的主實(shí)例可能在上海,這時(shí)你可以選擇去搭建一個(gè)災(zāi)備實(shí)例,比如選在歐洲的法蘭克福,這樣你的歐洲業(yè)務(wù)就可以就近訪問(wèn)實(shí)現(xiàn)數(shù)據(jù)共享。從目前架構(gòu)來(lái)看,還是需要通過(guò)數(shù)據(jù)多節(jié)點(diǎn)來(lái)實(shí)現(xiàn)共享。
Q:CynosDB和TDSQL是什么關(guān)系?
A:實(shí)際上現(xiàn)在CynosDB它是一個(gè)云原生集中式共享存儲(chǔ)的數(shù)據(jù)庫(kù),底層的數(shù)據(jù)文件都是落在共享存儲(chǔ)里面,上層的計(jì)算節(jié)點(diǎn)服務(wù)的都是這一層共享數(shù)據(jù)。
當(dāng)然這里面會(huì)有很多保證數(shù)據(jù)一致性的算法和機(jī)制,它可以實(shí)現(xiàn)快速開啟計(jì)算節(jié)點(diǎn),快速獲取計(jì)算節(jié)點(diǎn)所需的CPU、內(nèi)存資源,做到秒開節(jié)點(diǎn)。
而TDSQL是分片分布式架構(gòu)。比如有一個(gè)32 T的數(shù)據(jù)庫(kù)水平分布4個(gè)節(jié)點(diǎn)上面,每個(gè)節(jié)點(diǎn)有8 T的數(shù)據(jù),這4個(gè)節(jié)點(diǎn)都是在不同的物理機(jī)器上,它要讀取所有的數(shù)據(jù)的時(shí)候會(huì)把這4個(gè)節(jié)點(diǎn)數(shù)據(jù)都讀取上來(lái),由中間代理的proxy去匯總。
所以說(shuō)CynosDB和TDSQL是兩款完全不同的產(chǎn)品,它們的架構(gòu)一個(gè)是共享存儲(chǔ)架構(gòu),一個(gè)是分片分布式的架構(gòu)。
我認(rèn)為未來(lái)這種統(tǒng)一的數(shù)據(jù)庫(kù)趨勢(shì)會(huì)比分布式的更大一些,分布式現(xiàn)在用得很廣,但從我們的經(jīng)驗(yàn)來(lái)看,分布式會(huì)增加系統(tǒng)復(fù)雜度和開銷。
因?yàn)榉植际揭院?,如何把這些數(shù)據(jù)都匯總?性能怎么去保障?怎么管理proxy?怎樣做到高可用?怎么把握分布式事務(wù)的一致性......這些都是架構(gòu)上需要考慮的問(wèn)題。
當(dāng)然我不是否定分布式架構(gòu),分布式架構(gòu)的應(yīng)用場(chǎng)景還是非常多的,我只是覺(jué)得在未來(lái)它可能會(huì)增加客戶的一些負(fù)擔(dān)。總的來(lái)說(shuō)這兩種戰(zhàn)略各有優(yōu)點(diǎn),各有不同特點(diǎn),主要看看適用的產(chǎn)品和業(yè)務(wù)。
Q:怎么防治刪庫(kù)跑路問(wèn)題?
A:怎么防治刪庫(kù)跑路,這實(shí)際上是一個(gè)安全問(wèn)題。如果你使用的是云上的數(shù)據(jù)庫(kù),因?yàn)樵粕蠑?shù)據(jù)庫(kù)是有SLA和安全承諾保障的,數(shù)據(jù)如有丟失,云廠商會(huì)賠付。
但我猜想你的問(wèn)題是想問(wèn):在自建的數(shù)據(jù)庫(kù)中心怎樣防止刪庫(kù)跑路?首先可以參考云上產(chǎn)品的設(shè)計(jì)思路,第一點(diǎn)是做備份。一定要有一個(gè)健全的備份機(jī)制和備份中心,然后備份中心要和現(xiàn)在的數(shù)據(jù)庫(kù)實(shí)例隔開,備份不能和數(shù)據(jù)庫(kù)實(shí)例在同一臺(tái)服務(wù)器上。因?yàn)槿绻@臺(tái)物理機(jī)掛了,那么實(shí)例和備份就都沒(méi)了,所以一定要選擇第三方備份中心。
第二點(diǎn)就是要搭建容災(zāi)體系,比如前文提到的金融行業(yè)兩地三中心架構(gòu),實(shí)際上在云下自建環(huán)境也可以實(shí)現(xiàn),不過(guò)成本會(huì)更高,需要去聘請(qǐng)專業(yè)的DBA搭建和租IDC機(jī)房等。
另一點(diǎn)就是權(quán)限要避免集中到一個(gè)人或者一個(gè)團(tuán)隊(duì)手中,例如騰訊云就可以利用CAM功能把根賬號(hào)、子賬號(hào)權(quán)限區(qū)分開。備份的管理權(quán)限和實(shí)例的管理權(quán)限也不能給同一個(gè)人或同一個(gè)團(tuán)隊(duì),避免一個(gè)人可能把所有的數(shù)據(jù)、災(zāi)備中心、備份中心都?xì)У簦砸侄沃?/span>
Q:線程池的線程數(shù)可以動(dòng)態(tài)增長(zhǎng)嗎?可以配置動(dòng)態(tài)增長(zhǎng)的最大線程數(shù)嗎?
A:線程池的線程數(shù)可以動(dòng)態(tài)增長(zhǎng),我們也可以去分配多個(gè)隊(duì)列,而且我們希望這個(gè)線程能夠靈活控制數(shù)量,同時(shí)可以配置動(dòng)態(tài)增長(zhǎng)的最大線程數(shù)。