程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> OLTP應用之MySQL架構選型

OLTP應用之MySQL架構選型

編輯:關於PHP編程

OLTP應用之MySQL架構選型


在我們下定決心將企業核心應用從企業級數據庫遷移到開源數據庫產品、使用本地磁盤代替共享存儲之前。我覺得我們必須要面對並回答以下幾個問題之後才能真正的將開源進行到底,將想法付諸於實踐。下面我們來看一下我們在將OLTP應用遷移到MySQL數據庫之上之前,我們必須要回答的幾個問題:
(1) 允許在極端情況下備庫接管服務後,數據存在暫時的不一致嗎(主從架構下在主庫crash後可能存在部分寫操作沒有及時同步的備庫的問題)?
(2) MySQL數據庫在數據庫故障時應用服務也將中斷3-30s,這樣的場景是否能夠接受?
(3) 我們對數據庫的可擴展性、吞吐能力、響應時間及用戶體驗是否有較高的要求?
只有回答了如上三個問題,以下3類OLTP類型的MySQL架構設計方案,才能真正的具備可參考性與實際意義。下面我們來扒一扒筆者目前考慮到適合OLTP應用開源解決方案。
方案一、多主同步復制方案PXC
PXC,即Percona Xtradb Cluster,它采用Galera引擎,可以實現多個節點間的數據同步復制以及讀寫並且可保障數據庫的服務高可用及數據一致性。其架構如下所示:

一、PXC的優點
(1)數據同步復制
(2)多個可同時讀寫節點,但需要事先進行分庫分表,讓各個節點分別寫不同的表或者庫
(3)可以保證數據嚴格一致性
(4)適合讀多寫少的業務系統
二、PXC的缺點
(1)不支持XA事務
(2)集群吞吐量/性能取決於響應最慢的節點,事務效率與主從架構相比低了不止一個數量級
(3)需要調整
(4)只支持InnoDB引擎
(5)所有表都要有主鍵
(6)不允許大事務產生
(7)不支持LOCK TABLE等顯式鎖操作
(8)存在寫沖突,鎖沖突、死鎖問題較多,不能解決熱點更新問題,可擴展性差
(9)如果並發事務量很大的話,官方建議采用InfiniBand網絡,降低因網絡延遲帶來的瓶頸
(10)需要引入多個第三方插件,集成復雜度高
方案二、主從復制方案MHA
MHA即Master High Availability Manager and Tools for MySQL是一個MySQL高可用管理工具,目的在於維持Master主庫的高可用性及數據的一致性。其最大特點是可以修復多個Slave之間的差異日志,最終使所有Slave保持數據一致,然後從中選擇一個Slave數據庫作為新的Master,並將其它Slave指向它。
其架構如下,請參考:

一、MHA的優點
1.自動監控Master故障轉移、故障後節點之間的數據同步
2.不會有性能損耗,適用於任何存儲引擎
3.具備自動數據補償能力,在主庫異常崩潰時能夠最大程度的保證數據的一致性
4.可實現同城應用級別雙活
二、MHA的缺點
1.如果主服務器硬件故障或無法通過ssh訪問,進行故障轉移可能導致丟失當前數據
2.切換時間較長,整個切換時間大約需要9-12s
方案三、主主復制方案MM
利用MySQL原生支持主從單向復制、主主雙向復制,該架構解決了主庫單點及寫瓶頸等問題。其架構如下,請參考:

一、MM架構優點
1.支持快速切換,一般3s之內即可切換到備機
2.配置管理簡單、不需要第三方插件
二、MM架構缺點
1.如果數據庫服務器硬件故障可能導致丟失當前操作數據
關於以上方案的總結
(一)對於PXC架構,其優點很多但缺點同時也非常的明顯,其核心優勢就是保證了各節點數據的一致性,劣勢就是其在可擴展性、鎖沖突、寫擴大方面存在問題,PXC為了保證數據的一致性其要求每個節點都要將數據寫入到磁盤才算完成,這樣就存在一個效率問題。也就是說每個事務的響應時間依賴於整個集群最慢的節點,且其對網絡質量要求非常高。另一個問題就是我們需要考慮清楚,我們的開源的方向在哪裡?是跟著一個小眾分支開源社區Percona,還是跟著主流MySQL官方開源社區發展的問題。
(二)對於MHA架構其優點就是通過MHA插件解決主庫的單點問題及因主庫掛掉後盡量保證接管的從庫與宕機後的主庫的數據一致性且數據的同步功能是原生的,其缺點就是在主庫故障切換後不能保證數據零丟失,其實這裡更准確的說法不應該是數據丟失應該主庫與從庫數據不一致。
在以下情況MHA可以保證接管後的節點與主庫數據時一致性的:
(1)在不發生硬件故障的情況下是可以從修復後的主庫找回數據並由DBA手動補回備庫,最終實現數據的一致性;
(2)若只是數據庫故障,MHA具備將所有已落實的數據自動同步到備庫從而實現數據的零丟失;
(3)直接使用MySQL的半同步機制,兩階段提交來保證數據的一致性,這個方法與PXC的實現方式相似
(三)對於MM雙主架構其優缺點與MHA相似,都是采用MySQL原生的數據同步機制。不同之處就是MM架構在主故障時切換時間更短,缺點就是產生數據不一致的可能性更多一下。另外在MM架構中我們也可以嘗試引入MHA數據補償工具來盡量降低在主備切換時導致的數據不一致性問題或者直接使用MySQL的半同步機制來保證數據一致性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved