Jquery中文網 伊蒂哈德7比2 www.jvkwgx.com.cn
Jquery中文網 >  數據庫  >  mysql  >  正文 Amoeba:開源的分布式數據庫Porxy解決方案

吉达伊蒂哈德对阿布扎比瓦赫达:Amoeba:開源的分布式數據庫Porxy解決方案

發布時間:2017-12-13   編輯:伊蒂哈德7比2 www.jvkwgx.com.cn
jquery中文網為您提供Amoeba:開源的分布式數據庫Porxy解決方案等資源,歡迎您收藏本站,我們將為您提供最新的Amoeba:開源的分布式數據庫Porxy解決方案資源
Amoeba是一個以MySQL為底層數據存儲,并對應用提供MySQL協議接口的proxy。它集中地響應應用的請求,依據用戶事先設置的規則,將SQL請求發送到特定的數據庫上執行。

伊蒂哈德7比2 www.jvkwgx.com.cn 基于此可以實現負載均衡、讀寫分離、高可用性等需求。與MySQL官方的MySQL Proxy相比,作者強調的是amoeba配置的方便(基于XML的配置文件,用SQLJEP語法書寫規則,比基于lua腳本的MySQL Proxy簡單)。
Amoeba相當于一個SQL請求的路由器,目的是為負載均衡、讀寫分離、高可用性提供機制,而不是完全實現它們。用戶需要結合使用MySQL的 Replication等機制來實現副本同步等功能。amoeba對底層數據庫連接管理和路由實現也采用了可插撥的機制,第三方可以開發更高級的策略類來替代作者的實現。這個程序總體上比較符合KISS原則的思想。

 

什么是Amoeba?

 

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

 

<ul>
<li>降低 數據切分帶來的復雜多數據庫結構</li>
<li>提供切分規則并降低 數據切分規則 給應用帶來的影響</li>
<li>降低 db 與客戶端的連接數</li>
<li>讀寫分離</li> </ul>

 

為什么要使用Amoeba?

 

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

 

分布式數據庫代理的相關概念

 

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

 

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

 

Amoeba相關產品及其介紹

 

1、Amoeba for MySQL

 

Amoeba for MySQL致力于MySQL的分布式數據庫前端代理層,它主要在應用層訪問MySQL的時候充當query 路由功能,專注分布式數據庫proxy開發。座落與Client、DB Server(s)之間。對客戶端透明。具有負載均衡、高可用性、Query過濾、讀寫分離、可路由相關的query到目標數據庫、可并發請求多臺數據庫合并結果。 在Amoeba上面你能夠完成多數據源的高可用、負載均衡、數據切片的功能。目前在很多企業的生產線上面使用。Amoeba for mysql對客戶端程序來說,它是一個虛擬的mysql,對外提供mysql協議??突Ф肆觓moeba就象連接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不能做什么?

 

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

 

Amoeba的架構

 

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

 

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

 

amoeba

您可能感興趣的文章:
Amoeba:開源的分布式數據庫Porxy解決方案
DB2基礎知識(1)了解DB2
PostgreSQL從菜鳥到專家系列教程(1)PostgreSQL介紹
PostgreSQL從菜鳥到專家系列教程(5)什么是數據庫管理系統
Cobar基于MySQL的分布式數據庫服務中間件
PostgreSQL從菜鳥到專家系列教程(3)數據庫的數據存取設計
SQLite 60分鐘入門教程
有關php的緩存技術介紹
什么是Node.js?Node.js使用詳細介紹
細說php生成靜態文件之模板與緩存

[關閉]