天天看點

淘寶JAVA中間件Diamond詳解(一)---簡介&快速使用

大家好,今天開始為大家帶來我們通用産品團隊的産品 —— diamond的專題,本次為大家介紹diamond的概況和快速使用。

一、概況

diamond是淘寶内部使用的一個管理持久配置的系統,它的特點是簡單、可靠、易用,目前淘寶内部絕大多數系統的配置,由diamond來進行統一管理。

diamond為應用系統提供了擷取配置的服務,應用不僅可以在啟動時從diamond擷取相關的配置,而且可以在運作中對配置資料的變化進行感覺并擷取變化後的配置資料。

持久配置是指配置資料會持久化到磁盤和資料庫中。

diamond的特點是簡單、可靠、易用:

簡單:整體結構非常簡單,進而減少了出錯的可能性。

可靠:應用方在任何情況下都可以啟動,在承載淘寶核心系統并正常運作一年多以來,沒有出現過任何重大故障。

易用:用戶端使用隻需要兩行代碼,暴露的接口都非常簡單,易于了解。

二、快速使用

1、源代碼檢出

從以下svn位址檢出diamond的源代碼:

http://code.taobao.org/svn/diamond/trunk

2、server的搭建

(1)mysql

安裝mysql-server的步驟請參考mysql官方文檔,安裝完畢後,建立資料庫,然後建立兩張表,建表語句分别如下:

create table config_info (

`id` bigint(64) unsigned NOT NULL auto_increment,

`data_id` varchar(255) NOT NULL default ’ ’,

`group_id` varchar(128) NOT NULL default ’ ’,

`content` longtext NOT NULL,

`md5` varchar(32) NOT NULL default ’ ’,

`src_ip` varchar(20) default NULL,

`src_user` varchar(20) default NULL,

`gmt_create` datetime NOT NULL default ’2010-05-05 00:00:00′,

`gmt_modified` datetime NOT NULL default ’2010-05-05 00:00:00′,

PRIMARY KEY  (`id`),

UNIQUE KEY `uk_config_datagroup` (`data_id`,`group_id`)

);

create table group_info (

`id` bigint(64) unsigned NOT NULL auto_increment,

`address` varchar(70) NOT NULL default ’ ’,

`data_id` varchar(255) NOT NULL default ’ ’,

`group_id` varchar(128) NOT NULL default ’ ’,

`src_ip` varchar(20) default NULL,

`src_user` varchar(20) default NULL,

`gmt_create` datetime NOT NULL default ’2010-05-05 00:00:00′,

`gmt_modified` datetime NOT NULL default ’2010-05-05 00:00:00′,

PRIMARY KEY  (`id`),

UNIQUE KEY `uk_group_address` (`address`,`data_id`,`group_id`)

);

建表完成後,請将資料庫的配置資訊添加到diamond-server工程的src/resources/jdbc.properties檔案中。

(2)tomcat

tomcat是diamond server的運作容器。

tomcat的安裝請參考tomcat官方文檔,建議使用tomcat7

不需要對tomcat進行任何改動。

(3)diamond server

在diamond-server源代碼根目錄下,執行mvn clean package -Dmaven.test.skip,成功後會在diamond-server/target目錄下生成diamond-server.war(如果沒有安裝maven,請參考maven官方文檔進行安裝)。

打包完成後,将diamond-server.war放在tomcat的webapps目錄下。

(4)http server

http server用來存放diamond server等位址清單,可以選用任何http server,這裡以tomcat為例。

安裝tomcat的步驟請參開tomcat官方文檔,注意,如果http server和diamond server安裝在一台機器上,請修改http server的端口,避免沖突。

修改完端口後,請将diamond-utils工程下的com.taobao.diamond.common.Constants類中的DEFAULT_PORT常量修改成對應的端口号。

安裝完成後,請在tomcat的webapps下建立檔案夾diamond-server和pushit-server,diamond-server中再建立diamond檔案,檔案内容是diamond-server的位址清單,一行一個位址,位址為ip;pushit-server中也建立diamond檔案,檔案内容是pushit-server的位址清單,一行一個位址,位址為ip:port(pushit後文會進行叙述)

(5)pushit

pushit是一個輕量級的消息通知服務元件,用來為diamond做實時通知服務,通知用戶端資料的變化,它也是CS的結構,服務端搭建步驟如下:

在pushit源代碼根目錄下,執行mvn clean package assembly:assembly -Dmaven.test.skip指令,成功後會在pushit/target目錄中看到pushit-pushit.tar.gz包。

執行tar -xzvf  pushit-pushit.tar.gz,進行解壓。

進入pushit目錄,建立logs目錄,在logs目錄中建立pushit.log檔案。

進入pushit/bin目錄,執行./pushit-startup.sh ../conf/server.properties指令,啟動pushit-server

(6)redis

redis用來存放一些跟統計相關的資訊。

redis的安裝請參考redis的官方文檔。

安裝完成後,請在diamond-server的配置檔案redis.properties中填寫對應的資訊。

完成以上6步後,server端的搭建就完成了。

2、釋出資料

diamond釋出資料通過手工的方式進行。

修改diamond-server的配置檔案user.properties,以k=v的方式添加登入diamond-server的使用者名和密碼。

在浏覽器中輸入http://ip:port/diamond-server/,ip和port為server搭建的第(2)步中的位址和端口,登入後進入背景管理界面,然後點選“配置資訊管理”—— “添加配置資訊”,在輸入框中輸入dataId、group、内容,最後點選“送出”即可。

成功後,可以在“配置資訊管理”中查詢到釋出的資料。

3、訂閱資料

diamond用戶端API主要提供了訂閱資料的功能.

(1)用戶端擷取服務端位址

擷取服務端位址對用戶端是透明的,用戶端僅僅需要在本地進行如下域名綁定即可:

domain  ip

其中,domain的值與diamond-utils工程下的com.taobao.diamond.common.Constants類中的DEFAULT_DOMAINNAME和DAILY_DOMAINNAME的值相同,ip為server搭建第(4)步中的http server位址。

(2)建立訂閱者

DiamondManager manager = new DefaultDiamondManager(group, dataId, new ManagerListener() {

public void receiveConfigInfo(String configInfo) {

// 用戶端處理資料的邏輯

}

});

參數的說明:

group和dataId為String類型,二者結合為diamond-server端儲存資料的惟一key

ManagerListener 是用戶端注冊的資料監聽器, 它的作用是在運作中接受變化的配置資料,然後回調receiveConfigInfo()方法,執行用戶端處理資料的邏輯。如果要在運作中對變化的配置資料進行處理,就一定要注冊ManagerListener

(3)擷取配置資料

String configInfo = manager.getAvailableConfigInfomation(timeout);

diamond-server端儲存的配置全都為文本類型,傳回給用戶端的配置資料為java.lang.String類型,timeout為從網絡擷取配置資料的逾時時間。用戶端調用每次調用該方法,都能夠保證擷取一份最新的可用的配置資料。

繼續閱讀