淘寶曹偉分析低成本、高性能MySQL云數據架構_MySQL
來源:懂視網
責編:小采
時間:2020-11-09 18:22:42
淘寶曹偉分析低成本、高性能MySQL云數據架構_MySQL
淘寶曹偉分析低成本、高性能MySQL云數據架構_MySQL:bitsCN.com 曹偉是淘寶數據庫研發組的成員,前不久他在內部分享了低成本、高性能MySQL云數據的架構分析和探索,包括架構的演變過程、系統中的角色和組件等。該文章被褚霸轉發在“Erlang非業余研究”上。 在一開始,曹偉指出: 雖然近兩年來No
導讀淘寶曹偉分析低成本、高性能MySQL云數據架構_MySQL:bitsCN.com 曹偉是淘寶數據庫研發組的成員,前不久他在內部分享了低成本、高性能MySQL云數據的架構分析和探索,包括架構的演變過程、系統中的角色和組件等。該文章被褚霸轉發在“Erlang非業余研究”上。 在一開始,曹偉指出: 雖然近兩年來No
接下來,曹偉介紹了他們的工作成果:
我們(阿里集團核心系統數據庫團隊)……設計和實現了一套UMP(Unified MySQL Platform)系統,提供低成本和高性能的MySQL云數據服務。開發者從平臺上申請MySQL實例資源,通過平臺提供的單一入口來訪問數據,UMP 系統內部維護和管理資源池,以對用戶透明的形式提供主從熱備、數據備份、遷移、容災、讀寫分離、分庫分表等一系列服務。平臺通過在一臺物理機上運行多個 MySQL實例的方式來降低成本,并且實現了資源隔離,按需分配和限制CPU、內存和IO資源,同時支持不影響提供數據服務的前提下根據用戶業務的發展動 態的擴容和縮容。
曹偉分析了該系統的架構演變過程:
第一版基于mysql-proxy 0.8版修復若干bug,并對proxy插件中管理用戶連接和數據庫連接的狀態機流程進行一些修改,同時編寫Lua腳本實現去中心數據庫獲取用戶認證信息和后臺數據庫地址,對用戶進行驗證,建立到后臺數據庫的連接和轉發數據包等邏輯。

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