日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

介绍Amoeba

發布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 介绍Amoeba 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 介紹Amoeba

1. Amoeba是什么?

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

2. 為何要使用Amoeba?

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

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

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

分布式數據庫系統的優點:

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

4. Amoeba相關產品及其介紹

  • Amoeba for MySQL

Amoeba for MySQL致力于MySQL的分布式數據庫前端代理層,它主要在應用層訪問MySQL的時候充當query 路由功能,專注 分布式數據庫 proxy 開發。座落與Client、DB Server(s)之間。對客戶端透明。具有負載均衡、高可用性、Query過濾、讀寫分離、可路由相關的query到目標數據庫、可并發請求多臺數據庫合并結果。 在Amoeba上面你能夠完成多數據源的高可用、負載均衡、數據切片的功能。目前在很多企業的生產線上面使用。

那么Amoeba for mysql 對客戶端程序來說是什么呢? 我們就當它是mysql吧,它是一個虛擬的mysql,對外提供mysql協議。客戶端連接amoeba就象連接mysql一樣。在amoeba內部需要配置相關的認證屬性。具體請參閱后面的章節。?

  • Amoeba for Aladdin

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

  • Amoeba for MongoDB

隨著NoSQL的日益興起,mongoDB作為一款nosql數據庫以其優異的性能得到了廣泛的關注??梢哉f,mongoDB填補了傳統關系型數據庫以及傳統鍵值型數據庫的空白,并且兼具兩者優秀特質。Amoeba for MongoDB將提供與Amoeba for MySQL類似的,完全自主、可控的切分方式、并嘗試完成同樣的auto sharding的功能。 基于Amoeba框架,跟以往的產品一樣具備心跳檢測、負載均衡、故障轉移、查詢聚合等功能,保留了之前的配置方式,只要熟悉amoeba其中一款產品的配置,那么上手將非常容易的。

5. 比較Amoeba及其類似產品

  • Amoeba for Mysql 與MySQL Proxy比較

在MySQL proxy 6.0版本 上面如果想要讀寫分離并且 讀集群、寫集群 機器比較多情況下,用mysql proxy 需要相當大的工作量,目前mysql proxy沒有現成的 lua腳本。mysql proxy根本沒有配置文件, lua腳本就是它的全部,當然lua是相當方便的。那么同樣這種東西需要編寫大量的腳本才能完成一 個復雜的配置。而Amoeba for Mysql只需要進行相關的配置就可以滿足需求。

  • Amoeba for mongoDB與mongos比較

mongodb中的數據切分有一個chunk的概念,每個chunk代表一個數據段(range),當一個chunk的大小到達了指定的數據大小,就會自動切分成兩個。 Mongos是根據數據段(chunk)進行切分的,且切分依據的字段必須是一個key。而目前大多的應用中,id(尤其是用戶ID)是無序化的,可能有些用戶是手機號、有些是會員卡號等等。這使得proxy的range切分難以實施。 因此,雖然mongodb的mongos提供了automatic sharding的功能,但由于數據切分的不可控,常常不能滿足我們的需要。 Amoeba for MongoDB提供完全自主、可控的切分方式。

6. Amoeba不能做什么?

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

二. 安裝和運行Amoeba

1. 驗證Java安裝

Amoeba框架是基于Java SE1.6開發的,建議使用Java SE 1.6版本。% java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
目前Amoeba經驗證在JavaTM?SE 1.5和Java SE 1.6能正常運行,(可能包括其他未經驗證的版本)。

如果你的機器上沒有安裝JavaTM環境,可以訪問http://www.oracle.com/technetwork/java/javase/downloads/index.html進行下載。可以根據你的操作系統等詳情安裝JavaTM環境。

2. 下載Amoeba

你可以在Amoeba在SourceForge的主頁下載Amoeba,http://sourceforge.net/projects/amoeba/files/。

當你下載的時候,請確保選擇Amoeba的最新版本。Amoeba目前有三個開源產品,分別是適用于擁有JDBC Driver的數據庫的Amoeba for Aladdin、適用于MySQL數據庫的Amoeba for MySQL以及適用于mongoDB數據庫的Amoeba for mongoDB。本指南編寫時,Amoeba for Aladdin的最新版本是amoeba-aladdin-0.7.0-BETA.tar.gz,Amoeba for MySQL的最新版本是amoeba-mysql-binary-2.0.1-BETA.tar.gz,Amoeba for mongoDB的最新版本是amoeba-mongodb-binary-1.2.0-BETA.tar.gz,請選擇合適的版本下載。

3. 安裝Amoeba

不同操作系統因其實現不同而有較大差異,以下小節概括了在常見系統中安裝Amoeba的最佳實踐。

以下的安裝過程僅僅以Amoeba for MySQL作為例子,Amoeba for Aladdin和Amoeba for MongoDB的安裝方式是類似的。

  • 在Microsoft Windows上安裝Amoeba

你可以從http://sourceforge.net/projects/amoeba/files/下載Amoeba的最新版本。找個地方存放它,并解壓到你需要安裝的位置。這里假設你將存檔文件解壓到C:\Program Files\amoeba-mysql-binary-2.0.1-BETA,解壓到其他路徑是一樣的。進入Ameoba運行目錄:C:\Users\Admin > cd c:\Program Files\amoeba-mysql-binary-2.0.1-BETA\bin

  • 在Linux上安裝Amoeba

與在Microsoft Windows系統上安裝的過程類似,下載后存放并解壓到安裝的位置。這里假設你將存檔文件解壓到/usr/local/amoeba-mysql-binary-2.0.1-BETA,解壓到其他路徑也是一樣的。進入Ameoba運行目錄:[]$ cd AMOEBA_HOME=/usr/local/amoeba-mysql-binary-2.0.1-BETA/bin

  • 在Mac OSX上安裝Amoeba

參照第3.2節。

  • 在FreeBSD或OpenBSD上安裝Amoeba

參照第3.2節。

4. 驗證Amoeba的安裝

安裝完成后,你可以通過命令確定Amoeba是否成功安裝。$ amoeba
amoeba start|stop
請按任意鍵繼續. . .

三. Amoeba入門

1. 通過Amoeba對一個數據庫實例進行操作

本小節的主要目的是幫助你在修改最少配置并且僅僅有最少資源的情況下,快速的搭建起一個可用的,通過Amoeba連接的數據庫。本節并不會講述Amoeba的一些更實用的功能(比如分片等等)但相信這節會給你一個極大的使用Amoeba的信心,你會發現Amoeba的使用比想象的簡單地多。

2. 校驗amoeba的運行狀態

根據上一章文檔,相信你應該已經配置完成了Amoeba的環境。執行以下命令:$ $AMOEBA_HOME/bin/amoeba
amoeba start|stop
請按任意鍵繼續. . .當出現如上提示,表示Amoeba可以正常啟動。

3. 驗證數據庫是否可以正常連接

要通過Amoeba來連接數據庫首先數據庫需要正常對外提供服務,根據不同的數據庫類型按以下方式進行驗證。

MySQL的情形下:

$ mysql -uroot -ppassword -h127.0.0.1 -P3306 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 125 Server version: 5.5.9 MySQL Community Server (GPL)Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
這里只是一個命令的例子,其中*-u選項后是MySQL用戶名、-p選項后是MySQL密碼、-h選項后是MySQL所在主機地址以及-P{*}選項后是MySQL服務的端口號。

通過以上命令你可以驗證MySQL的正常對外服務。

Caution

需要注意的是,以上命令需要在Amoeba所在的機器執行。因為iptables等配置很容易使得Amoeba無法訪問MySQL。

MongoDB的情形下:

$ mongo 127.0.0.1:27017 MongoDB shell version: 1.6.2 connecting to: 127.0.0.1:27017/test >
里只是一個mongodb登錄命令的示例,其中的主機地址以及端口號需根據你的實際情況。

Caution

需要注意的是,以上命令需要在Amoeba所在的機器執行。因為iptables等配置很容易使得Amoeba無法訪問mongoDB。

4. 配置Amoeba

在這一節主要包含對Amoeba進行最基本的配置使得你可以通過Amoeba對一臺數據庫進行操作,當然借由這個機會本節也將對Amoeba的配置文件梗概性地介紹。

Amoeba基礎配置介紹

Amoeba有哪些主要的配置文件?

  • 想象Amoeba作為數據庫代理層,它一定會和很多數據庫保持通信,因此它必須知道由它代理的數據庫如何連接,比如最基礎的:主機IP、端口、Amoeba使用的用戶名和密碼等等。這些信息存儲在$AMOEBA_HOME/conf/dbServers.xml中。
  • Amoeba為了完成數據切分提供了完善的切分規則配置,為了了解如何分片數據、如何將數據庫返回的數據整合,它必須知道切分規則。與切分規則相關的信息存儲在$AMOEBA_HOME/conf/rule.xml中。
  • 當我們書寫SQL來操作數據庫的時候,常常會用到很多不同的數據庫函數,比如:UNIX_TIMESTAMP()、SYSDATE()等等。這些函數如何被Amoeba解析呢?$AMOEBA_HOME/conf/functionMap.xml描述了函數名和函數處理的關系。
  • 對$AMOEBA_HOME/conf/rule.xml進行配置時,會用到一些我們自己定義的函數,比如我們需要對用戶ID求HASH值來切分數據,這些函數在$AMOEBA_HOME/conf/ruleFunctionMap.xml中定義。
  • Amoeba可以制定一些可訪問以及拒絕訪問的主機IP地址,這部分配置在$AMOEBA_HOME/conf/access_list.conf中
  • Amoeba允許用戶配置輸出日志級別以及方式,配置方法使用log4j的文件格式,文件是$AMOEBA_HOME/conf/log4j.xml。

配置一個DB節點

以下是配置一個DB節點,使用Amoeba做操作轉發的步驟:

  • 首先,在$AMOEBA_HOME/conf/dbServers.xml中配置一臺數據庫,如下:
    Example?1.1.?簡單的DB節點配置 <?xml version="1.0" encoding="gbk"?><!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd"> <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/"><!--Each dbServer needs to be configured into a Pool,If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfigsuch as 'multiPool' dbServer--><dbServer name="abstractServer" abstractive="true"><factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory"><property name="manager">${defaultManager}</property><property name="sendBufferSize">64</property><property name="receiveBufferSize">128</property><!-- mysql port --><property name="port">3306</property><!-- mysql schema --><property name="schema">test</property><!-- mysql user --><property name="user">root</property><!-- mysql password --><property name="password">password</property></factoryConfig><poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool"><property name="maxActive">500</property><property name="maxIdle">500</property><property name="minIdle">10</property><property name="minEvictableIdleTimeMillis">600000</property><property name="timeBetweenEvictionRunsMillis">600000</property><property name="testOnBorrow">true</property><property name="testWhileIdle">true</property></poolConfig></dbServer><dbServer name="server1" parent="abstractServer"><factoryConfig><!-- mysql ip --><property name="ipAddress">127.0.0.1</property></factoryConfig></dbServer><dbServer name="multiPool" virtual="true"><poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"><!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--><property name="loadbalance">1</property><!-- Separated by commas,such as: server1,server2,server1 --><property name="poolNames">server1</property></poolConfig></dbServer></amoeba:dbServers>
  • 以下對這個簡單的配置文件進行一些分析:
    ?這份dbServers配置文件中,我們定義了三個dbServer元素,這是第一個dbServer元素的定義。這個名為abstractServer的dbServer,其abstractive屬性為true,這意味著這是一個抽象的dbServer定義,可以由其他dbServer定義拓展。
    ?在第一個dbServer元素分別定義MySQL的端口號、數據庫名、用戶名以及密碼。
    ?manager定義了該dbServer選擇的連接管理器(ConnectionManager),這里引用了amoeba.xml的配置,稍后介紹。
    ?dbServer下有poolConfig的元素,這個元素的屬性主要配置了與數據庫的連接池,與此相關的具體配置會在后面的章節中詳細介紹。
    ?命名為server1的dbServer元素,正如你設想的那樣,這個server1是abstractServer的拓展,parent屬性配置了拓展的抽象dbServer,它拓展了abstractServer的ipAddress屬性來指名數據庫的IP地址,而在端口、用戶名密碼、連接池配置等屬性沿用了abstractServer的配置。
    ?server1拓展了abstractServer的ipAddress屬性。
    ?這一段其實并不需要配置,并不會影響到基本使用。以下大致介紹下此配置的含義:multiPool是一個虛擬的數據庫節點,可以將這個節點配置成好幾臺數據庫組成的數據庫池。比如上面這個配置中僅配置了一臺server1,負載均衡策略為ROUNDROBIN(輪詢)。與虛擬數據庫節點相關的詳細教程會在后面的章節中介紹。

    由此,你大概可以理解定義abstractServer的原因:當我們有一個數據庫集群需要管理,這個數據庫集群中節點的大部分信息可能是相同的,比如:端口號、用戶名、密碼等等。因此通過歸納這些共性定義出的abstractServer極大地簡化了dbServers配置文件:

  • Example?1.2.?一個利用定義抽象節點配置集群的例子
  • <?xml version="1.0" encoding="gbk"?><!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd"> <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/"><dbServer name="abstractServerForBilling" abstractive="true"><factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory"><property name="manager">${defaultManager}</property><property name="sendBufferSize">64</property><property name="receiveBufferSize">128</property><property name="port">3306</property><property name="schema">test</property><property name="user">root</property><property name="password">password</property></factoryConfig><poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool"><property name="maxActive">500</property><property name="maxIdle">500</property><property name="minIdle">10</property><property name="minEvictableIdleTimeMillis">600000</property><property name="timeBetweenEvictionRunsMillis">600000</property><property name="testOnBorrow">true</property><property name="testWhileIdle">true</property></poolConfig></dbServer><dbServer name="billing1" parent="abstractServer"><factoryConfig><!-- mysql ip --><property name="ipAddress">192.168.0.1</property></factoryConfig></dbServer><dbServer name="billing2" parent="abstractServer"><factoryConfig><!-- mysql ip --><property name="ipAddress">192.168.0.2</property></factoryConfig></dbServer> ...... </amoeba:dbServers>
  • 再配置完dbServer.xml后,繼續配置amoeba.xml文件:
    Example?1.3.?一個基本的amoeba.xml例子
  • 總結

    以上是生活随笔為你收集整理的介绍Amoeba的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。