遠哥Amoeba原始碼分析之 核心類說明

2022-02-08 01:43:14 字數 2161 閱讀 6396

同事喜歡叫我遠哥,所以我把這個筆記稱為遠哥系列,今天有興趣分析一下amoeba的原始碼,並且在此記錄一下,並且隨時更新。

amoeba目前一共有三個專案產品,分別是:

amoeba for mysql:

為mysql提供了一種資料庫**的解決方案,可以實現多台mysql之間的讀寫分離,具有負載均衡、高可用性、query過濾、讀寫分離、可路由相關的query到目標資料庫、可併發請求多台資料庫合併結果。 在amoeba上面你能夠完成多資料來源的高可用、負載均衡、資料切片的功能。

amoeba for aladdin:

類似「amoeba for mysql」,不同的是「amoeba for mysql」只支援mysql資料庫,「amoeba for aladdin」支援多種資料庫,同時還可以在後台使用多種混合資料庫。

amoeba for mongodb

:實現對nosql資料庫mongodb的**功能,具備心跳檢測、負載均衡、故障轉移、查詢聚合等功能。

從目前amoeba的系列產品來看,都是針對資料庫儲存應用在分布式群集負載場景下的解決方案,覆蓋了常用的資料庫種類。

本系列原始碼分析都是真對amoeba for mysql的,其它兩個專案其實都是基於amoeba for mysql之後,改變而來的,所以,讀懂了amoeba for mysql,也就讀懂了其他兩個專案。

如何獲得原始碼:

amoeba的原始碼目前放在google上,可以使用svn拉下來,位址為:http:

首先看一下原始碼的專案列表:

主要的幾個類:

包名:com.meidusa.amoeba.server

類名:amoebaproxyserver

職責:amoeba啟動主入口,注意,為了很好的擴充套件性,這個類在amoeba核心專案中,而不是在amoeba-mysql專案中(不管是amoeba for mysql還是amoeba for aladdin,主入口都是這個類)

包名:com.meidusa.amoeba.mysql.handler

類名:querycommandmessagehandler

職責:sql的查詢命令處理者,對於分庫分表查詢結果的合併邏輯,在其父類 commandmessagehandler.mergemessages 方法中

包名:com.meidusa.amoeba.mysql.parser

類名:mysqlqueryrouter

職責:mysql的路由解析器,根據sql語句來獲得符合路由規則中的執行緒池物件

包名:com.meidusa.amoeba.mysql.handler

類名:mysqlcommanddispatcher

職責:sql命令分發者,將客戶端請求的sql指令根據amoeba路由配置規則分發到對應的連線池中

包名:com.meidusa.amoeba.mysql.handler

類名:commandqueue

職責:sql命令執行佇列,客戶端向amoeba傳送的語句全部先進入該佇列

包名:com.meidusa.amoeba.mysql.context

類名:mysqlruntimecontext

職責:amoeba執行時上下文資訊,包括amoeba版本號、sql快取大小、快取過期時間等

包名:com.meidusa.amoeba.mysql.net

類名:mysqlclientconnection

職責:封裝客戶端連線到amoeba的連線物件

包名:com.meidusa.amoeba.mysql.net

類名:mysqlserverconnection

職責:封裝amoeba連線到物理mysql資料庫的連線物件

包名:com.meidusa.amoeba.net.poolable

類名:multipleloadbalanceobjectpool

職責:實現了乙個可以負載均衡的物件池,用到了apache下面的乙個開源專案commons-pool,在amoeba中,該物件池用來存放amoeba配置中的 server pool 物件

包名:com.meidusa.amoeba.route

類名:abstractqueryrouter

職責:實現讀寫分離的邏輯就在該抽象類中

原始碼分析之LayoutInflater

簡介 inflate填充的過程 viewstub,merge,include的載入過程 layoutinflater系統服務的註冊過程 systemserviceregistry類有個靜態 塊,完成了常用服務的註冊,如下 static 註冊am registerservice context.act...

原始碼分析之HashMap

首先hashmap繼承了abstractmap,並且實現了map cloneable和serializable三個介面。cloneable和serializable是比較常規的兩個介面,在這裡並不作為重點。重點將會放在abstractmap和map兩個規範上。其中abstractmap是乙個抽象類,...

原始碼分析之String

先看屬性 底層是char陣列,一目了然 可以看到,value是儲存string的內容的,即當使用string str abc 的時候,本質上,abc 是儲存在乙個char型別的陣列中的。string底層的儲存結構是乙個字元型別的陣列,同樣也是被final修飾,因此一旦這個字元陣列被建立後,value...