MySQL数据库:读写分离
一、讀寫分離的原理:
1、實現原理:
讀寫分離解決的是,數據庫的寫操作,影響了查詢的效率,適用于讀遠大于寫的場景。讀寫分離的實現基礎是主從復制,主數據庫利用主從復制將自身數據的改變同步到從數據庫集群中,然后主數據庫負責處理寫操作(當然也可以執行讀操作),從數據庫負責處理讀操作,不能執行寫操作。并可以根據壓力情況,部署多個從數據庫提高讀操作的速度,減少主數據庫的壓力,提高系統總體的性能。
2、讀寫分離提高性能的原因:
(1)增加物理服務器,負荷分攤;
假如我們有1主3從,假設現在1分鐘內有10條寫入,150條讀取。那么,1主3從相當于共計40條寫入,而讀取總數沒變,因此平均下來每臺服務器承擔了10條寫入和50條讀取(主庫不承擔讀取操作)。因此,雖然寫入沒變,但是讀取大大分攤了,提高了系統性能。另外,當讀取被分攤后,又間接提高了寫入的性能。所以,總體性能提高了,也就是拿機器和帶寬換性能。
(2)主從只負責各自的寫和讀,極大程度的緩解X鎖和S鎖爭用;
(3)從庫可配置MyISAM引擎,提升查詢性能以及節約系統開銷;
(4)主從復制另外一大功能是增加冗余,提高可用性,當一臺數據庫服務器宕機后能通過調整另外一臺從庫來以最快的速度恢復服務。
3、Mysql讀寫分寫的實現方式:
(1)基于程序代碼內部實現:
在代碼中根據select 、insert進行路由分類,這類方法也是目前生產環境下應用最廣泛的。優點是性能較好,因為程序在代碼中實現,不需要增加額外的硬件開支,缺點是需要開發人員來實現,運維人員無從下手。
(2)基于中間代理層實現:
代理一般介于應用服務器和數據庫服務器之間,代理數據庫服務器接收到應用服務器的請求后根據判斷后轉發到后端數據庫,有以下代表性的代理層。
①mysql_proxy。mysql_proxy是Mysql的一個開源項目,通過其自帶的lua腳本進行sql判斷。
②Atlas。是由 奇虎360, Web平臺部基礎架構團隊開發維護的一個基于MySQL協議的數據中間層項目。它是在mysql-proxy 0.8.2版本的基礎上,對其進行了優化,增加了一些新的功能特性。360內部使用Atlas運行的mysql業務,每天承載的讀寫請求數達幾十億條。支持事務以及存儲過程。
③Amoeba。由阿里巴巴集團在職員工陳思儒使用序java語言進行開發,阿里巴巴集團將其用戶生產環境下,但是他并不支持事物以及存儲過程。
經過上述簡單的比較,不是所有的應用都能夠在基于程序代碼中實現讀寫分離,像一些大型的java應用,如果在程序代碼中實現讀寫分離對代碼的改動就較大,所以,像這種應用一般會考慮使用代理層來實現。
?
二、讀寫分離的搭建:
有關讀寫分離的搭建步驟,可以閱讀這兩篇博客:
https://blog.csdn.net/starlh35/article/details/78735510
https://blog.csdn.net/justdb/article/details/17331569
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的MySQL数据库:读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL数据库:分区Partition
- 下一篇: MySQL数据库的性能优化总结