資料庫讀寫分離中間件——ShardingSphere
- 一、ShardingSphere作用
- 二、ShardingSphere實作程序
- 三、集群的資料庫
- 四、宕機問題
- 五、主從資料庫的一些問題
一、ShardingSphere作用
ShardingSphere是一個用在資料庫里的中間件,不像阿里的mycat配置很多還不更新,它不但配置很少,而且功能強大,
我們本來的資料庫,一般我們自己寫專案時,可能就會用到一個資料庫,又是讀又是寫,再深的話頂多我們再為我們的專案配一套主從資料庫,寫到主資料庫,同步到從資料庫,這個操作實作的功能其實并不多,感覺就是一個備份的作用,
但是實際開發中,程式員會通過配置ShardingSphere中間件(一部分公司用這個)來為資料庫分攤壓力,進行讀寫分離的操作,即“讀”等無關資料庫資料修改的操作從從資料庫進行,“增刪改”等資料庫資料修改的操作從主資料庫進行,
二、ShardingSphere實作程序
首先,若沒有添加這個資料庫中間件,那么對于讀和寫的操作,不會有一個根據讀寫去自動判斷從哪個資料庫進行操作的操作,仍然和從前一樣,讀寫都從唯一的資料庫進行操作,那么這個資料庫分出個主從有什么意義呢?
所以必須加上中間件,加上了這個資料庫中間件,對于程式性能等才有幫助意義,它可以幫助我們對于dao的操作進行一個判斷,自動對于讀和修改類的操作進行判別:讀的操作在從資料庫進行,修改類的操作在主資料庫進行,這叫做讀寫分離,讀寫分離可以很好的緩解資料庫壓力,
那么資料庫內部,資料庫中間件配合資料庫進行讀寫操作的程序是怎么進行的?
首先(配置好application.yml、application-dev.yml后),程式dao層進行資料庫操作,ShardingSphere對操作進行判別,如果是讀操作,則根據yml檔案里的中間件的從資料庫的埠號和一些配置,去“從資料庫”進行讀操作;若是修改類的例如增刪改這類操作,中間件會根據yml組態檔去里面配置的主資料庫去進行操作,
其次,所有的從資料庫都是依賴于主資料庫的,很重要的一點:進入“從資料庫”的操作,都是要穿過“主資料庫”的,操作需要穿過“主資料庫”時,“主資料庫”為它讓開一條道,讓這個操作去“從資料庫”進行,這樣一看主資料庫好像也有消耗,因為它都為去從資料庫的操作讓開一條道了,為什么不直接讓這個操作在主資料庫進行?因為主資料庫的“讓道操作”和“執行陳述句操作”相比,讓道可能只消耗1,執行可能消耗10,這樣一比,中間件幫助讀寫分離帶來的的好處就顯而易見了,它幫助我們的資料庫緩解壓力,智能的分散各種操作去不同的資料庫,
三、集群的資料庫
假如說三套資料庫(每套各一個主從,一共 6 個)進行集群,集群的資料庫中的三個主資料庫并不是只是各存放三分之一的資料,而是各都有另外的資料庫的一部分資料,這樣如果一個主資料庫宕機,那么不至于說里面的資料庫無法被訪問,導致整個程式中的資料有一部分的資料丟失,就像一個又一個的棍子首尾相接串成環,重疊的部分就是重復的、存在別的資料庫里的資料,
四、宕機問題
有幾點需要注意,首先,所有的從資料庫都是依賴于主資料庫的,很重要的一點,就是所有進入“從資料庫”的操作,都是要穿過“主資料庫”的,意思是什么呢?
就是沒有主資料庫,從資料庫無從談起,
例如說,對于上面的集群資料庫,三個主資料庫三個從資料庫,如果一套里面的主資料庫宕機了,那么對于這套資料庫的查的操作(無論主還是從),一定會報錯,所有關于這套資料庫的操作都會報錯,
資料庫的負載均衡,資料庫里竟然也有這個!那么我們能不能通過配置負載均衡來達到對宕機的主資料庫對應的從資料庫進行查操作呢?
當然不行!因為:所有的從資料庫都是依賴于主資料庫的,所有的去從資料庫的操作都是穿透過主資料庫的,沒有主資料庫,何談從資料庫?
如果一套主從資料庫的主資料庫宕機,那么怎么樣才能讓從資料庫代替主資料庫成為新的主資料庫?這個可以讓運維人員寫一套腳本,在宕機發生時自動切換主從關系,MySQL在docker下,就寫一套Linux系統的腳本,具體我也不是很清楚,只知道要么人為切換,要么就寫腳本模仿人為切換,
五、主從資料庫的一些問題
主從資料庫,主資料庫負責修改寫入類操作,從資料庫負責查類操作,主操作完后會同步到從資料庫里,那么既然是同步,就會有延遲,這里的延遲雖然是毫秒級別的,但是也會產生原來只有單個資料庫的時候的不可重復讀的問題,
例如,有一個事務正在對于主資料庫的第五行進行操作,操作完后延遲時間內從資料庫進行讀操作,讀的時候只能讀到老資料,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301462.html
標籤:其他
上一篇:虛擬機的IP經常變化
下一篇:Hive面試復習
