【转】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官方文档,安装完毕后,以root用户登录,建立用户并赋予权限,建立数据库,然后建表,语句分别如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
create database diamond;grant all on diamond.* to zh@’%’ identified by ‘abc’;use diamondcreate 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是diamondserver的运行容器。
tomcat的安装请参考tomcat官方文档,建议使用tomcat7
不需要对tomcat进行任何改动。
(3)diamondserver
在diamond-server源代码根目录下,执行mvncleanpackage-Dmaven.test.skip,成功后会在diamond-server/target目录下生成diamond-server.war(如果没有安装maven,请参考maven官方文档进行安装)。
打包完成后,将diamond-server.war放在tomcat的webapps目录下。
启动tomcat,即启动了diamond-server
(4)httpserver
httpserver用来存放diamondserver等地址列表,可以选用任何httpserver,这里以tomcat为例。
一般来讲,httpserver和diamondserver是部署在不同机器上的,这里简单起见,将二者部署在同一个机器下的同一个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)客户端获取服务端地址
获取服务端地址对客户端是透明的,客户端仅仅需要在本地进行如下域名绑定即可:
ipa.b.c
ip为前面搭建的http-server的ip
(2)创建订阅者
|
1
2
3
4
5
6
7
8
|
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)获取配置数据
StringconfigInfo=manager.getAvailableConfigureInfomation(timeout);
diamond-server端保存的配置全都为文本类型,返回给客户端的配置数据为java.lang.String类型,timeout为从网络获取配置数据的超时时间。客户端调用每次调用该方法,都能够保证获取一份最新的可用的配置数据。
【转】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://blog.csdn.net/zh_winer/article/details/50395024) 一.概况 diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单 ...
- [你必须知道的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 ...
随机推荐
- Java continue 、break、标签
任何迭代语句的主体部分都可以用break和continue控制循环流程,其中break用于强行退出循环,不执行循环中剩余的语句, 而continue则停止当前的迭代,然后退回循环起始处,开始下一次迭代 ...
- 数据库oracle一些操作(MiTAC)
oracle计算时间差函数: 两个Date类型字段:START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒,毫秒): 天: ROUND(TO_NUMBER(END_D ...
- delegate作为操作符的使用
lambda表达式的出现基本上取代了delegate操作符的使用 public MainWindow() { InitializeComponent(); this.button1.Click += ...
- [转载]C++之using namespace std 详解与命名空间的使用
来源:https://blog.csdn.net/Bruce_0712/article/details/72824668 所谓namespace,是指标识符的各种可见范围.C++标准程序库中的所有标识 ...
- debezium关于cdc的使用(下)
博文原址:debezium关于cdc的使用(下) 简介 debezium在debezium关于cdc的使用(上)中有做介绍.具体可以跳到上文查看.本篇主要讲述使用kafka connector方式来同 ...
- python中同步、多线程、异步IO、多线程对IO密集型的影响
目录 1.常见并发类型 2.同步版本 3.多线程 4.异步IO 5.多进程 6.总结 1.常见并发类型 I/ O密集型: 蓝色框表示程序执行工作的时间,红色框表示等待I/O操作完成的时间.此图没有按比 ...
- python删除数组中元素
有数组a,要求去掉a所有为0的元素 a = [2,4,0,8,9,10,100,0,9,7] Filter a= filter(None, a) Lambada a = filter(lambda x ...
- vue项目中使用mockjs+axios模拟后台数据返回
自己写练手项目的时候常常会遇到一个问题,没有后台接口,获取数据总是很麻烦,于是在网上找了下,发现一个挺好用的模拟后台接口数据的工具:mockjs.现在把自己在项目中使用的方法贴出来 先看下项目的目 ...
- Vue多页面 按钮级别权限控制 directive指令控制
利用driective 构建自己的指令,实现按钮级别权限 项目结构如下: 修改router.js { path: 'schools', name: '列表', component: () => ...
- oracle 环境变量问题
ORACLE_HOME 配置为oracle ..\dbhome_1 配置错误可能导致监听起不来 (也有可能是在装client时可能会更改了之前变量的值) TNS_ADMIN ...