分庫(kù)分表,可能真的要退出歷史舞臺(tái)了!
即使是不懂編程的玩家,在對(duì)比 NAS 的時(shí)候,也會(huì)兩眼放光,考慮很多因素,比如 RAID 級(jí)別、速度、易用程度等。作為時(shí)時(shí)刻刻與代碼打交道的我們,更需要關(guān)注數(shù)據(jù)的存取問(wèn)題。
一開(kāi)始,開(kāi)箱即用的 MySQL,一定是企業(yè)的首選。不僅僅因?yàn)橛玫娜硕啵匾氖巧鷳B(tài)成熟。要工具有工具,要人有人。對(duì)于老板來(lái)說(shuō),員工看著不爽,可以隨時(shí)辭退,是一個(gè)非常理想的狀態(tài)。
但是,沒(méi)有胸懷的老板,干的一定不會(huì)長(zhǎng)久,因?yàn)槿绻虅?wù)會(huì)吹、老板會(huì)忽悠,業(yè)務(wù)會(huì)飛速發(fā)展(雖然現(xiàn)在這種機(jī)會(huì)比較少了)。對(duì)于 MySQL 來(lái)說(shuō),很快就會(huì)遇到問(wèn)題。
這個(gè)時(shí)候,就需要一些比只會(huì)用 MySQL 級(jí)別高一些的人才,來(lái)配合老板圓夢(mèng)。
是時(shí)候了,由單機(jī) MySQL 向分布式發(fā)展了。
單機(jī) MySQL 面臨很多問(wèn)題。
單表太大,比如超過(guò) 500w,查詢就非常吃力 單庫(kù)太大,各種資源告急 讀請(qǐng)求太高,嚴(yán)重影響寫(xiě)請(qǐng)求
對(duì)此,一堆概念也是騰空而出,比如分庫(kù)分表、讀寫(xiě)分離等。
很長(zhǎng)時(shí)間以來(lái),國(guó)內(nèi)互聯(lián)網(wǎng)的做法普遍是采用加入一個(gè)中間件的方式來(lái)解決,但隨著分布式數(shù)據(jù)庫(kù)的技術(shù)越來(lái)越成熟,這些魔法逐漸下沉到它本應(yīng)該解決的層面--數(shù)據(jù)庫(kù)實(shí)現(xiàn)層。
留給分庫(kù)分表技術(shù)的時(shí)間,已經(jīng)不多了,它的存量市場(chǎng)越來(lái)越少了。分庫(kù)分表技術(shù),退出歷史舞臺(tái),也是遲早的事情了。
解決上面三個(gè)單機(jī) MySQL 問(wèn)題,有很多種切入層面。比如,你簡(jiǎn)單的在 MyBatis 或者 JPA 之上使用 AOP 或者攔截器封裝一層,也可以實(shí)現(xiàn),這也是最傻的方式。
再進(jìn)一步,就可以采用在 JDBC 之上的驅(qū)動(dòng)層來(lái)實(shí)現(xiàn),把分庫(kù)分表的路由維護(hù)在內(nèi)存里,通過(guò)重寫(xiě)的 DataSource、Connection、Statment、ResultSet等,對(duì)業(yè)務(wù)進(jìn)行無(wú)侵入的改進(jìn)。但可惜的是,我們還必須要維護(hù)與邏輯表相對(duì)應(yīng)的物理表,而且功能也是閹割的,不確定性依然不小。更要命的是,JDBC 只支持 Java,對(duì)于某些公司來(lái)說(shuō),就非常的不適用。
再就是中間件的傳統(tǒng)模式,Proxy。把自己偽裝成一個(gè)MySQL Server,接受 Client 的請(qǐng)求。至于它后面怎么去操作真實(shí)的數(shù)據(jù)庫(kù),你都不需要知道。但 Proxy 本身也是一套服務(wù),你有運(yùn)維成本在里面,同時(shí)功能依然是閹割的。
框架層,驅(qū)動(dòng)層,代理層,在過(guò)去很長(zhǎng)一段時(shí)間里,有無(wú)數(shù)的互聯(lián)網(wǎng)公司前赴后繼的試水,從 TDDL、Cobar,到 MyCat、ShardingSphere,各種層面的中間件也是層出不窮。但最近幾年,這種爭(zhēng)相斗艷的場(chǎng)面逐漸不再,到最后剩下來(lái)的,也就ShardingSphere這一枝獨(dú)秀了。
是問(wèn)題不存在了么?不,正好相反,問(wèn)題越來(lái)越嚴(yán)重。并不是問(wèn)題消失了,而是它被轉(zhuǎn)化成其他解決方式了。
拋開(kāi)關(guān)系型數(shù)據(jù)庫(kù)不說(shuō),很久之前,類(lèi)似于 ElasticSearch、Cassandra這樣的 NoSQL 存儲(chǔ),分片和副本的概念,就已經(jīng)非常成熟了,而且它們是內(nèi)置的,并不需要 DBA 去人工維護(hù)它們的物理位置。
對(duì)于關(guān)系型數(shù)據(jù)庫(kù)來(lái)說(shuō),走向分布式也終將成為必然。隨著 Raft 等協(xié)議應(yīng)用越來(lái)越廣泛,分布式數(shù)據(jù)庫(kù)的可靠性也逐漸得到了保證。如果你以前因?yàn)槭聞?wù)問(wèn)題而拒絕采用某些 NoSQL 產(chǎn)品,那么如今完全兼容 MySQL 的分布式數(shù)據(jù)庫(kù),你沒(méi)有理由再說(shuō) No。
云廠商,直接提供了像Aurora、PolarDB之類(lèi)的MySQL增強(qiáng),更有類(lèi)似 TiDB、OceanBase 這樣純粹的分布式數(shù)據(jù)庫(kù),越來(lái)越多的業(yè)務(wù)走向了這個(gè)終途。當(dāng)你的團(tuán)隊(duì)加班加點(diǎn)驗(yàn)證著分庫(kù)分表中間件的時(shí)候,卻發(fā)現(xiàn)其實(shí)換個(gè)兼容的存儲(chǔ)就能玩得轉(zhuǎn),你會(huì)怎么選,簡(jiǎn)直不用再多說(shuō)。
當(dāng)然,一旦你選用了分布式數(shù)據(jù)庫(kù),以前的 DBA 經(jīng)驗(yàn)可能就不管用了,比如說(shuō)索引及其二級(jí)索引。你的團(tuán)隊(duì)不得不學(xué)習(xí)新的知識(shí),來(lái)應(yīng)對(duì)分布式環(huán)境。
但這些都是陣痛,長(zhǎng)遠(yuǎn)看來(lái),分布式數(shù)據(jù)庫(kù)是趨勢(shì),而分庫(kù)分表中間件只能吃存量。
當(dāng)你的業(yè)務(wù)有了常年累積的復(fù)雜數(shù)據(jù),你可能會(huì)采用復(fù)雜的分庫(kù)分表組件,但如果你的業(yè)務(wù)比較新,可預(yù)見(jiàn)的未來(lái)會(huì)有大量數(shù)據(jù),那一個(gè)分布式數(shù)據(jù)庫(kù)可能是最合適的。
分庫(kù)分表中間件并不是消失了。它搖身一變,變成了分布式數(shù)據(jù)庫(kù)的一部分。
你可能會(huì)聽(tīng)到很多切到分布式數(shù)據(jù)庫(kù),又從分布式數(shù)據(jù)庫(kù)切回到 MySQL 的案例,這屬于想吃螃蟹但并沒(méi)有吃到。目前來(lái)看,分布式數(shù)據(jù)庫(kù)越來(lái)越穩(wěn)定,生態(tài)建設(shè)也越來(lái)越好。而分庫(kù)分表,則屬于存量業(yè)務(wù),終將會(huì)退出歷史的舞臺(tái)。
程序汪資料鏈接
程序汪接的7個(gè)私活都在這里,經(jīng)驗(yàn)整理
Java項(xiàng)目分享 最新整理全集,找項(xiàng)目不累啦 07版
堪稱(chēng)神級(jí)的Spring Boot手冊(cè),從基礎(chǔ)入門(mén)到實(shí)戰(zhàn)進(jìn)階
臥槽!字節(jié)跳動(dòng)《算法中文手冊(cè)》火了,完整版 PDF 開(kāi)放下載!
臥槽!阿里大佬總結(jié)的《圖解Java》火了,完整版PDF開(kāi)放下載!
字節(jié)跳動(dòng)總結(jié)的設(shè)計(jì)模式 PDF 火了,完整版開(kāi)放下載!
歡迎添加程序汪個(gè)人微信 itwang009 進(jìn)粉絲群或圍觀朋友圈

