diamond专题(一)– 简介和快速使用
一、概况
diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单、可靠、易用,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理。
diamond为应用系统提供了获取配置的服务,应用不仅可以在启动时从diamond获取相关的配置,而且可以在运行中对配置数据的变化进行感知并获取变化后的配置数据。
持久配置是指配置数据会持久化到磁盘和数据库中。
diamond的特点是简单、可靠、易用:
简单:整体结构非常简单,从而减少了出错的可能性。
可靠:应用方在任何情况下都可以启动,在承载淘宝核心系统并正常运行一年多以来,没有出现过任何重大故障。
易用:客户端使用只需要两行代码,暴露的接口都非常简单,易于理解。
二、快速使用
1、源代码检出
从以下svn地址检出diamond的源代码:
http://code.taobao.org/svn/diamond/trunk
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发布数据通过手工的方式进行。
在浏览器中输入http://ip:8080/diamond-server/,ip为server搭建的第(2)步中的地址,以user为用户名,123为密码,登录后进入后台管理界面,然后点击“配置信息管理”—— “添加配置信息”,在输入框中输入dataId、group、内容,最后点击“提交”即可。
成功后,可以在“配置信息管理”中查询到发布的数据。
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为从网络获取配置数据的超时时间。客户端调用每次调用该方法,都能够保证获取一份最新的可用的配置数据。
参考:http://blog.csdn.net/chenzhongwei99/article/details/49491659
http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29126521&id=3853860
http://blog.csdn.net/a137268431/article/details/51262274
diamond专题(一)– 简介和快速使用的更多相关文章
- 审核流(1)SNF.WorkFlow审核流简介--SNF快速开发平台3.1
本项目是的在Spring.Net.Framework 平台之上进行研发.SNF.WorkFlow审核流是一款完全自主知识产权研发的为软件项目. 审核流基本概念:什么是审核流? 审核流:两个或两个以上的 ...
- Kotlin新语言简介和快速入门知识点
Kotlin新语言简介和快速入门知识点 简介:Kotlin是最近由JetBrains发布的一种基于JVM的编程语言,已经被Google宣布为开发Android App的一级语言Kotlin有着与Jav ...
- ElasticSearch简介和快速实战
ElasticSearch简介和快速实战 ElasticSearch与Lucene Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库(框架) 但是想要使用Lucene,必须使用 ...
- 【转】diamond专题(一)– 简介和快速使用
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- [你必须知道的NOSQL系列]专题二:Redis快速入门
一.前言 在前一篇博文介绍了MongoDB基本操作,本来打算这篇博文继续介绍MongoDB的相关内容的,例如索引,主从备份等内容的,但是发现这些内容都可以通过官方文档都可以看到,并且都非常详细,所以这 ...
- [你必须知道的NOSQL系列]专题一:MongoDB快速入门
一.前言 现在越来越多的公司开始采用非关系数据库了,并且很多公司的面试都要求面试者有MongoDB的使用经验,至于非关系数据库与关系型数据库之间的区别大家可以自行百度.但是作为程序员的我们,既然大部分 ...
- diamond专题(四)—— 容灾机制
大家好,本次为大家带来diamond的容灾机制. diamond之所以表现的稳定可靠,除了架构简单之外,另一个重要原因是diamond具有一套完备的容灾机制,容灾机制涉及到client和server两 ...
- Spring Boot从入门到精通之:一、Spring Boot简介及快速入门
Spring Boot Spring Boot 简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来 ...
- Spring Boot基础:Spring Boot简介与快速搭建(1)
1. Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建.运行.调试.部署等. Spring Boot默认使用tomca ...
随机推荐
- c++智能指针实现方式1
#include<iostream> using namespace std; // 定义仅由HasPtr类使用的U_Ptr类,用于封装使用计数和相关指针 // 这个类的所有成员都是pri ...
- sql:劳务统计各分公司管理费用明细合计(等同汇总报表)
select gl_balance.year, bd_accsubj.dispname, sum(gl_balance.debitamount) 收入, sum(gl_balance.creditam ...
- bug--service--Caused by java.lang.SecurityException: Unable to start service Intent { }:user 0 is restricted
http://bbs.coloros.com/thread-174655-1-1.html 急!!Service在OPPO系列手机下无法启动,寻求帮助 你好,我是网易邮件事业部1元夺宝开发工程师,最近 ...
- Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案
前言 刚开始创建MVC与Web API的混合项目时,碰到好多问题,今天拿出来跟大家一起分享下.有朋友私信我问项目的分层及文件夹结构在我的第一篇博客中没说清楚,那么接下来我就准备从这些文件怎么分文件夹说 ...
- Python 之 时间字符串、时间戳、时间差、任意时间字符串转换时间对象
1. 时间字符串 --> 时间戳 1) time 模块 timestring = '2016-12-21 10:22:56' print time.mktime(time.strptime(ti ...
- Fail2ban 防止暴力破解centos服务器的SSH或者FTP账户
次尝试登陆root账户失败的情况.[说明服务器被攻击了] logtarget = SYSLOG #我们需要做的就是把这行改成/var/log/fail2ban.log,方便用来记录日志信息 so ...
- Gold Game
一.项目描述:黄金点游戏 黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0 ...
- 网络编程(一):用C#下载网络文件的2种方法
使用C#下载一个Internet上的文件主要是依靠HttpWebRequest/HttpWebResonse和WebClient.具体处理起来还有同步和异步两种方式,所以我们其实有四种组合. 1.使用 ...
- UIPopoverController使用
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- QT学习(打个广告)
最近全面学习QT与c++,希望同行能够指教,于是打算建个群QQ群:85439482,欢迎大家,本群主要专注于QT皮肤库积累,软件架构以及标准c++学习.