Amoeba是一個類似 MySQL Proxy 的 分布式數(shù)據(jù)庫中間代理層軟件,是由陳思儒開發(fā)的一個開源的java項目。其主要功能包括讀寫分離,垂直分庫,水平分庫等,經(jīng)過測試,發(fā)現(xiàn)其功能和穩(wěn)定性都 非常的不錯,如果需要構架分布式數(shù)據(jù)庫環(huán)境,采用Amoeba是一個不錯的方案。目前Amoeba一共包括For aladdin,For MySQL和For Oracle三個版本,本文主要關注For MySQL版本的一個讀寫分離實現(xiàn)。實際上垂直切分和水平切分的架構也相差不大,改動幾個配置就可以輕松實現(xiàn)。
下圖是一個采用Amoeba的讀寫分離技術結合MySQL的Master-Slave Replication的一個分布式系統(tǒng)的架構:
Amoeba處于在應用和數(shù)據(jù)庫之間,扮演一個中介的角色,將應用傳遞過來的SQL語句經(jīng)過分析后,將寫的語句交給Master庫執(zhí)行,將讀的語句 路由到Slave庫執(zhí)行(當然也可以到Master讀,這個完全看配置)。Amoeba實現(xiàn)了簡單的負載均衡(采用輪詢算法)和Failover。如果配 置了多個讀的庫,則任何一個讀的庫出現(xiàn)宕機,不會導致整個系統(tǒng)故障,Amoeba能自動將讀請求路由到其他可用的庫上,當然,寫還是單點的依賴于 Master數(shù)據(jù)庫的,這個需要通過數(shù)據(jù)庫的切換,或者水平分割等技術來提升Master庫的可用性。
Amoeba可以在不同機器上啟動多個,并且做同樣的配置來進行水平擴展,以分擔壓力和提升可用性,可以將Amoeba和MySQL裝在同一臺機 器,也可以裝在不同的機器上,Amoeba本身不做數(shù)據(jù)緩存,所以對于內(nèi)存消耗很少,主要是CPU占用。對于應用來說,圖中的三個Amoeba就是三臺一 模一樣的MySQL數(shù)據(jù)庫,連接其中任何一臺都是可以的,所以需要在應用端有一個Load balance和Failover的機制,需要連接數(shù)據(jù)庫時從三臺中隨機挑選一臺即可,如果其他任何一臺出現(xiàn)故障,則可以自動Failover到剩余的可 用機器上。MySQL的JDBC驅(qū)動從connector-j 3.17版本起已經(jīng)提供了這樣的負載均衡和故障切換的功能,那么剩下的事情對于應用來說就很簡單了,不需要做太多的改動就能搭建一套高可用的MySQL分 布式數(shù)據(jù)庫環(huán)境,何樂而不為?
參考鏈接:
Amoeba開發(fā)者博客
Amoeba下載
Amoeba文檔
JavaEye上關于Amoeba的討論貼
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
