處理資料庫主從複製,讀寫分離,負載均衡,分庫分表軟體的優劣如mysql proxy , amoeba?

處理mysql ,mongodb資料庫,主從複製,讀寫分離,負載均衡,分庫,分表的軟體的優劣,比如:mysql proxy , amoeba nginx等? amoeba 很好嗎,有什麼其他的軟體,更優的嗎


判斷一款資料庫中間件的優劣,一方面有一些通用的指標,另一方面還是要結合業務特點,包括業務的讀寫 qps , 涉及的庫表結構和SQL語句,來進行綜合的判斷。

綜合來看,我認為應該包括這幾個方面:

1. 基本的功能是否完善。資料庫中間件的兩個主要功能是分庫分表和讀寫分離,一般的資料庫中間件,都滿足。但是再進一步剖析,分庫分表和讀寫分離,還是有不少細節需要去研究的。

比如,分庫分表功能是能夠做到一級劃分(只根據一個欄位來做分區),還是能夠做到二級劃分(能夠根據兩個欄位來做分區),劃分的形式是否多樣(常見有 range、list、hash 方式),劃分欄位的類型是否能支持多種(比如是只支持根據數值類型欄位做劃分,還是可以根據數值、字元串、日期類型做劃分)。能否提供避免數據傾斜的分區方式等。

對於讀寫分離功能,細分來看,也包括兩種,一種是透明的讀寫分離,這種功能能夠100%兼容 Mysql 或其他資料庫的 SQL 語法,同時對於事務也能夠正確處理(事務的 SQL 能夠路由到主節點,而不是分散到主節點和只讀節點); 另一種是簡單的讀寫分離,對 SQL 的支持範圍,只限於資料庫中間件內置的 SQL 解釋器,有些複雜 SQL 是支持不了的,同時對於事務,也做不到很好的支持。

同時,對讀請求的分流策略,也是讀寫分離功能一個考量點。簡單的讀寫分離功能只是把寫發往主節點,讀都發往從節點; 而讀寫分離功能做得細緻的話,資料庫中間件會能夠提供對分流策略的自定義。比如設置為:把30%的讀流量,分流到主節點,70%的讀流量分流到只讀節點。

2. 產品的成熟度、用戶的使用情況和社區(商業公司)支持程度。 資料庫中間件雖然本身不做存儲,但是每條數據都是要從中經過的,一旦出錯,可能對業務造成災難性的影響,所以軟體的正確性和穩定性非常重要。為此,中間件的成熟度、已經使用的客戶的使用情況、數量、用戶的口碑,以及開源社區或者商業公司對該產品的支持程度,就非常重要。一般來說,發布時間越長而且在持續迭代、用戶使用數量眾多,且有大規模業務使用,社區(包括 QQ 群)比較活躍,文檔完善,bug 解決及時的產品,更值得信賴。

3. 產品的易用性,是否配置方便,部署容易,系統管理不會有太大負擔。有些中間件模塊眾多,配置複雜,雖然表面上看起來功能豐富,但業務用到的可能還是最基本的幾個功能。選擇這樣的中間件,即顯得不夠划算,不僅加重運維負擔,同時後續系統的擴展,新業務的支持,也不夠敏捷。

4. 是否滿足自身業務目前的需求,和潛在的需求。 除了上述兩個通用的指標,更重要的是必須根據自己業務的庫表結構,分庫分表/讀寫分離需求,業務的SQL語句,讀寫qps,來判斷中間件產品的優劣。

比如,絕大部分中間件,目前都不能支持分散式事務和多表join,但是除了對這兩種sql不支持,不少中間件,其實在一些基本的sql,比如帶系統函數的sql、聚合類sql上,也支持不夠好。為此,在選擇中間件時,就需要根據業務的庫表結構,sql語句,以及業務特點,去檢查中間件是否對業務的目前sql和潛在sql,能夠做到比較好的支持。

另外,選擇中間件時,一定要自己做性能測試和壓力測試,實事求是地自身業務特點來測定中間件的性能和穩定性情況,不要輕信官方或者第三方發布的一些性能數據。

中間件產品的最高境界,其實是不需要特別關注中間件,從而可以把精力放在資料庫架構、優化和資料庫本身的管理上。中間件產品發展至今,也可以分為兩代,第一代是傳統的中間件軟體,如mysql proxy, mycat, oneproxy,atlas,kingshard等;第二代則是和公有雲結合的,基於中間件的分散式資料庫,如阿里DRDS、UCloud UDDB,騰訊雲DCDB For TDSQL等。

目前一代的資料庫中間件產品, 比如等,還做不到這一點,使用這些中間件,你還是需要部署中間件模塊,做各種配置,系統擴容是還需要停服做數據遷移,需要比較多的時間投入。

而二代的,基於中間件的分散式資料庫, 對用戶呈現的,是一個類似單機資料庫一樣的操作和管理界面,管理簡單,使用方便。以UCloud 的UDDB為例, 在Web控制台上,一步即可創建並配置好中間件和資料庫節點,搭建出一個完整的分散式資料庫;通過特殊的建表語句, 即可以配置表的水平劃分方式。對於中間件複雜的水平擴容問題,可以通過一個按鈕即可完成水平擴容操作,期間不停服,只是每隔一段時間有幾毫秒到零點幾秒的訪問中斷。

UDDB已經在 UCloud 北京二 可用區D 上線, 目前公測階段所有功能免費,歡迎試用。


問問題的時候,建議限制在一個更小的領域,每一個主題都有許多內容,建議先自己一個一個實施下,看每個主題有哪些策略可用。


補一個國產的OneProxy


資料庫中間件有cobar,mycat,oneproxy,kingshard,vitess,atlas,maxScale是mariaDB研發的中間件。

可以使用mycat,目前社區挺活躍的,而且可以結合mariadb galera cluster搭建,實現高可用和提高負載能力。


mysql proxy不支持預處理語句


還有DATAHEKR、性能超過Mycat,atlas,maxscale


galera cluster for mysql這個還不錯 很強大


mycat???這個好像比較新,你看看

mysql 官方還有一個mysql faribc


推薦閱讀:

MongoDB-Elasticsearch 實時數據導入
微軟校園Hackathon南京站 無駭客 不青春
煎蛋段子爬蟲prototype
MongoDB的安裝和配置

TAG:資料庫 | MySQL | MongoDB | 負載均衡 | 讀寫分離 |