80后聊架構(gòu):3小時(shí)搞透數(shù)據(jù)庫(kù)擴(kuò)展性架構(gòu)實(shí)踐 | 架構(gòu)師之路
有看了短視頻的同學(xué)吐槽:“講了這么多scalability理論,也不知道究竟有什么用”。今天就和大家聊聊scalability理論,在數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)上的實(shí)踐。
我還是那句話:思路比結(jié)論重要。
最早的數(shù)據(jù)庫(kù)都是單機(jī)的,其最大的痛點(diǎn)是啥?
無(wú)法線性擴(kuò)展。
磁盤(pán)能力無(wú)法線性擴(kuò)展,內(nèi)存能力無(wú)法線性擴(kuò)展,計(jì)算能力無(wú)法線性擴(kuò)展。
架構(gòu)師們稱之為“Shared Everything”架構(gòu)。
如上圖所示,DISK/MEM/CPU 都耦合在一個(gè)DBMS進(jìn)程內(nèi),必須部署在一臺(tái)服務(wù)器上,完全處于競(jìng)爭(zhēng)態(tài),無(wú)法線性擴(kuò)展,并行處理較差。
數(shù)據(jù)庫(kù)單機(jī)部署,就是典型的“Shared Everything”架構(gòu)。
如何來(lái)提升系統(tǒng)的并行能力呢?
最容易想到的,就是把無(wú)狀態(tài)的邏輯計(jì)算部分,從DBMS進(jìn)程內(nèi)拆分出來(lái),做成可擴(kuò)展的微服務(wù)集群,實(shí)現(xiàn)“計(jì)算與存儲(chǔ)分離”。
如上圖所示:
- CPU邏輯計(jì)算拆分出了獨(dú)立的進(jìn)程,可以集群部署,能夠線程擴(kuò)展;
- DISK/MEM 仍耦合在一個(gè)進(jìn)程內(nèi),仍處于競(jìng)爭(zhēng)態(tài),無(wú)法線性擴(kuò)展;
Oracle Rac,就是典型的“Shared Disk”架構(gòu),核心思路是“計(jì)算與存儲(chǔ)分離”。
存儲(chǔ)部分磁盤(pán)IO仍有集中的資源競(jìng)爭(zhēng),還有沒(méi)有進(jìn)一步的優(yōu)化空間呢?
最容易想到的,就是把數(shù)據(jù)打散,分布到不同的數(shù)據(jù)庫(kù)實(shí)例上,每部分?jǐn)?shù)據(jù)享有單獨(dú)的資源。
如上圖所示:
- 把整體數(shù)據(jù)存儲(chǔ)分為了N份,每份之間沒(méi)有交集;
- 每份數(shù)據(jù)的 DISK/MEM/CPU 都在一個(gè)DBMS進(jìn)程內(nèi),部署在一臺(tái)服務(wù)器上;
- 每份數(shù)據(jù)的資源之間的沒(méi)有競(jìng)爭(zhēng);
沒(méi)錯(cuò),這就是“水平切分”,它是典型的”Shared Nothing”架構(gòu)。
稍作總結(jié),數(shù)據(jù)庫(kù)擴(kuò)展性scalability架構(gòu):
- Shared Everything:數(shù)據(jù)庫(kù)單機(jī)系統(tǒng),資源競(jìng)爭(zhēng);
- Shared Disk:Oracle Rac,計(jì)算與存儲(chǔ)分離;
- Shared Nothing:水平切分,復(fù)制集群,資源完全隔離;
補(bǔ)充一句,這三類架構(gòu)并沒(méi)有解決Availability與Consistency相關(guān)的問(wèn)題,這兩類問(wèn)題是通過(guò)其它架構(gòu)方案解決的,后面再講。