Amoeba:開源的分布式數據庫Porxy解決方案

jopen 10年前發布 | 40K 次閱讀 Amoeba

什么是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:開源的分布式數據庫Porxy解決方案

2、Amoeba for Aladdin

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

Amoeba:開源的分布式數據庫Porxy解決方案

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:開源的分布式數據庫Porxy解決方案

參考鏈接:

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!