淘寶曹偉分析低成本、高性能MySQL云數(shù)據(jù)架構(gòu)_MySQL
來源:懂視網(wǎng)
責(zé)編:小采
時(shí)間:2020-11-09 18:22:42
淘寶曹偉分析低成本、高性能MySQL云數(shù)據(jù)架構(gòu)_MySQL
淘寶曹偉分析低成本、高性能MySQL云數(shù)據(jù)架構(gòu)_MySQL:bitsCN.com 曹偉是淘寶數(shù)據(jù)庫研發(fā)組的成員,前不久他在內(nèi)部分享了低成本、高性能MySQL云數(shù)據(jù)的架構(gòu)分析和探索,包括架構(gòu)的演變過程、系統(tǒng)中的角色和組件等。該文章被褚霸轉(zhuǎn)發(fā)在“Erlang非業(yè)余研究”上。 在一開始,曹偉指出: 雖然近兩年來No
導(dǎo)讀淘寶曹偉分析低成本、高性能MySQL云數(shù)據(jù)架構(gòu)_MySQL:bitsCN.com 曹偉是淘寶數(shù)據(jù)庫研發(fā)組的成員,前不久他在內(nèi)部分享了低成本、高性能MySQL云數(shù)據(jù)的架構(gòu)分析和探索,包括架構(gòu)的演變過程、系統(tǒng)中的角色和組件等。該文章被褚霸轉(zhuǎn)發(fā)在“Erlang非業(yè)余研究”上。 在一開始,曹偉指出: 雖然近兩年來No
接下來,曹偉介紹了他們的工作成果:
我們(阿里集團(tuán)核心系統(tǒng)數(shù)據(jù)庫團(tuán)隊(duì))……設(shè)計(jì)和實(shí)現(xiàn)了一套UMP(Unified MySQL Platform)系統(tǒng),提供低成本和高性能的MySQL云數(shù)據(jù)服務(wù)。開發(fā)者從平臺上申請MySQL實(shí)例資源,通過平臺提供的單一入口來訪問數(shù)據(jù),UMP 系統(tǒng)內(nèi)部維護(hù)和管理資源池,以對用戶透明的形式提供主從熱備、數(shù)據(jù)備份、遷移、容災(zāi)、讀寫分離、分庫分表等一系列服務(wù)。平臺通過在一臺物理機(jī)上運(yùn)行多個(gè) MySQL實(shí)例的方式來降低成本,并且實(shí)現(xiàn)了資源隔離,按需分配和限制CPU、內(nèi)存和IO資源,同時(shí)支持不影響提供數(shù)據(jù)服務(wù)的前提下根據(jù)用戶業(yè)務(wù)的發(fā)展動(dòng) 態(tài)的擴(kuò)容和縮容。
曹偉分析了該系統(tǒng)的架構(gòu)演變過程:
第一版基于mysql-proxy 0.8版修復(fù)若干bug,并對proxy插件中管理用戶連接和數(shù)據(jù)庫連接的狀態(tài)機(jī)流程進(jìn)行一些修改,同時(shí)編寫Lua腳本實(shí)現(xiàn)去中心數(shù)據(jù)庫獲取用戶認(rèn)證信息和后臺數(shù)據(jù)庫地址,對用戶進(jìn)行驗(yàn)證,建立到后臺數(shù)據(jù)庫的連接和轉(zhuǎn)發(fā)數(shù)據(jù)包等邏輯。
圖:UMP系統(tǒng)第一版架構(gòu)
他提到第一版的幾個(gè)問題:
- mysql-proxy 0.8版對多線程的支持比較簡單粗暴,導(dǎo)致幾個(gè)惡劣后果:
- 造成“驚群”現(xiàn)象,多個(gè)線程被喚醒但只有一個(gè)線程需要去任務(wù);
- 任務(wù)的CPU親緣性比較差,在同一個(gè)狀態(tài)機(jī)上觸發(fā)的事件會在多個(gè)處理器上來回切換執(zhí)行;
- mysql-proxy中還使用了全局Lua鎖,同時(shí)僅允許一個(gè)工作線程執(zhí)行Lua腳本,因此mysql-proxy多線程模式下的性能遠(yuǎn)不能同CPU核數(shù)保持線性增長,甚至在16核上的性能還不如4核。
- 以上原因?qū)е聠芜M(jìn)程模式時(shí),一臺物理機(jī)上需要部署多個(gè)進(jìn)程才能有效利用機(jī)器的處理能力,但給部署、監(jiān)控和服務(wù)的升級帶來麻煩。
- 其次,限于mysql-proxy的框架,功能上不容易擴(kuò)展,實(shí)現(xiàn)用戶的連接數(shù)限制、QPS限制、以及主從切換、讀寫分離、分庫分表等一系列功能比較困難。
- 最后,mysql-proxy的社區(qū)近些年來并不活躍,而且C語言對開發(fā)者功底的要求比較高,很難要求團(tuán)隊(duì)所有成員協(xié)同開發(fā)出兼顧優(yōu)雅和正確性的代碼。
因此,他們決定用Erlang重寫,原因在于:
和操作系統(tǒng)的進(jìn)程/線程相比,Erlang進(jìn)程同樣是并發(fā)執(zhí)行的單位,但特別的輕量級,它是在Erlang虛擬機(jī)內(nèi)管理和調(diào)度的“綠進(jìn)程”,即用戶態(tài)進(jìn)程。Erlang/OTP很好的抽象了開發(fā)一個(gè)分布式的、高容錯(cuò)性的應(yīng)用程序所需的要素,包括:網(wǎng)絡(luò)編程框架、序列化和反序列化、容錯(cuò)、熱部署。 在設(shè)計(jì)當(dāng)前的UMP系統(tǒng)架構(gòu)時(shí),團(tuán)隊(duì)遵循了以下原則:
系統(tǒng)對外保持單一入口,對內(nèi)維護(hù)單一的資源池。保證服務(wù)的高可用性,消除單點(diǎn)故障。保證系統(tǒng)是彈性可伸縮的,可以動(dòng)態(tài)的增加、刪減計(jì)算與存儲節(jié)點(diǎn)。保證分配給用戶的資源也是彈性可伸縮的,資源之間相互隔離。 圖:UMP系統(tǒng)現(xiàn)有架構(gòu)
UMP系統(tǒng)中有如下角色:
controller服務(wù)器:向UMP集群提供各種管理服務(wù),實(shí)現(xiàn)元數(shù)據(jù)存儲、集群成員管理、MySQL實(shí)例管理、故障恢復(fù)、備份、遷移、擴(kuò)容等功能。proxy服務(wù)器:向用戶提供訪問MySQL數(shù)據(jù)庫的服務(wù),它完全實(shí)現(xiàn)了MySQL協(xié)議;除數(shù)據(jù)路由的基本功能外,Proxy服務(wù)器中還實(shí)現(xiàn)了資源限制、屏蔽MySQL實(shí)例故障、讀寫分離、分庫分表、記錄用戶訪問日志的功能。agent服務(wù)器:部署在運(yùn)行MySQL進(jìn)程的機(jī)器上,用來管理每臺物理機(jī)上MySQL實(shí)例,執(zhí)行創(chuàng)建、刪除、備份、遷移、主從切換等操作,收集和分析MySQL進(jìn)程的統(tǒng)計(jì)信息、bin log、slow query log。API/Web服務(wù)器:向用戶提供了系統(tǒng)管理界面。它們是基于開源項(xiàng)目Mochiweb與Chicago Boss開發(fā)的Mochiweb提供http/https服務(wù)。日志分析服務(wù)器:存儲和分析Proxy服務(wù)器傳入的用戶訪問日志,并實(shí)現(xiàn)了實(shí)時(shí)索引供用戶查詢一段時(shí)間內(nèi)的慢日志和統(tǒng)計(jì)報(bào)表。信息統(tǒng)計(jì)服務(wù)器:定期將采集到的用戶的連接數(shù)、QPS數(shù)值,以及MySQL實(shí)例的進(jìn)程狀態(tài)用RRDtool進(jìn)行統(tǒng)計(jì),可以畫圖展示到Web界面上,也可以為今后實(shí)現(xiàn)彈性的資源分配和自動(dòng)化的MySQL實(shí)例遷移提供依據(jù)。 依賴的開源組件有:
Mnesia:Mnesia是OTP提供的分布式數(shù)據(jù)庫,支持事務(wù),支持透明的數(shù)據(jù)分片,利用兩階段鎖實(shí)現(xiàn)分布式事務(wù),可以線性擴(kuò)展到至少50個(gè)節(jié)點(diǎn)。Mnesia更傾向于犧牲可用性來換取強(qiáng)一致性,但它也提供了臟讀、臟寫操作,可以繞過事務(wù)管理去操作數(shù)據(jù)。LVS:實(shí)現(xiàn)負(fù)載均衡,用戶應(yīng)用重連后會被LVS定向到其他的proxy上。RabbitMQ:提供UMP系統(tǒng)中各節(jié)點(diǎn)間的通信(不包括SQL查詢、日志等大數(shù)據(jù)流的傳輸,這些還是直接走TCP的)ZooKeeper:主要發(fā)揮配置服務(wù)器、分布式鎖,以及監(jiān)控所有MySQL實(shí)例的作用 對于該系統(tǒng)的作用,曹偉總結(jié)到:
在多個(gè)組件的協(xié)同作業(yè)下,整個(gè)系統(tǒng)實(shí)現(xiàn)了對用戶透明的容災(zāi)、讀寫分離、分庫分表功能。系統(tǒng)內(nèi)部還通過多個(gè)小規(guī)模用戶共享同一個(gè)MySQL實(shí)例,中等 規(guī)模用戶獨(dú)占一個(gè)MySQL實(shí)例,多個(gè)MySQL實(shí)例共享同一個(gè)物理機(jī)的方式實(shí)現(xiàn)資源的虛擬化,降低整體成本。在資源隔離方面,通過Cgroup限制 MySQL進(jìn)程資源,以及在proxy服務(wù)器端限制QPS相結(jié)合的方法,UMP系統(tǒng)實(shí)現(xiàn)了資源虛擬化的同時(shí)保障用戶的服務(wù)質(zhì)量。此外,UMP系統(tǒng)綜合運(yùn)用 SSL數(shù)據(jù)庫連接、數(shù)據(jù)訪問IP白名單、記錄用戶操作日志、SQL攔截等技術(shù)保護(hù)用戶的數(shù)據(jù)安全。
對于該系統(tǒng)的應(yīng)用,曹偉指出:
UMP系統(tǒng)的一些組件,例如proxy服務(wù)器和日志分析服務(wù)器,目前已經(jīng)運(yùn)用在天貓的聚石塔平臺中,為電商和ISV提供安全的數(shù)據(jù)云服務(wù)。此 外,UMP系統(tǒng)還運(yùn)用在淘寶的店鋪裝修平臺中,為開發(fā)者提供數(shù)據(jù)服務(wù)。下一階段,我們希望UMP系統(tǒng)可以為進(jìn)一步降低集團(tuán)內(nèi)部數(shù)據(jù)存儲的成本做出貢獻(xiàn)。
bitsCN.com
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
淘寶曹偉分析低成本、高性能MySQL云數(shù)據(jù)架構(gòu)_MySQL
淘寶曹偉分析低成本、高性能MySQL云數(shù)據(jù)架構(gòu)_MySQL:bitsCN.com 曹偉是淘寶數(shù)據(jù)庫研發(fā)組的成員,前不久他在內(nèi)部分享了低成本、高性能MySQL云數(shù)據(jù)的架構(gòu)分析和探索,包括架構(gòu)的演變過程、系統(tǒng)中的角色和組件等。該文章被褚霸轉(zhuǎn)發(fā)在“Erlang非業(yè)余研究”上。 在一開始,曹偉指出: 雖然近兩年來No