基於此可以實現負載均衡、讀寫分離、高可用性等需求。與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已在很多 企業的生產線上面使用。主要解決:
為什麼要使用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內部需要配置相關的認證屬性。
2、Amoeba for Aladdin
與Amoeba for MySQL 類似,客戶端連接Aladdin必須用MySQL 協議,之所以用MySQL協議,主要是想借助mysql使用的廣泛程度以及對各種開發語言的支持。Aladdin後端可以同時連接各種數據庫。只要這些數據庫提供jdbc驅動。aladdin的出現可以解決企業在數據庫整合上面提供積極的幫助。使用者不需要知道後端到底使用了什麼類型的數據庫、數據庫的物理地址什麼,這些由aladdin來分析sql語句,並且獲得相應的要查詢的表跟條件,然後由這些規則結合這些條件進行路由到相關的物理數據庫。
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的架構
Amoeba 作為DataBase Proxy的開發框架。致力於解決數據切分、讀寫分離。以下將為您介紹Amoeba 框架