系統架構解析-讀寫分離,水平切分及快取架構對比
阿新 • • 發佈:2018-12-24
最近在研究一些系統架構方案,學習到讀寫分離的時候,對於讀寫分離應用場景有了一些自己的理解:
一. 讀寫分離
1. 什麼是資料庫讀寫分離
首先我們看一個讀寫分離架構圖:
讀寫分離就是:一主多從,讀寫分離,主動同步,是一種常見的資料庫架構,一般來說:
- 主庫:提供資料庫寫服務;
- 從庫:提供資料庫讀服務;
- 主從之間:通過某種機制同步資料,比如MySOL的binlog
2. 分組架構能夠解決的問題
在大部分網際網路業務場景中,讀操作的比例遠遠大於寫操作,資料庫的讀往往最先成為資料庫的新能瓶頸,如果想要完成下面的目標:
- 線性提升資料庫讀效能;
- 通過消除讀寫鎖衝突提升資料庫寫效能
二. 水平切分
1. 水平切分
水平切分,也是一種常見的資料庫架構,一般來說:
- 每個資料庫之間沒有資料重合,沒有類似binlog同步的關聯;
- 所有資料並集,組成全部資料;
- 會用某些演算法,來完成資料分割,例如取模運算
2. 水平分片架構解決的問題
大部分網際網路業務資料量很大,單庫容量容易稱為瓶頸,如果希望解決下面的問題:- 線性降低單庫資料容量;
- 線性提升資料庫寫效能
三 讀寫分離的不適用性
對於網際網路,大資料量、高併發量、高可用性、高一致性、前段面向使用者的業務場景,如果資料庫讀寫分離:- 資料庫連線池需要區分:讀連線池、寫連線池;
- 如果要保證高可用性,讀連線池要實現故障自動轉移;
- 有潛在的主從一致性問題。
四. 快取架構
快取的架構圖如上圖,應用場景包括:- 如果面臨的是“讀效能瓶頸”問題,增加快取可能來的更直接,更容易一點;
- 關於成本,從庫的成本比快取高了很多;
- 對於雲上的架構,主庫提供高可用服務,從庫不提供高可用服務
五.小結
- 讀寫分離,解決“資料庫讀效能瓶頸”問題;
- 水平切分,解決“資料庫資料量大”問題;
- 對於網際網路大資料量、高併發量、高可用要求、高一致性、前段面向使用者的應用場景,微服務快取架構,可能比讀寫分離架構更加合適。