淘宝JAVA中间件Diamond详解(一)---简介&快速使用
大家好,今天開始為大家?guī)?lái)我們通用產(chǎn)品團(tuán)隊(duì)的產(chǎn)品 —— diamond的專題,本次為大家介紹diamond的概況和快速使用。
一、概況
diamond是淘寶內(nèi)部使用的一個(gè)管理持久配置的系統(tǒng),它的特點(diǎn)是簡(jiǎn)單、可靠、易用,目前淘寶內(nèi)部絕大多數(shù)系統(tǒng)的配置,由diamond來(lái)進(jìn)行統(tǒng)一管理。
diamond為應(yīng)用系統(tǒng)提供了獲取配置的服務(wù),應(yīng)用不僅可以在啟動(dòng)時(shí)從diamond獲取相關(guān)的配置,而且可以在運(yùn)行中對(duì)配置數(shù)據(jù)的變化進(jìn)行感知并獲取變化后的配置數(shù)據(jù)。
持久配置是指配置數(shù)據(jù)會(huì)持久化到磁盤和數(shù)據(jù)庫(kù)中。
diamond的特點(diǎn)是簡(jiǎn)單、可靠、易用:
簡(jiǎn)單:整體結(jié)構(gòu)非常簡(jiǎn)單,從而減少了出錯(cuò)的可能性。
可靠:應(yīng)用方在任何情況下都可以啟動(dòng),在承載淘寶核心系統(tǒng)并正常運(yùn)行一年多以來(lái),沒(méi)有出現(xiàn)過(guò)任何重大故障。
易用:客戶端使用只需要兩行代碼,暴露的接口都非常簡(jiǎn)單,易于理解。
二、快速使用
1、源代碼檢出
從以下svn地址檢出diamond的源代碼:
http://code.taobao.org/svn/diamond/trunk
2、server的搭建
(1)mysql
安裝mysql-server的步驟請(qǐng)參考mysql官方文檔,安裝完畢后,建立數(shù)據(jù)庫(kù),然后建立兩張表,建表語(yǔ)句分別如下:
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`) );
建表完成后,請(qǐng)將數(shù)據(jù)庫(kù)的配置信息添加到diamond-server工程的src/resources/jdbc.properties文件中。
(2)tomcat
tomcat是diamondserver的運(yùn)行容器。
tomcat的安裝請(qǐng)參考tomcat官方文檔,建議使用tomcat7
不需要對(duì)tomcat進(jìn)行任何改動(dòng)。
(3)diamondserver
在diamond-server源代碼根目錄下,執(zhí)行mvncleanpackage-Dmaven.test.skip,成功后會(huì)在diamond-server/target目錄下生成diamond-server.war(如果沒(méi)有安裝maven,請(qǐng)參考maven官方文檔進(jìn)行安裝)。
打包完成后,將diamond-server.war放在tomcat的webapps目錄下。
啟動(dòng)tomcat,即啟動(dòng)了diamond-server
(4)httpserver
httpserver用來(lái)存放diamondserver等地址列表,可以選用任何httpserver,這里以tomcat為例。
一般來(lái)講,http server和diamond server是部署在不同機(jī)器上的,這里簡(jiǎn)單起見(jiàn),將二者部署在同一個(gè)機(jī)器下的同一個(gè)tomcat的同一個(gè)應(yīng)用中,注意,如果部署在不同的tomcat中,端口號(hào)一定是8080,不能修改(所以必須部署在不同的機(jī)器上)。
如果修改端口了,需要修改diamond的配置,請(qǐng)將diamond-utils工程下的com.taobao.diamond.common.Constants類中的DEFAULT_PORT常量修改成對(duì)應(yīng)的端口號(hào)。
在(3)的tomcat的webapps中的diamond-server中建立文件diamond,文件內(nèi)容是diamond-server的地址列表,一行一個(gè)地址,地址為IP,例如:
127.0.0.1
完成以上4步后,server端的搭建就完成了。
安裝完成后,請(qǐng)?jiān)趖omcat的webapps下建立文件夾diamond-server和pushit-server,diamond-server中再建立diamond文件,文件內(nèi)容是diamond-server的地址列表,一行一個(gè)地址,地址為ip;pushit-server中也建立diamond文件,文件內(nèi)容是pushit-server的地址列表,一行一個(gè)地址,地址為ip:port(pushit后文會(huì)進(jìn)行敘述)
(5)pushit
pushit是一個(gè)輕量級(jí)的消息通知服務(wù)組件,用來(lái)為diamond做實(shí)時(shí)通知服務(wù),通知客戶端數(shù)據(jù)的變化,它也是CS的結(jié)構(gòu),服務(wù)端搭建步驟如下:
在pushit源代碼根目錄下,執(zhí)行mvncleanpackageassembly:assembly-Dmaven.test.skip命令,成功后會(huì)在pushit/target目錄中看到pushit-pushit.tar.gz包。
執(zhí)行tar-xzvfpushit-pushit.tar.gz,進(jìn)行解壓。
進(jìn)入pushit目錄,建立logs目錄,在logs目錄中建立pushit.log文件。
進(jìn)入pushit/bin目錄,執(zhí)行./pushit-startup.sh../conf/server.properties命令,啟動(dòng)pushit-server
(6)redis
redis用來(lái)存放一些跟統(tǒng)計(jì)相關(guān)的信息。
redis的安裝請(qǐng)參考redis的官方文檔。
安裝完成后,請(qǐng)?jiān)赿iamond-server的配置文件redis.properties中填寫對(duì)應(yīng)的信息。
完成以上6步后,server端的搭建就完成了。
2、發(fā)布數(shù)據(jù)
diamond發(fā)布數(shù)據(jù)通過(guò)手工的方式進(jìn)行。
修改diamond-server的配置文件user.properties,以k=v的方式添加登錄diamond-server的用戶名和密碼。
在瀏覽器中輸入http://ip:port/diamond-server/,ip和port為server搭建的第(2)步中的地址和端口,登錄后進(jìn)入后臺(tái)管理界面,然后點(diǎn)擊“配置信息管理”——“添加配置信息”,在輸入框中輸入dataId、group、內(nèi)容,最后點(diǎn)擊“提交”即可。
成功后,可以在“配置信息管理”中查詢到發(fā)布的數(shù)據(jù)。
3、訂閱數(shù)據(jù)
diamond客戶端API主要提供了訂閱數(shù)據(jù)的功能.
(1)客戶端獲取服務(wù)端地址
獲取服務(wù)端地址對(duì)客戶端是透明的,客戶端僅僅需要在本地進(jìn)行如下域名綁定即可:
domainip
其中,domain的值與diamond-utils工程下的com.taobao.diamond.common.Constants類中的DEFAULT_DOMAINNAME和DAILY_DOMAINNAME的值相同,ip為server搭建第(4)步中的httpserver地址。
(2)創(chuàng)建訂閱者
DiamondManager manager = new DefaultDiamondManager(group, dataId, new ManagerListener() {
public void receiveConfigInfo(String configInfo) {
// 客戶端處理數(shù)據(jù)的邏輯
}
});
參數(shù)的說(shuō)明:
group和dataId為String類型,二者結(jié)合為diamond-server端保存數(shù)據(jù)的惟一key
ManagerListener是客戶端注冊(cè)的數(shù)據(jù)監(jiān)聽(tīng)器,它的作用是在運(yùn)行中接受變化的配置數(shù)據(jù),然后回調(diào)receiveConfigInfo()方法,執(zhí)行客戶端處理數(shù)據(jù)的邏輯。如果要在運(yùn)行中對(duì)變化的配置數(shù)據(jù)進(jìn)行處理,就一定要注冊(cè)ManagerListener
(3)獲取配置數(shù)據(jù)
String configInfo = manager.getAvailableConfigInfomation(timeout);
diamond-server端保存的配置全都為文本類型,返回給客戶端的配置數(shù)據(jù)為java.lang.String類型,timeout為從網(wǎng)絡(luò)獲取配置數(shù)據(jù)的超時(shí)時(shí)間。客戶端調(diào)用每次調(diào)用該方法,都能夠保證獲取一份最新的可用的配置數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的淘宝JAVA中间件Diamond详解(一)---简介&快速使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基金业务流程
- 下一篇: 加权框融合 WBF(Weighted B