淘宝JAVA中间件Diamond详解(一)---简介&快速使用
java
你们好,今天开始为你们带来咱们通用产品团队的产品 —— diamond的专题,本次为你们介绍diamond的概况和快速使用。mysql
1、概况web
diamond是淘宝内部使用的一个管理持久配置的系统,它的特色是简单、可靠、易用,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理。redis
diamond为应用系统提供了获取配置的服务,应用不只能够在启动时从diamond获取相关的配置,并且能够在运行中对配置数据的变化进行感知并获取变化后的配置数据。sql
持久配置是指配置数据会持久化到磁盘和数据库中。数据库
diamond的特色是简单、可靠、易用:浏览器
简单:总体结构很是简单,从而减小了出错的可能性。tomcat
可靠:应用方在任何状况下均可以启动,在承载淘宝核心系统并正常运行一年多以来,没有出现过任何重大故障。网络
易用:客户端使用只须要两行代码,暴露的接口都很是简单,易于理解。app
2、快速使用
一、源代码检出
从如下svn地址检出diamond的源代码:
http://code.taobao.org/svn/diamond/trunk
二、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端的搭建就完成了。
二、发布数据
diamond发布数据经过手工的方式进行。
修改diamond-server的配置文件user.properties,以k=v的方式添加登陆diamond-server的用户名和密码。
在浏览器中输入http://ip:port/diamond-server/,ip和port为server搭建的第(2)步中的地址和端口,登陆后进入后台管理界面,而后点击“配置信息管理”—— “添加配置信息”,在输入框中输入dataId、group、内容,最后点击“提交”便可。
成功后,能够在“配置信息管理”中查询到发布的数据。
三、订阅数据
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为从网络获取配置数据的超时时间。客户端调用每次调用该方法,都可以保证获取一份最新的可用的配置数据。