標籤:ast 完全 響應 應用 網站 方式 使用者 它的 主從資料庫
(一)為什麼要實現讀寫分離?
為了伺服器承載更多的使用者?提升了網站的響應速度?分攤資料庫伺服器的壓力?就是為了雙機熱備又不想浪費備份伺服器?上面這些回答,我認為都不是錯誤的,但也都不是完全正確的。「讀寫分離」並不是多麼神奇的東西,也帶不來多麼大的效能提升,也許更多的作用的就是資料安全的備份吧。從一個庫到讀寫分離,從理論上對伺服器壓力來說是會帶來一倍的效能提升,但你仔細思考一下,你的應用伺服器真的很需要這一倍的提升嗎?那倒不如你去試著在伺服器使用一下緩衝系統,如 Memcached、Redis 這些分布式緩衝,那效能可能是幾十倍的提升。而且,在伺服器硬體異常強悍及效能廉價的今天,完全更沒必要了,所以,在今天,我認為它更多的職責就是為了資料安全而設計的,同時又提升了一些效能,這樣也挺好。
總結:分攤資料庫伺服器的壓力,並保證資料庫資料安全。
(二)如何?讀寫分離?
讀寫分離方式很簡單,就是在你讀資料時去串連從庫,在你寫資料的時候去串連主庫,具體代碼實現當然就是串連時候去操作了,這沒什麼難度,在代碼裡寫就是了,但是這樣來源程式就要被改動了,假設一個情境,我們已經部署好了資料庫伺服器,這個要實現主從,當然這種方法就有限制了。
巧妙的使用AOP就可以實現: AOP 可以在方法開始執行前後插入執行我們想要的代碼,那這樣,我們可以在執行資料庫操作前根據業務來動態切換資料來源,這種方式首先不需要在業務代碼中去做切換,二是可能以後我們不需要讀寫分離了,把 AOP 切換的代碼去掉就行了,三是可能就是拓展性更強。
(三)主從資料庫如何保證資料一致性?
資料的一致性通過主從複製實現,以mysql主(稱master)從(稱slave)複製的原理為例:
1、master將資料改變記錄到二進位日誌(binary log)中,也即是設定檔log-bin指定的檔案(這些記錄叫做二進位日誌事件,binary log events);
2、slave將master的binary logevents拷貝到它的中繼日誌(relay log);
3、slave重做中繼日誌中的事件,將改變反映它自己的資料(資料重演);
(四)主從配置需要注意的地方
1、主DB server和從DB server資料庫的版本一致;
2、主DB server和從DB server資料庫資料一致,這裡就可以把主的備份在從上還原,也可以直接將主的資料目錄拷貝到從的相應資料目錄;
3、主DB server開啟二進位日誌,主DB server和從DB server的server_id都必須唯一;
(五)一主一從與一主多從的區別以及實現
我的上一篇文章主要討論一主多從,而且只是給了實際應用中的實現方向,自己實現具體的這個可以參考連結:
54343188
主從資料庫讀寫分離知識