Amoeba:开源的分布式数据库Porxy解决方案
什么是Amoeba?
Amoeba(變形蟲(chóng))項(xiàng)目,該開(kāi)源框架于2008年 開(kāi)始發(fā)布一款 Amoeba for Mysql軟件。這個(gè)軟件致力于MySQL的分布式數(shù)據(jù)庫(kù)前端代理層,它主要在應(yīng)用層訪問(wèn)MySQL的 時(shí)候充當(dāng)SQL路由功能,專注于分布式數(shù)據(jù)庫(kù)代理層(Database Proxy)開(kāi)發(fā)。座落與 Client、DB Server(s)之間,對(duì)客戶端透明。具有負(fù)載均衡、高可用性、SQL?過(guò)濾、讀寫(xiě)分離、可路由相關(guān)的到目標(biāo)數(shù)據(jù)庫(kù)、可并發(fā)請(qǐng)求多臺(tái)數(shù)據(jù)庫(kù)合并結(jié)果。 通過(guò)Amoeba你能夠完成多數(shù)據(jù)源的高可用、負(fù)載均衡、數(shù)據(jù)切片的功能,目前Amoeba已在很多 企業(yè)的生產(chǎn)線上面使用。主要解決:
- 降低 數(shù)據(jù)切分帶來(lái)的復(fù)雜多數(shù)據(jù)庫(kù)結(jié)構(gòu)
- 提供切分規(guī)則并降低 數(shù)據(jù)切分規(guī)則 給應(yīng)用帶來(lái)的影響
- 降低 db 與客戶端的連接數(shù)
- 讀寫(xiě)分離
為什么要使用Amoeba?
隨著傳統(tǒng)的數(shù)據(jù)庫(kù)技術(shù)日趨成熟、計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的飛速發(fā)展和應(yīng)用范圍的擴(kuò)充,數(shù)據(jù)庫(kù)應(yīng)用 已經(jīng)普遍建立于計(jì)算機(jī)網(wǎng)絡(luò)之上。這時(shí)集中式數(shù)據(jù)庫(kù)系統(tǒng)表現(xiàn)出它的不足:集中式處理,勢(shì)必造成性 能瓶頸;應(yīng)用程序集中在一臺(tái)計(jì)算機(jī)上運(yùn)行,一旦該計(jì)算機(jī)發(fā)生故障,則整個(gè)系統(tǒng)受到影響,可靠性 不高;集中式處理引起系統(tǒng)的規(guī)模和配置都不夠靈活,系統(tǒng)的可擴(kuò)充性差。在這種形勢(shì)下,集中式數(shù) 據(jù)庫(kù)將向分布式數(shù)據(jù)庫(kù)發(fā)展。而Amoeba的透明、簡(jiǎn)易配置及多個(gè)優(yōu)點(diǎn)使其成為分布式數(shù)據(jù)庫(kù)代理產(chǎn)品中的優(yōu)秀選擇。
分布式數(shù)據(jù)庫(kù)代理的相關(guān)概念
Amoeba在分布式數(shù)據(jù)庫(kù)領(lǐng)域?qū)⒅铝鉀Q數(shù)據(jù)切分,應(yīng)付客戶端“集中式”處理分布式數(shù)據(jù)。這里集中式是一個(gè)相對(duì)概念,客戶端不需要知道某種數(shù)據(jù)的物理存儲(chǔ)地。避免這種邏輯出現(xiàn)在業(yè)務(wù)端, 大大簡(jiǎn)化了客戶端操作分布式數(shù)據(jù)的復(fù)雜程度。分布式數(shù)據(jù)庫(kù)系統(tǒng)的優(yōu)點(diǎn):
- 降低費(fèi)用。分布式數(shù)據(jù)庫(kù)在地理上可以式分布的。其系統(tǒng)的結(jié)構(gòu)符合這種分布的要求。允許用 戶在自己的本地錄用、查詢、維護(hù)等操作,實(shí)行局部控制,降低通信代價(jià),避免集中式需要更高要求 的硬件設(shè)備。而且分布式數(shù)據(jù)庫(kù)在單臺(tái)機(jī)器上面數(shù)據(jù)量較少,其響應(yīng)速度明顯提升。
- 提高系統(tǒng)整體可用性。避免了因?yàn)閱闻_(tái)數(shù)據(jù)庫(kù)的故障而造成全部癱瘓的后果。
- 易于擴(kuò)展處理能力和系統(tǒng)規(guī)模。分布式數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)可以很容易地?cái)U(kuò)展系統(tǒng),在分布式數(shù) 據(jù)庫(kù)中增加一個(gè)新的節(jié)點(diǎn),不影響現(xiàn)有系統(tǒng)的正常運(yùn)行。這種方式比擴(kuò)大集中式系統(tǒng)要靈活經(jīng)濟(jì)。在 集中式系統(tǒng)中擴(kuò)大系統(tǒng)和系統(tǒng)升級(jí),由于有硬件不兼容和軟件改變困難等缺點(diǎn),升級(jí)的代價(jià)常常是昂貴和不可行的。
Amoeba相關(guān)產(chǎn)品及其介紹
1、Amoeba for MySQL
Amoeba for MySQL致力于MySQL的分布式數(shù)據(jù)庫(kù)前端代理層,它主要在應(yīng)用層訪問(wèn)MySQL的時(shí)候充當(dāng)query 路由功能,專注分布式數(shù)據(jù)庫(kù)proxy開(kāi)發(fā)。座落與Client、DB Server(s)之間。對(duì)客戶端透明。具有負(fù)載均衡、高可用性、Query過(guò)濾、讀寫(xiě)分離、可路由相關(guān)的query到目標(biāo)數(shù)據(jù)庫(kù)、可并發(fā)請(qǐng)求多臺(tái)數(shù)據(jù)庫(kù)合并結(jié)果。 在Amoeba上面你能夠完成多數(shù)據(jù)源的高可用、負(fù)載均衡、數(shù)據(jù)切片的功能。目前在很多企業(yè)的生產(chǎn)線上面使用。Amoeba for mysql對(duì)客戶端程序來(lái)說(shuō),它是一個(gè)虛擬的mysql,對(duì)外提供mysql協(xié)議。客戶端連接amoeba就象連接mysql一樣。在amoeba內(nèi)部需要配置相關(guān)的認(rèn)證屬性。
2、Amoeba for Aladdin
與Amoeba for MySQL 類似,客戶端連接Aladdin必須用MySQL 協(xié)議,之所以用MySQL協(xié)議,主要是想借助mysql使用的廣泛程度以及對(duì)各種開(kāi)發(fā)語(yǔ)言的支持。Aladdin后端可以同時(shí)連接各種數(shù)據(jù)庫(kù)。只要這些數(shù)據(jù)庫(kù)提供jdbc驅(qū)動(dòng)。aladdin的出現(xiàn)可以解決企業(yè)在數(shù)據(jù)庫(kù)整合上面提供積極的幫助。使用者不需要知道后端到底使用了什么類型的數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)的物理地址什么,這些由aladdin來(lái)分析sql語(yǔ)句,并且獲得相應(yīng)的要查詢的表跟條件,然后由這些規(guī)則結(jié)合這些條件進(jìn)行路由到相關(guān)的物理數(shù)據(jù)庫(kù)。
3、Amoeba for MongoDB
隨著NoSQL的日益興起,mongoDB作為一款nosql數(shù)據(jù)庫(kù)以其優(yōu)異的性能得到了廣泛的關(guān)注。可以說(shuō),mongoDB填補(bǔ)了傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)以及傳統(tǒng)鍵值型數(shù)據(jù)庫(kù)的空白,并且兼具兩者優(yōu)秀特質(zhì)。Amoeba for MongoDB將提供與Amoeba for MySQL類似的,完全自主、可控的切分方式、并嘗試完成同樣的auto sharding的功能。 基于Amoeba框架,跟以往的產(chǎn)品一樣具備心跳檢測(cè)、負(fù)載均衡、故障轉(zhuǎn)移、查詢聚合等功能,保留了之前的配置方式,只要熟悉amoeba其中一款產(chǎn)品的配置,那么上手將非常容易的。
比較Amoeba及其類似產(chǎn)品
1、Amoeba for Mysql 與MySQL Proxy比較
在MySQL proxy 6.0版本 上面如果想要讀寫(xiě)分離并且 讀集群、寫(xiě)集群 機(jī)器比較多情況下,用mysql proxy 需要相當(dāng)大的工作量,目前mysql proxy沒(méi)有現(xiàn)成的 lua腳本。mysql proxy根本沒(méi)有配置文件, lua腳本就是它的全部,當(dāng)然lua是相當(dāng)方便的。那么同樣這種東西需要編寫(xiě)大量的腳本才能完成一 個(gè)復(fù)雜的配置。而Amoeba for Mysql只需要進(jìn)行相關(guān)的配置就可以滿足需求。
2、Amoeba for mongoDB與mongos比較
mongodb中的數(shù)據(jù)切分有一個(gè)chunk的概念,每個(gè)chunk代表一個(gè)數(shù)據(jù)段(range),當(dāng)一個(gè)chunk的大小到達(dá)了指定的數(shù)據(jù)大小,就會(huì)自動(dòng)切分成兩個(gè)。 Mongos是根據(jù)數(shù)據(jù)段(chunk)進(jìn)行切分的,且切分依據(jù)的字段必須是一個(gè)key。而目前大多的應(yīng)用中,id(尤其是用戶ID)是無(wú)序化的,可能有些用戶是手機(jī)號(hào)、有些是會(huì)員卡號(hào)等等。這使得proxy的range切分難以實(shí)施。 因此,雖然mongodb的mongos提供了automatic sharding的功能,但由于數(shù)據(jù)切分的不可控,常常不能滿足我們的需要。 Amoeba for MongoDB提供完全自主、可控的切分方式。
Amoeba不能做什么?
- 目前還不支持事務(wù)
- 暫時(shí)不支持存儲(chǔ)過(guò)程(近期會(huì)支持)
- 不適合從amoeba導(dǎo)數(shù)據(jù)的場(chǎng)景或者對(duì)大數(shù)據(jù)量查詢的query并不合適(比如一次請(qǐng)求返回10w以上甚至更多數(shù)據(jù)的場(chǎng)合)
- 暫時(shí)不支持分庫(kù)分表,amoeba目前只做到分?jǐn)?shù)據(jù)庫(kù)實(shí)例,每個(gè)被切分的節(jié)點(diǎn)需要保持庫(kù)表結(jié)構(gòu)一致
Amoeba的架構(gòu)
Amoeba 作為DataBase Proxy的開(kāi)發(fā)框架。致力于解決數(shù)據(jù)切分、讀寫(xiě)分離。以下將為您介紹Amoeba 框架
- Built on Java NIO
- NIO 框架采用無(wú)阻塞模式,不像傳統(tǒng)的Socket編程在大量并發(fā)的情況非常浪費(fèi)系統(tǒng)資源、而且可擴(kuò)展性也較差
- Reusable Server Connection
- Amoeba 提供與數(shù)據(jù)庫(kù)連接的可重用度非常高,在Amoeba系統(tǒng)內(nèi)所有Database Connection同時(shí)共享給所有連接到Amoeba的客戶端
- 提供讀寫(xiě)分離、數(shù)據(jù)切分
- 傳統(tǒng)的讀寫(xiě)分離技術(shù)需要通過(guò)客戶端或者相關(guān)的Database Driver技術(shù)才能解決,而且客戶端的配置也比較復(fù)雜
- 單臺(tái)Database 性能總是有限制的,基于Amoeba上面可以尋找一種可線性擴(kuò)展的多數(shù)據(jù)支持。Amoeba為DBA提供一種非常友好的類似SQL語(yǔ)法的數(shù)據(jù)切分規(guī)則。
同時(shí)客戶端不用擔(dān)心過(guò)多的DataBase Server會(huì)給應(yīng)用帶來(lái)更多的配置。
- 支持高可用性、負(fù)責(zé)均衡
- Amoeba 提供Database 連接的異常檢測(cè)與連接恢復(fù)功能。
- 用戶可節(jié)省使用其他昂貴的負(fù)載均衡的硬件設(shè)備,Amoeba提供多臺(tái)Database Server負(fù)載均衡策略(輪詢、當(dāng)前活動(dòng)連接數(shù)量)。
- Amoeba Sequence
參考鏈接:
- http://docs.hexnova.com/amoeba/
- https://github.com/vispractice/Amoeba-Plus-For-MySQL
- http://sourceforge.net/projects/amoeba/
總結(jié)
以上是生活随笔為你收集整理的Amoeba:开源的分布式数据库Porxy解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: NR小区搜索(一)SSB
- 下一篇: amoeba mysql_详解如何利用a