mysql proxy,mycat, 都是比較靠譜的中間件軟件,不管是用來做讀寫分離,還是做分庫分表。
問題是現在有比使用中間件更好的解決方案,這就是運行在公有雲上的,基於中間件技術 + 公有雲數據庫打造成的分布式數據庫。 目前典型的有阿里雲的DRDS/PetaData,騰訊雲的DCDB FOR TDSQL, 以及UCloud最近推出的UDDB。
我們所說的更好, 首先體現在系統的管理和運維上。雲上的,基於中間件的分布式數據庫,相對於單純的中間件來說, 創建/管理方便、關鍵指標可視化/自動化告警、復雜運維(如水平擴展中的數據遷移)自動化等功能點,都是節省 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