diamond简单介绍

diamond简述

diamond是阿里巴巴开源的一款配置中心服务。
diamond中文意思是钻石,而钻石的特点有小巧、珍贵、稳定。小巧:
在如今的互联网公司中配置服务作为基础的中间件,其核心功能比较简单就是存储并管理配置数据,功能单一。
珍贵:
随着公司业务线增加及规模的扩大,传统的基于配置文件、尤其是多环境下繁杂、易出错的配置和需要动态感知配置变化时,
统一化的配置服务显得弥足重要,对开发人员更加友好,也避免了系统频繁上线。
稳定:
充分考虑线上环境可能出现由于网络、磁盘等引起各种不确定情况,提供高可用及容灾方案。

架构设计

Diamond架构由三部分组成:ConfigServer、DataServer和MySql存储,如下图所示:
ConfigServer:管理DataServer集群,将客户端与DataServer集群解耦,上下线、扩容对客户端不感知;
DataServer:提供配置的持久化管理、动态推送等服务;
MySql存储:配置数据的持久化存储,采用一主两备的部署方式保障数据的安全;


Write流程

DataServer接受到写请求后,
首先将配置数据持久化到DB
然后将配置数据变更事件异步广播到集群所有机器,包括自己在内,如下图所示:注意:
DataServer会把数据持久化到DB之后,再写到本地缓存;
主备切换期间,写服务不可用;


Read流程

DataServer读数据的时候,会先从本地缓存中读取,本地缓存不存在,再查询DB。

高可靠性:完善的容灾机制
DB主备容灾,Master挂掉后自动切换到备库,继续提供读写服务;
DB主备全部挂掉后,通过服务端本地缓存,仍可提供读服务;
DB和服务端全部挂掉后,通过客户端容灾目录下的缓存,仍可提供读服务;高吞吐量
本地缓存+Zero Copy。
首先,每台服务器以本地磁盘文件的形式缓存全量配置数据;
这样每次读请求就是一次静态文件请求,使用Zero Copy提高吞吐量实时推送
采用长轮询方式实现配置数据的实时推送

diamond搭建

服务端搭建

1、准备工作
安装jdk
安装maven
安装tomcat
安装mysql
2、启动mysql并创建数据库和表
-- 创建Diamond数据库
CREATE DATABASE IF NOT EXISTS `diamond`
USE `diamond`;-- 配置表
CREATE TABLE IF NOT EXISTS `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,`create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',`modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',PRIMARY KEY (`id`),UNIQUE KEY `uk_config_datagroup` (`data_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- 数据导出被取消选择。-- 组表
CREATE TABLE IF NOT EXISTS `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,`create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',`modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',PRIMARY KEY (`id`),UNIQUE KEY `uk_group_address` (`address`,`data_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
3、下载源码
git clone https://github.com/gzllol/diamond.git
4、打包
修改diamond-server/src/main/resources/system.properties文件,将diamond.server.addr的值换成Diamond服务器所在机器的ip地址修改diamond-server/src/main/resources/jdbc.properties文件,配置mysql服务器的url,用户名和密码在根目录执行打包命令:
mvn clean package -Dmaven.test.skip=true
5、用tomcat加载diamond-server/target/diamond-server.war

客户端使用

1、将diamond-client jar包发布到maven仓库
mvn clean deploy -Dmaven.test.skip=true
2、在工程中引入jar包
<dependency><groupId>com.taobao.diamond</groupId><artifactId>diamond-client</artifactId><version>2.0.5.4.taocode-SNAPSHOT</version>
</dependency>
3、使用例子
DiamondManager manager = new DefaultDiamondManager("${your_config_data_id}", new ManagerListener() {@Overridepublic Executor getExecutor() {return null;}@Overridepublic void receiveConfigInfo(String configInfo) {System.out.println("receive config: " + configInfo);}
});DefaultDiamondManager有三个参数分别是:groupId,dataId和listener。group和dataId为String类型,二者结合为diamond-server端保存数据的惟一keyManagerListener 是客户端注册的数据监听器, 它的作用是在运行中接受变化的配置数据,
然后回调receiveConfigInfo()方法,执行客户端处理数据的逻辑。
如果要在运行中对变化的配置数据进行处理,就一定要注册ManagerListener

如果要深入了解源码,可以参考这篇文章

4、在配置中心界面添加一个配置登陆配置中心(本机是127.0.0.1:8080),用户名abc,密码123点击左侧“配置信息管理”点击添加配置信息输入data_id(就是配置的id,3中的${your_config_data_id})和配置内容
点击“提交”在更新配置时,客户端会调用ManagerListener的回调函数receiveConfigInfo,参数就是最新的配置内容

diamond简介和搭建相关推荐

  1. 配置持久化框架diamond简介及高阶应用

    配置持久化框架diamond简介及高阶应用 前言 一.简介 二.特点 三.应用场景 四.server搭建 五.发布配置数据 六.简单应用 七.高阶应用 八.spring动态集成diamond 结束语 ...

  2. Nexus私服简介及搭建

    nexus私服简介及搭建 一 私服是什么? 1.1 私服的作用 1.2 Nexus下载 1.3 使用Nexus搭建私服 1.3.1可以修改默认端口 1.4 登陆私服时密码不对的问题解决方案 二私服的使 ...

  3. 【存储】GPFS简介及搭建

    [存储]GPFS简介及搭建 第一章 GPFS简介 1.1  GPFS 文件系统介绍 IBM的GPFS(General Parallel File System,通用并行文件系统)可以让用户共享文件系统 ...

  4. NFS(网络文件系统)简介及搭建

    NFS简介及搭建 网络文件系统 定义 演化 特点 工作原理 网络文件系统架构 网络文件系统协议 网络文件系统中的创新 网络文件系统的替代物 部署NFS 实验环境 安装nfs.rpcbind服务 在no ...

  5. 树莓派4b入门之开发RFID系统—简介、搭建MFRC522-SPI环境

    树莓派4b入门之开发RFID系统-简介.搭建MFRC522-SPI环境 一.系统简介 二.模块连接 1.引脚定义 2.接口对应关系 三.搭建接口环境 1.开启SPI 2.模块功能设计 3.安装SPI ...

  6. ad hoc模式的wifi网简介及其搭建

    Ad hoc模式的wifi网简介及搭建 1.wireless-fidelity(wifi)定义及组成:使用IEEE802.11标准协议的局域网,通常称为wifi.它的基础组成是:无线网卡及一台AP(网 ...

  7. Beego框架简介准备搭建分布式爬虫

    一.Beego简介 用scaffold脚手架工具搭建框架 每个方法都有@Router注解 Beego是MVC框架:降低耦合,提供复用性 部署 灰度上线:按产品需求优先级,抽出核心需求,在满足用户基本要 ...

  8. Mosquitto简介及搭建

    文章钢要: 1.了解Mosquitto服务器 2.在Liunx中搭建Mosquitto服务器 3.设置Mosquitto集群 一.Mosquitto简介 一款实现了消息推送协议 MQTT v3.1 的 ...

  9. 基于WPF的桌面宠物开发(一) :WPF简介+环境搭建+简单界面

    目录 一.WPF简介 1.什么是WPF? 二.WPF环境搭建 1.Visual Studio安装 2.安装 ".Net桌面开发" 工具包 3.新建WPF项目 4.导入WpfAnim ...

  10. PySpark简介、搭建以及使用

    目录 一.PySpark简介 使用场景 结构体系 二.PySpark集成搭建 三. PySpark的使用 PySpark包介绍 PySpark处理数据 PySpark中使用匿名函数 加载本地文件 Py ...

最新文章

  1. 实例44:python
  2. java api math_JAVA 函数 Math API
  3. (20)System Verilog利用clocking块产生输出信号延迟激励
  4. oracle 11G创建表空间、用户、配置监听和TNS
  5. LeetCode 73. 矩阵置零(两个标记变量)
  6. MongoDB的ObjectId生成原理
  7. 为什么像王者荣耀这样的游戏Server不愿意使用微服务??
  8. JUC编程入门(高并发)
  9. 回溯法和树的先序遍历
  10. 格式化Json字符串工具-HiJson
  11. wordpress网站添加百度导航地图
  12. 数据库 “投毒”修复方案
  13. 27岁了,目前从事软件测试,听说测试前途是IT里最差的,是这样吗?
  14. 2015 年最热门的国人开发开源软件 TOP 50
  15. 谷氨酸Glutamate
  16. 连续状态方程离散化与凸包表示形式
  17. 【渝粤教育】电大中专计算机职业素养 (3)作业 题库
  18. 小白入门计算机视觉系列——ReID(一):什么是ReID?如何做ReID?ReID数据集?ReID评测指标?
  19. 钱包缩水,消费降级,你更需要这款PDF转Word转换器
  20. 501 5.1.7 Invalid address

热门文章

  1. 【Android】五种常用布局方式详解(图文+示例)持续更新中...
  2. postgresql客户端使用
  3. premiere小tips(参考于干的教程)
  4. 科密t1消费管理系统_科密A1\T1登录密码获取软件-科密A1\T1登录密码获取工具1.0.0 安卓版-东坡下载...
  5. properties(属性文件)
  6. 创新声卡KX驱动安装、调试、使用教程
  7. 简单实用的下载百度文库文档的方法
  8. adobe flash builder4.6 安装存在问题,可能未安装某些必需组件
  9. 股票交易数据接口是什么?
  10. CoreOS部署及应用