1. 程式人生 > >Amoeba:開源的分散式資料庫Porxy解決方案

Amoeba:開源的分散式資料庫Porxy解決方案

來源:https://www.biaodianfu.com/amoeba.html

什麼是Amoeba?

Amoeba(變形蟲)專案,該開源框架於2008年 開始釋出一款 Amoeba for Mysql軟體。這個軟體致力於MySQL的分散式資料庫前端代理層,它主要在應用層訪問MySQL的 時候充當SQL路由功能,專注於分散式資料庫代理層(Database Proxy)開發。座落與 Client、DB Server(s)之間,對客戶端透明。具有負載均衡、高可用性、SQL 過濾、讀寫分離、可路由相關的到目標資料庫、可併發請求多臺資料庫合併結果。 通過Amoeba你能夠完成多資料來源的高可用、負載均衡、資料切片的功能,目前Amoeba已在很多 企業的生產線上面使用。主要解決:

  • 降低 資料切分帶來的複雜多資料庫結構
  • 提供切分規則並降低 資料切分規則 給應用帶來的影響
  • 降低 db 與客戶端的連線數
  • 讀寫分離

為什麼要使用Amoeba

隨著傳統的資料庫技術日趨成熟、計算機網路技術的飛速發展和應用範圍的擴充,資料庫應用 已經普遍建立於計算機網路之上。這時集中式資料庫系統表現出它的不足:集中式處理,勢必造成性 能瓶頸;應用程式集中在一臺計算機上執行,一旦該計算機發生故障,則整個系統受到影響,可靠性 不高;集中式處理引起系統的規模和配置都不夠靈活,系統的可擴充性差。在這種形勢下,集中式數 據庫將向分散式資料庫發展。而Amoeba的透明、簡易配置及多個優點使其成為分散式資料庫代理產品中的優秀選擇。

分散式資料庫代理的相關概念

Amoeba在分散式資料庫領域將致力解決資料切分,應付客戶端“集中式”處理分散式資料。這裡集中式是一個相對概念,客戶端不需要知道某種資料的物理儲存地。避免這種邏輯出現在業務端, 大大簡化了客戶端操作分散式資料的複雜程度。分散式資料庫系統的優點:

  • 降低費用。分散式資料庫在地理上可以式分佈的。其系統的結構符合這種分佈的要求。允許用 戶在自己的本地錄用、查詢、維護等操作,實行區域性控制,降低通訊代價,避免集中式需要更高要求 的硬體裝置。而且分散式資料庫在單臺機器上面資料量較少,其響應速度明顯提升。
  • 提高系統整體可用性。避免了因為單臺數據庫的故障而造成全部癱瘓的後果。
  • 易於擴充套件處理能力和系統規模。分散式資料庫系統的結構可以很容易地擴充套件系統,在分散式數 據庫中增加一個新的節點,不影響現有系統的正常執行。這種方式比擴大集中式系統要靈活經濟。在 集中式系統中擴大系統和系統升級,由於有硬體不相容和軟體改變困難等缺點,升級的代價常常是昂貴和不可行的。

Amoeba相關產品及其介紹

1、Amoeba for MySQL

Amoeba for MySQL致力於MySQL的分散式資料庫前端代理層,它主要在應用層訪問MySQL的時候充當query 路由功能,專注分散式資料庫proxy開發。座落與Client、DB Server(s)之間。對客戶端透明。具有負載均衡、高可用性、Query過濾、讀寫分離、可路由相關的query到目標資料庫、可併發請求多臺資料庫合併結果。 在Amoeba上面你能夠完成多資料來源的高可用、負載均衡、資料切片的功能。目前在很多企業的生產線上面使用。Amoeba for mysql對客戶端程式來說,它是一個虛擬的mysql,對外提供mysql協議。客戶端連線amoeba就象連線mysql一樣。在amoeba內部需要配置相關的認證屬性。

amoeba-for-mysql

2、Amoeba for Aladdin

與Amoeba for MySQL 類似,客戶端連線Aladdin必須用MySQL 協議,之所以用MySQL協議,主要是想借助mysql使用的廣泛程度以及對各種開發語言的支援。Aladdin後端可以同時連線各種資料庫。只要這些資料庫提供jdbc驅動。aladdin的出現可以解決企業在資料庫整合上面提供積極的幫助。使用者不需要知道後端到底使用了什麼型別的資料庫、資料庫的實體地址什麼,這些由aladdin來分析sql語句,並且獲得相應的要查詢的表跟條件,然後由這些規則結合這些條件進行路由到相關的物理資料庫。

amoeba-for-aladdin

3、Amoeba for MongoDB

隨著NoSQL的日益興起,mongoDB作為一款nosql資料庫以其優異的效能得到了廣泛的關注。可以說,mongoDB填補了傳統關係型資料庫以及傳統鍵值型資料庫的空白,並且兼具兩者優秀特質。Amoeba for MongoDB將提供與Amoeba for MySQL類似的,完全自主、可控的切分方式、並嘗試完成同樣的auto sharding的功能。 基於Amoeba框架,跟以往的產品一樣具備心跳檢測、負載均衡、故障轉移、查詢聚合等功能,保留了之前的配置方式,只要熟悉amoeba其中一款產品的配置,那麼上手將非常容易的。

比較Amoeba及其類似產品

1、Amoeba for Mysql 與MySQL Proxy比較

在MySQL proxy 6.0版本 上面如果想要讀寫分離並且 讀叢集、寫叢集 機器比較多情況下,用mysql proxy 需要相當大的工作量,目前mysql proxy沒有現成的 lua指令碼。mysql proxy根本沒有配置檔案, lua指令碼就是它的全部,當然lua是相當方便的。那麼同樣這種東西需要編寫大量的指令碼才能完成一 個複雜的配置。而Amoeba for Mysql只需要進行相關的配置就可以滿足需求。

2、Amoeba for mongoDB與mongos比較

mongodb中的資料切分有一個chunk的概念,每個chunk代表一個數據段(range),當一個chunk的大小到達了指定的資料大小,就會自動切分成兩個。 Mongos是根據資料段(chunk)進行切分的,且切分依據的欄位必須是一個key。而目前大多的應用中,id(尤其是使用者ID)是無序化的,可能有些使用者是手機號、有些是會員卡號等等。這使得proxy的range切分難以實施。 因此,雖然mongodb的mongos提供了automatic sharding的功能,但由於資料切分的不可控,常常不能滿足我們的需要。 Amoeba for MongoDB提供完全自主、可控的切分方式。

Amoeba不能做什麼?

  • 目前還不支援事務
  • 暫時不支援儲存過程(近期會支援)
  • 不適合從amoeba導資料的場景或者對大資料量查詢的query並不合適(比如一次請求返回10w以上甚至更多資料的場合)
  • 暫時不支援分庫分表,amoeba目前只做到分資料庫例項,每個被切分的節點需要保持庫表結構一致

Amoeba的架構

Amoeba 作為DataBase Proxy的開發框架。致力於解決資料切分、讀寫分離。以下將為您介紹Amoeba 框架

  • Built on Java NIO
    • NIO 框架採用無阻塞模式,不像傳統的Socket程式設計在大量併發的情況非常浪費系統資源、而且可擴充套件性也較差
  • Reusable Server Connection
    • Amoeba 提供與資料庫連線的可重用度非常高,在Amoeba系統內所有Database Connection同時共享給所有連線到Amoeba的客戶端
  • 提供讀寫分離、資料切分
    • 傳統的讀寫分離技術需要通過客戶端或者相關的Database Driver技術才能解決,而且客戶端的配置也比較複雜
    • 單臺Database 效能總是有限制的,基於Amoeba上面可以尋找一種可線性擴充套件的多資料支援。Amoeba為DBA提供一種非常友好的類似SQL語法的資料切分規則。
      同時客戶端不用擔心過多的DataBase Server會給應用帶來更多的配置。
  • 支援高可用性、負責均衡
    • Amoeba 提供Database 連線的異常檢測與連線恢復功能。
    • 使用者可節省使用其他昂貴的負載均衡的硬體裝置,Amoeba提供多臺Database Server負載均衡策略(輪詢、當前活動連線數量)。
  • Amoeba Sequence

amoeba