基于MySQL的高可用可擴(kuò)展架構(gòu)該如何探討-創(chuàng)新互聯(lián)

基于MySQL的高可用可擴(kuò)展架構(gòu)該如何探討,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

成都創(chuàng)新互聯(lián)基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺(tái)為眾多戶提供成都移動(dòng)機(jī)房 四川大帶寬租用 成都機(jī)柜租用 成都服務(wù)器租用。

隨著信息量飛漲,信息的存儲(chǔ)成為了這個(gè)時(shí)代至關(guān)重要的一項(xiàng)技術(shù)。如何來(lái)保證數(shù)據(jù)存儲(chǔ)技術(shù)能夠適應(yīng)信息量的增長(zhǎng)速度和我們對(duì)信息的高度依賴,成為一個(gè)非常重要的課題。本文將從數(shù)據(jù)庫(kù)架構(gòu)的層面,通過(guò)以開(kāi)源的數(shù)據(jù)存儲(chǔ)軟件來(lái)構(gòu)建分布式數(shù)據(jù)層的思路,期望實(shí)現(xiàn)一個(gè)低成本的高可用可擴(kuò)展的數(shù)據(jù)層架構(gòu)。

傳統(tǒng)數(shù)據(jù)庫(kù)架構(gòu)

縱觀各傳統(tǒng)商業(yè)數(shù)據(jù)庫(kù)軟件,多以集中式架構(gòu)為主,鮮有以分布式為設(shè)計(jì)理念的架構(gòu)。這些傳統(tǒng)數(shù)據(jù)庫(kù)軟件的大特點(diǎn)就是將所有的數(shù)據(jù)都集中在一個(gè)數(shù)據(jù)庫(kù)中,依靠大型高端設(shè)備來(lái)提供高處理能力和擴(kuò)展性。

集中式數(shù)據(jù)庫(kù)架構(gòu)在擴(kuò)展性方面主要依賴于主機(jī)和存放數(shù)據(jù)的存儲(chǔ)設(shè)備的擴(kuò)展能力,也就是說(shuō)依賴硬件本身的縱向擴(kuò)展能力,很難做到較好的橫向擴(kuò)展。而其可靠性也同樣是以硬件設(shè)備為依托,主要通過(guò)Share Storage的方式來(lái)實(shí)現(xiàn)。如大家所熟知的傳統(tǒng)商業(yè)數(shù)據(jù)庫(kù)代表廠商O(píng)racle的RAC,就是一個(gè)非常典型的Share Everything 的集中式架構(gòu)。

我們可以通過(guò)圖1來(lái)簡(jiǎn)單地描繪一下傳統(tǒng)數(shù)據(jù)庫(kù)的典型架構(gòu):傳統(tǒng)架構(gòu)在主機(jī)端大多通過(guò)兩臺(tái)主機(jī)共享存儲(chǔ)設(shè)備,平時(shí)其中一臺(tái)主機(jī)使用存儲(chǔ)通過(guò)數(shù)據(jù)庫(kù)軟件來(lái)管理。這樣的架構(gòu)只能有一臺(tái)主機(jī)(RAC除外)上的數(shù)據(jù)庫(kù)能夠提供服務(wù),另一臺(tái)主機(jī)只能是作為熱備冗余,不能啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例提供服務(wù)。所以,其處理能力就完全取決于這臺(tái)主機(jī)的大擴(kuò)展能力,很難通過(guò)增加主機(jī)數(shù)量來(lái)增加處理能力。而單臺(tái)主機(jī)的擴(kuò)展能力畢竟是有限的,即使是某些廠商的大型機(jī),同樣也有其擴(kuò)展限制。此外,傳統(tǒng)架構(gòu)對(duì)高端設(shè)備的依賴,無(wú)疑將直接導(dǎo)致系統(tǒng)成本的大幅度增加,甚至可能會(huì)導(dǎo)致系統(tǒng)被主機(jī)和硬件廠商所“綁架”,不得不持續(xù)增加投入成本。

基于MySQL的可擴(kuò)展和高可靠

MySQL作為開(kāi)源數(shù)據(jù)庫(kù)的佼佼者,無(wú)論是軟件本身的設(shè)計(jì)思想,還是推崇給廣大使用者們常用的架構(gòu)思路都和傳統(tǒng)的商業(yè)數(shù)據(jù)庫(kù)軟件大相徑庭。MySQL棄用了傳統(tǒng)的Share-Everything的思想,而采用了Share-Nothing的思想。MySQL的Replication實(shí)現(xiàn)機(jī)制,以及MySQL Cluster的架構(gòu)設(shè)計(jì),都體現(xiàn)了這一思想。也正因如此,給MySQL在可擴(kuò)展性和高可靠性方面帶來(lái)了非常靈活的架構(gòu)設(shè)計(jì)思路,也讓我們的數(shù)據(jù)庫(kù)可以擺脫對(duì)高端設(shè)備的依賴,使用上性價(jià)比高很多的PC Server。

可擴(kuò)展性

在提升擴(kuò)展性方面,最為常用的是通過(guò)MySQL自身的Replication功能,將同一份MySQL的數(shù)據(jù)以異步的方式同時(shí)復(fù)制到另外的一臺(tái)或多臺(tái)MySQL主機(jī)上,并讓這些MySQL主機(jī)同時(shí)對(duì)外提供查詢服務(wù)。每增加一個(gè)復(fù)制的節(jié)點(diǎn),查詢處理能力也得到相應(yīng)的增加,新增節(jié)點(diǎn)的處理能力就是整個(gè)系統(tǒng)增加的處理能力。由于MySQL Replication主要是邏輯方式,同一個(gè)集群中可有多家廠商的硬件,也可以使用不同的OS,所以可以做到完全不受任何軟/硬件平臺(tái)限制,擺脫對(duì)單一平臺(tái)的依賴。

人們可能會(huì)對(duì)MySQL Replication的功能特性不滿意,進(jìn)而通過(guò)第三方開(kāi)源軟件,甚至是通過(guò)解析其開(kāi)源的通信協(xié)議自行開(kāi)發(fā)出來(lái)的復(fù)制軟件來(lái)進(jìn)行數(shù)據(jù)實(shí)時(shí)(或者異步)復(fù)制來(lái)達(dá)到 Replication完全相同甚至更好的效果。傳統(tǒng)數(shù)據(jù)庫(kù)可能也具有某項(xiàng)功能實(shí)現(xiàn)數(shù)據(jù)的復(fù)制,但與MySQL相比,由于只依靠數(shù)據(jù)庫(kù)本身特性來(lái)完成,在架構(gòu)的靈活性和可控性方面存在一些不足。

最后,在提升擴(kuò)展性方面不得不說(shuō)的數(shù)據(jù)切分(橫向/縱向)的思想,同樣可以在MySQL數(shù)據(jù)庫(kù)上得到靈活的發(fā)揮,無(wú)論是以功能模塊的方式進(jìn)行縱向的切分,還是以某個(gè)特定鍵(字段)的類HASH分段的方式進(jìn)行橫向的切分,抑或是通過(guò)數(shù)據(jù)庫(kù)本身的Partition功能進(jìn)行切分,都可以在MySQL上得到很好的實(shí)現(xiàn)。當(dāng)然,無(wú)論是切分前的數(shù)據(jù)分散,還是切分后的數(shù)據(jù)路由和合并都離不開(kāi)應(yīng)用層的協(xié)作與配合,除非通過(guò)MySQL Cluster來(lái)實(shí)現(xiàn)。對(duì)于提升擴(kuò)展性的架構(gòu),通過(guò)圖2會(huì)有一個(gè)更為直觀的展現(xiàn)。

以“Master”為核心,通過(guò)不同的方式以三條“路線”將數(shù)據(jù)復(fù)制到相應(yīng)的 MySQL 集群中對(duì)外提供服務(wù)。實(shí)際的架構(gòu)中,Master就是一個(gè)數(shù)據(jù)寫(xiě)入點(diǎn),復(fù)制出去的集群則可以對(duì)外提供相應(yīng)的查詢請(qǐng)求。常見(jiàn)的Web應(yīng)用系統(tǒng)中,查詢請(qǐng)求遠(yuǎn)遠(yuǎn)大于寫(xiě)入請(qǐng)求,所以非常適合通過(guò)MySQL 數(shù)據(jù)庫(kù)使用類似的架構(gòu)思想來(lái)解決實(shí)際的擴(kuò)展性問(wèn)題。

高可靠性

在保證高可靠性方面,同樣可以通過(guò)MySQL的 Replication 為基礎(chǔ),加以應(yīng)用層架構(gòu)的簡(jiǎn)單配合或一些開(kāi)源的第三方HA管理軟件來(lái)設(shè)計(jì)出多種非常靈活的高可靠架構(gòu)。

對(duì)于數(shù)據(jù)寫(xiě)入點(diǎn),可以通過(guò)MySQL的Replication功能,將兩臺(tái)MySQL主機(jī)設(shè)置成雙A的狀態(tài),并通過(guò)HA管理軟件,對(duì)MySQL的狀態(tài)檢測(cè),來(lái)判定MySQL的狀態(tài),并對(duì)外提供供單一的服務(wù) IP 地址,以確保在任何時(shí)候有一臺(tái)MySQL崩潰后馬上切換到另外一臺(tái)MySQL上提供服務(wù)。這樣自動(dòng)的方式非常方便地讓我們的寫(xiě)入點(diǎn)擁有高可靠性。如果我們的應(yīng)用程序也可以自動(dòng)判斷當(dāng)一個(gè)點(diǎn)失效后馬上自動(dòng)切換到另外一個(gè)點(diǎn)就更好,基本上可以做到對(duì)外部完全透明的切換,對(duì)可用性的影響之小,比現(xiàn)在一些知名廠商的專業(yè)HA管理都要好很多。

對(duì)于數(shù)據(jù)查詢點(diǎn),高可靠性的實(shí)現(xiàn)就更容易了,可從雙A的兩臺(tái)Master端中的任意一臺(tái)上通過(guò)數(shù)據(jù)復(fù)制搭建多個(gè)具有完全相同數(shù)據(jù)拷貝的MySQL節(jié)點(diǎn),來(lái)保證任何時(shí)刻都可以有多臺(tái)MySQL對(duì)外提供數(shù)據(jù)查詢服務(wù)。當(dāng)一臺(tái)MySQL崩潰,系統(tǒng)馬上將該節(jié)點(diǎn)從可以服務(wù)的節(jié)點(diǎn)中剔除出去。通過(guò)應(yīng)用架構(gòu)的幫助這是非常容易做到的事情。

圖3是高可靠性實(shí)例圖。1描繪了基本架構(gòu),2、3和4分別描繪了當(dāng)讀節(jié)點(diǎn)失效以及寫(xiě)節(jié)點(diǎn)中的任何一個(gè)失效后的高可靠性實(shí)現(xiàn)。在高可靠性方面,除了自行控制將數(shù)據(jù)復(fù)制到多個(gè)MySQL主機(jī)上的方式之外,MySQL還提供了更為高級(jí)的方案——MySQL Cluster,一個(gè)完全的分布式數(shù)據(jù)庫(kù)集群,而且是一個(gè)非常典型的Share-Nothing的分布式數(shù)據(jù)庫(kù)架構(gòu)。數(shù)據(jù)層和SQL層分離,每份數(shù)據(jù)都以兩份或更多份拷貝存放在不同的數(shù)據(jù)節(jié)點(diǎn)上,整個(gè)數(shù)據(jù)層的所有節(jié)點(diǎn)以分布式計(jì)算的思想共同處理整個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù),在保證高并發(fā)的處理能力的同時(shí),以數(shù)據(jù)冗余的方式保證了高可靠性。

構(gòu)建基于MySQL、Cache 和Search的數(shù)據(jù)層

隨著Web應(yīng)用系統(tǒng)負(fù)載的增速越來(lái)越快,常讓系統(tǒng)不堪重壓,數(shù)據(jù)庫(kù)系統(tǒng)尤甚。而隨著對(duì)用戶體驗(yàn)關(guān)注度的提高,響應(yīng)速度和使用的便利性則成為不可避免的話題。無(wú)論如何優(yōu)化都不可能避免磁盤(pán)物理I/O的響應(yīng)速度與內(nèi)存中的I/O速度不匹配的問(wèn)題,所以很自然地想到了通過(guò)內(nèi)存Cache的方式來(lái)提高響應(yīng)速度。

在使用的便利性方面最為典型的就是數(shù)據(jù)搜索。關(guān)系型數(shù)據(jù)庫(kù)的特性,決定了它很難提供類似于Google那樣的可以全文檢索的搜索系統(tǒng)。我們?cè)俅我越柚巴饬Α钡姆绞絹?lái)完善服務(wù),將數(shù)據(jù)庫(kù)中的數(shù)據(jù)通過(guò)利用Lucene或者Egothor等類似的搜索引擎系統(tǒng),或者是利用Sphinx之類的軟件和數(shù)據(jù)庫(kù)集成,為數(shù)據(jù)庫(kù)增加全文檢索的能力。

可以設(shè)計(jì)出一個(gè)以數(shù)據(jù)庫(kù)(My-SQL)來(lái)完成持久化和常規(guī)的數(shù)據(jù)訪問(wèn)功能,以分布式內(nèi)存Cache系統(tǒng)來(lái)提供對(duì)響應(yīng)速度和并發(fā)能力極高的數(shù)據(jù)的訪問(wèn),以第三方或者自行研發(fā)的分布式全文搜索系統(tǒng)來(lái)提供全文檢索服務(wù)的全方位的分布式數(shù)據(jù)服務(wù)層,中間則通過(guò)應(yīng)用架構(gòu)的幫助實(shí)現(xiàn)一個(gè)統(tǒng)一的數(shù)據(jù)訪問(wèn)層,來(lái)控制數(shù)據(jù)的讀取寫(xiě)入檢索等操作,如圖4所示:讓MySQL中的數(shù)據(jù)同步(或異步)寫(xiě)入到Cache和Search系統(tǒng)的實(shí)現(xiàn)方式很多,如對(duì)實(shí)時(shí)性要求不是很高,也不希望Data Proxy Layer中有太多的控制邏輯,完全可以通過(guò)隊(duì)列的方式以異步的方式實(shí)現(xiàn);如對(duì)實(shí)時(shí)性要求較高,也可以通過(guò) Data Proxy Layer這一層應(yīng)用來(lái)控制Cache和Search中的數(shù)據(jù)更新;甚至還可以通過(guò)MySQL的用戶自定義函數(shù),以Trigger的方式將數(shù)據(jù)實(shí)時(shí)地更新到Cache集群。類似的方式可以想出很多,關(guān)鍵是要根據(jù)應(yīng)用場(chǎng)景,來(lái)選擇最合適、最簡(jiǎn)單的方式來(lái)實(shí)現(xiàn)。

架構(gòu)無(wú)所謂最好的,只有最合適的。任何架構(gòu)都有其適用的場(chǎng)景,也有其相應(yīng)的生命周期。應(yīng)用場(chǎng)景或業(yè)務(wù)量的變化,都可能導(dǎo)致架構(gòu)不足以應(yīng)對(duì)的現(xiàn)象。引用一句電影臺(tái)詞:“出來(lái)混,遲早要還的!”

看完上述內(nèi)容,你們掌握基于MySQL的高可用可擴(kuò)展架構(gòu)該如何探討的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!

新聞標(biāo)題:基于MySQL的高可用可擴(kuò)展架構(gòu)該如何探討-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://muchs.cn/article16/dpshgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、響應(yīng)式網(wǎng)站網(wǎng)站營(yíng)銷、品牌網(wǎng)站制作虛擬主機(jī)、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站