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