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