1. 程式人生 > 其它 >讀寫分離 & 快取 & 水平切分

讀寫分離 & 快取 & 水平切分

一、讀寫分離

1、什麼是讀寫分離

讀寫分離其實就是將資料庫分為了主從庫,一個主庫用於寫資料,多個從庫完成讀資料的操作,主從庫之間通過某種機制進行資料的同步,是一種常見的資料庫架構。

  • 主庫:提供寫服務的資料庫。

  • 從庫:提供讀服務的資料庫。

  • 主從之間:通過某種機制同步資料,比如MySQLbinlog

  • 分組:一組從同步叢集。

2、分組架構解決的問題

大多數網際網路業務,往往讀多寫少,這時候,資料庫的讀會首先稱為資料庫的瓶頸,這時,如果我們希望能夠線性的提升資料庫的讀效能,消除讀寫鎖衝突從而提升資料庫的寫效能,那麼就可以使用分組架構(即讀寫分離架構)。用一句話概括,讀寫分離是用來解決資料庫的讀效能瓶頸的,在資料庫無法勝任當前的讀要求時,就可以進行讀寫分寫,通過增加從庫線性提升系統讀效能。

3、讀寫分離的不適用性

在網際網路的應用場景中,常常資料量大、併發量高、高可用要求高、一致性要求高,如果使用讀寫分離,就需要注意這些問題:

  • 資料庫連線池要進行區分,哪些是讀連線池,哪個是寫連線池,研發的難度會增加。

  • 為了保證高可用,讀連線池要能夠實現故障自動轉移。

  • 潛在主從一致性問題。

二、快取

快取,也是網際網路中常常使用到的一種架構方式,同讀寫分離不同,讀寫分離是通過多個讀庫,分攤了資料庫讀的壓力,而儲存則是通過快取的使用,減少了資料庫讀的壓力。他們沒有誰替代誰的說法,但是,如果在快取讀寫分離之間進行二選一時,還是應該首先考慮快取

快取的應用場景:

  • 如果面臨的是讀效能瓶頸

    問題,增加快取可能來的更直接,更容易一點。

  • 關於成本,從庫的成本比快取高了很多。

  • 對於雲上的架構,主庫提供高可用服務,從庫不提供高可用服務。

這幾類場景就建議使用快取架構來加強系統讀效能,代替資料庫主從分離架構。當然快取架構的潛在問題:如果快取掛了,流量全部壓到資料庫上,資料庫會雪崩;同樣快取會有快取穿透、快取一致、快取雪崩、快取併發等問題。

三、水平切分

1、水平切分概念

水平切分,也是一種常見的資料庫架構,一般來說:

  • 每個資料庫之間沒有資料重合,沒有類似binlog同步的關聯。

  • 所有資料並集,組成全部資料。

  • 會用某些演算法,來完成資料分割,例如取模運算。

一個水平切分急群眾的每個資料庫,通常稱為一個分片。

2、水平切分解決的問題

大部分的網際網路業務,資料量都非常大,單庫容量最容易成為瓶頸,當單庫的容量成為了瓶頸,我們希望提高資料庫的寫效能,降低單庫容量的話,就可以採用水平切分了。

四、小結

  1. 讀寫分離,解決資料庫讀效能瓶頸問題;

  2. 水平切分,解決資料庫資料量大問題;

  3. 對於大資料量、高併發量、高可用要求、高一致性的網際網路業務,微服務快取架構,可能比讀寫分離架構更加合適。