mysql proxy,mycat, 都是比較靠譜的中間件軟件,不論是用來作讀寫分離,仍是作分庫分表。 mysql
問題是如今有比使用中間件更好的解決方案,這就是運行在公有云上的,基於中間件技術 + 公有云數據庫打形成的分佈式數據庫。 目前典型的有阿里雲的DRDS/PetaData,騰訊雲的DCDB FOR TDSQL, 以及UCloud最近推出的UDDB。 sql
咱們所說的更好, 首先體如今系統的管理和運維上。雲上的,基於中間件的分佈式數據庫,相對於單純的中間件來講, 建立/管理方便、關鍵指標可視化/自動化告警、複雜運維(如水平擴展中的數據遷移)自動化等功能點,都是節省 DBA 時間的利器,讓 DBA 能夠專一於業務存儲架構和優化,而不用疲於應對平常的系統管理和運維。 數據庫
單純使用中間件軟件來作讀寫分離或分庫分表,管理和運維的工做量和複雜度會有多高? 咱們能夠舉兩個例子來看下。 架構
1. 假如你要搭建一個讀寫分離方案。 那麼: 1.1 你要去熟悉一款中間件,瞭解這款中間件的部署方式,熟悉其配置文件; 1.2 你須要去搭建一個一主多從的數據庫集羣,配置並測試好好主節點和多個從節點中間的複製關係; 1.3 上面兩步完成後,你能夠將中間件和數據庫集羣鏈接起來了。經過配置好中間件的配置文件, 並設置各節點只讀請求的比例,完成系統的組裝,同時進行一些測試,保證系統能按照預期進行工做。 運維
但作到這個程度,還遠遠不夠。這樣的系統,只是恰好能工做,還遠未達到 「工業標準」。好比,還須要去中間件這個單點。所以你須要再增長一箇中間件節點,並安裝 keepalived 來作 ip 漂移, 保證一個節點後掛掉有另外一個節點繼續服務;又好比你還須要設置系統監控和告警,保證系統故障可以及時發現;另外,可能你還須要將一些系統關鍵指標可視化, 提供給產品或你的boss做爲參考。要作到這一點,你須要採集中間件的日誌,並寫一個程序來作展示。 分佈式
而上面全部的操做, 對於公有云上的分佈式數據庫來講,是點點鼠標就能夠完成的事情。可能在阿里 DRDS 那塊, 還須要4-5步的操做,等待5分鐘左右; 可是對於 UCloud 的 UDDB 來講, 只須要一步操做,時間不超過30s。 工具
2. 假如你要搭建一個水平分表方案。那要作的事情就更多了。除了比讀寫分離更復雜的系統搭建, 還有兩個麻煩的事情, 一是建表,二是擴容。 測試
先來看建表。基本上每次建一張表時,你都須要先到每一個數據庫節點上,建立好子表,而後修改中間件配置文件並重啓,讓分表規則生效。優化
而擴容操做,我相信這是全部開發或運維同窗最不肯意乾的事情。水平擴容意味着你須要將海量的數據, 從老的數據庫節點遷到新增的節點,以匹配新的分表規則,在整個過程必須作到不丟一條數據。風險之高,過程之漫長,相信作過的人都深有體會。對於業務來講,水平擴容也是不得已而爲之的事情,由於水平擴容須要停服。 阿里雲
公有云上的分佈式數據庫, 爲建表和擴容提供了極簡的解決方案。以UDDB爲例,UDDB爲用戶提供了和MySQL水平分區表語法一致的建表語句, 你只須要經過Mysql客戶端發送一條建表語句, 即完成了子表建立+分表規則生效等所有操做; 同時UDDB對系統擴容提供了一鍵式的解決方案,用戶只須要點擊一個按鈕,便可等待系統擴容操做自動完成,期間系統不停服,只是在擴容期間,每隔一段時間,會有幾毫秒到零點幾秒的訪問中斷(同時擴容期間不能處理DDL語句),整個過程可以保證數據的一致性和可靠性。
固然,不論是阿里DRDS,仍是UDDB,都是須要收費的(阿里DRDS 1480/月,UDDB 1200/月,目前公測階段免費)。但我認爲,這個費用值回票價。它會讓你擺脫複雜又重複的中間件管理和運維工做,開始思考和解決對業務更爲重要和關鍵的問題,特別是對於創業團隊而言。
有可能你已經對中間件的運維瞭如指掌,積累了一整套方法和工具,橫練出一身本領, 以爲公有云產品的這套解決方案,無關緊要;也有可能你過去天天都在潛心鑽研中間件的運維和源碼, 不忍放棄已經投入的許多時間和精力。但我認爲,只要公有云產品可以解決你的問題,就應該積極擁抱它。由於中間件技術的發展趨勢來看,自動化的管理和運維,程序取代人,是大勢所趨。在一個劇烈變化的時代,我們不要作一個手拿錘子,天天只等着敲釘子的人。必然還有不少無可替代,但更關乎團隊發展甚至生死的工做;確定還有不少創新性的,能夠帶來更多價值的技能,值得咱們去發現和探索。而對於人肉作過水平擴展和數據遷移的人來講,有什麼問題是咱們不能拿下的呢。
雲上的分佈式數據庫,比單純使用中間件更好,其次體如今服務上。任何一個行業的發展,勢必致使專業的分工。對於公有云研發團隊而言, 可以生存下來的惟一可能,是這個團隊可以比客戶作的更好,比競爭對手作得更好,而要作到這一點只能是更深刻的鑽研和更優質的服務。而從規模效應而言,一個天天負責處理幾十家大客戶數據庫問題的,雲計算公司的DBA,和一個天天只負責解決自家公司數據庫問題的DBA而言, 其鍛鍊強度和升級速度是沒法比較的。對於中間件的研發和運維也是一樣如此。由於接觸了廣大的客戶,由於必需要解決客戶的問題,因此必然自身的能力須要也可以不斷提升,從而產品成熟度和服務能力也不斷提升。總之,一款公有云產品,只要可以活下來並且活好幾年,其團隊技術能力和服務能力,必然是造詣極深的。
UDDB是基於UCloud的UDB產品構建,本質上只是在UDB上面,增長一款分佈式中間件,不少能力,包括存儲節點的高可用,讀寫分離節點組,都是複用UDB的能力。所以,整個產品的穩定性值得信賴。
轉載:https://www.zhihu.com/question/31754653/answer/127013070