大家好,今天開始為大家帶來我們通用産品團隊的産品 —— diamond的專題,本次為大家介紹diamond的概況和快速使用。
一、概況
diamond是淘寶内部使用的一個管理持久配置的系統,它的特點是簡單、可靠、易用,目前淘寶内部絕大多數系統的配置,由diamond來進行統一管理。
diamond為應用系統提供了擷取配置的服務,應用不僅可以在啟動時從diamond擷取相關的配置,而且可以在運作中對配置資料的變化進行感覺并擷取變化後的配置資料。
持久配置是指配置資料會持久化到磁盤和資料庫中。
diamond的特點是簡單、可靠、易用:
簡單:整體結構非常簡單,進而減少了出錯的可能性。
可靠:應用方在任何情況下都可以啟動,在承載淘寶核心系統并正常運作一年多以來,沒有出現過任何重大故障。
易用:用戶端使用隻需要兩行代碼,暴露的接口都非常簡單,易于了解。
<a></a>
二、快速使用
1、源代碼檢出
從以下svn位址檢出diamond的源代碼:
<a href="http://code.taobao.org/svn/diamond/trunk" target="_blank">http://code.taobao.org/svn/diamond/trunk</a>
2、server的搭建
(1)mysql
安裝mysql-server的步驟請參考mysql官方文檔,安裝完畢後,以root使用者登入,建立使用者并賦予權限,建立資料庫,然後建表,語句分别如下:
create database diamond;
grant all on diamond.* to zh@’%’ identified by ‘abc’;
use diamond
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 ‘ ‘,
‘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’)
);
完成後,請将資料庫的配置資訊(ip,使用者名,密碼)添加到diamond-server工程的src/resources/jdbc.properties檔案中的db.url,db.user,db.password屬性上面,這裡建立的庫名,使用者名和密碼,必須和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目錄下。
啟動tomcat,即啟動了diamond-server
(4)http server
http server用來存放diamond server等位址清單,可以選用任何http server,這裡以tomcat為例。
一般來講,http server和diamond server是部署在不同機器上的,這裡簡單起見,将二者部署在同一個機器下的同一個tomcat的同一個應用中,注意,如果部署在不同的tomcat中,端口号一定是8080,不能修改(是以必須部署在不同的機器上)。
在(3)的tomcat的webapps中的diamond-server中建立檔案diamond,檔案内容是diamond-server的位址清單,一行一個位址,位址為ip,例如:
127.0.0.1
完成以上4步後,server端的搭建就完成了。
2、釋出資料
diamond釋出資料通過手工的方式進行。
成功後,可以在“配置資訊管理”中查詢到釋出的資料。
3、訂閱資料
diamond用戶端api主要提供了訂閱資料的功能.
(1)用戶端擷取服務端位址
擷取服務端位址對用戶端是透明的,用戶端僅僅需要在本地進行如下域名綁定即可:
ip a.b.c
ip為前面搭建的http-server的ip
(2)建立訂閱者
diamondmanager manager = new defaultdiamondmanager(group, dataid, new managerlistener() {
public executor getexecutor() {
return null;
}
public void receiveconfiginfo(string configinfo) {
// 用戶端處理資料的邏輯
});
參數的說明:
group和dataid為string類型,二者結合為diamond-server端儲存資料的惟一key
managerlistener 是用戶端注冊的資料監聽器, 它的作用是在運作中接受變化的配置資料,然後回調receiveconfiginfo()方法,執行用戶端處理資料的邏輯。如果要在運作中對變化的配置資料進行處理,就一定要注冊managerlistener
(3)擷取配置資料
string configinfo = manager.getavailableconfigureinfomation(timeout);
diamond-server端儲存的配置全都為文本類型,傳回給用戶端的配置資料為java.lang.string類型,timeout為從網絡擷取配置資料的逾時時間。用戶端調用每次調用該方法,都能夠保證擷取一份最新的可用的配置資料。
本文來源于"阿裡中間件團隊播客",原文發表時間" 2012-04-17 "