`
zhaoshijie
  • 浏览: 2276959 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

淘宝JAVA中间件Diamond详解(一)---简介&快速使用

 
阅读更多
关键字:淘宝JAVA中间件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官方文档,安装完毕后,建立数据库,然后建立两张表,建表语句分别如下:

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端的搭建就完成了。

2、发布数据

diamond发布数据通过手工的方式进行。

修改diamond-server的配置文件user.properties,以k=v的方式添加登录diamond-server的用户名和密码。

在浏览器中输入http://ip:port/diamond-server/,ip和port为server搭建的第(2)步中的地址和端口,登录后进入后台管理界面,然后点击“配置信息管理”—— “添加配置信息”,在输入框中输入dataId、group、内容,最后点击“提交”即可。

成功后,可以在“配置信息管理”中查询到发布的数据。

3、订阅数据

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为从网络获取配置数据的超时时间。客户端调用每次调用该方法,都能够保证获取一份最新的可用的配置数据。
分享到:
评论

相关推荐

    diamond客户端使用方法.docx

    ### Diamond客户端使用方法详解 #### 一、简介 本文档主要介绍了如何使用Diamond客户端进行配置管理,适用于希望采用Diamond作为其应用配置管理解决方案的企业或个人开发者。Diamond客户端是一款基于Java开发的...

    java面试必会200题.docx

    - CORBA(Common Object Request Broker Architecture)是一种中间件,用于实现不同语言编写的对象之间的通信。主要用于分布式系统的互操作性。 29. **什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”*...

    Memorphosis详细手册

    Memorphosis是一个专为淘宝内部应用定制和优化的消息中间件,它源自LinkedIn开源的Kafka项目,但使用Java语言重新编写,提供了更高的性能和一系列增强功能。作为一款消息中间件,其核心设计原则主要包括: 1. **...

    STM32步进电机四轴运动控制源码揭秘:包括相对绝对定位、回原点、梯形加减速等功能揭秘及F103和F405实现策略

    内容概要:本文详细介绍了基于STM32F103和F405的四轴步进电机控制系统源码。主要内容涵盖定时器配置、相对运动、绝对运动、回原点以及梯形加减速控制的实现方法。文中对比了两款芯片在性能和代码实现上的差异,强调了硬件选型对控制效果的影响。此外,还讨论了梯形加减速的具体实现步骤及其重要性,绝对和相对运动模式的实现逻辑,以及回原点的不同实现方案。最后,文章提到了一些调试技巧和注意事项,如使用DMA减轻CPU负担、避免浮点运算带来的误差等。 适合人群:具有一定嵌入式开发经验的研发人员,尤其是对STM32和步进电机控制感兴趣的工程师。 使用场景及目标:适用于需要进行多轴步进电机控制的工程项目,如CNC机床、3D打印设备等。目标是帮助开发者理解和掌握STM32在步进电机控制方面的应用,提高系统的稳定性和效率。 其他说明:文中提供了大量代码片段作为实例,便于读者更好地理解具体实现。同时,作者分享了许多实践经验,有助于解决实际开发过程中可能遇到的问题。

    mybatis-3.0.1.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    酷信通讯系统:革新版tio3.6.2的性能超越与开源代码的创新体验

    内容概要:本文深入探讨了酷信即时通讯应用在2022年的技术创新,涵盖多个关键技术点。首先介绍了TIO版本从3.2.8升级到3.6.2所带来的显著性能提升,特别是在消息推送方面的优化,如引入消息队列机制,提高了消息推送的稳定性和效率。其次讨论了文件存储解决方案的选择,酷信摒弃传统的FastDFS,转向MinIO,实现了更简便的部署和更高的稳定性。最后强调了酷信通信端代码的全面开源,允许开发者参与改进,形成了良好的技术生态系统。此外,文中还展示了具体的代码示例,帮助读者更好地理解和应用这些技术。 适合人群:对即时通讯技术和分布式系统感兴趣的软件工程师和技术爱好者。 使用场景及目标:适用于希望深入了解即时通讯系统内部运作机制的人士,尤其是关注高性能、高可靠性和可扩展性的技术人员。通过学习酷信的技术实现,能够为自身项目的架构设计提供有价值的参考。 其他说明:文章不仅限于理论讲解,还包括大量实用的代码片段,便于读者实践操作。同时,开源策略使得酷信成为了一个优秀的学习样本,鼓励更多的开发者参与到即时通讯领域的创新中来。

    LabVIEW Excel读取:采用状态机架构与ActiveX方式实现高效数据读取

    内容概要:本文详细介绍了利用LabVIEW进行Excel文件读取的方法,主要采用了状态机架构和ActiveX技术。状态机用于管理不同操作阶段之间的平滑过渡,而ActiveX则负责与Excel应用程序进行通信。文中展示了如何通过状态机实现Excel文件的初始化、打开、遍历Sheet页以及数据处理等功能,并强调了不依赖完整Office套装的特点。此外,还探讨了动态创建选项卡和表格控件的技术细节,以及使用引用传递减少内存占用的有效措施。同时,针对可能出现的问题提供了相应的解决办法,如确保Excel进程正确关闭和处理隐藏Sheet页的方式。 适合人群:对LabVIEW有一定了解并希望深入掌握其与外部软件(如Excel)交互能力的工程师和技术爱好者。 使用场景及目标:适用于需要频繁处理大量Excel数据的企业级应用场景,特别是在那些无法安装完整Office套件的环境中。通过本方案可以快速读取Excel文件内容并在LabVIEW界面上直观展示,提高工作效率。 其他说明:本文不仅提供了一种创新性的LabVIEW与Excel交互解决方案,而且对于状态机的设计思路也有详细的阐述,有助于读者更好地理解和应用这一重要概念。

    移动端安全测试_虚拟化模拟器动态注入_多架构多版本指纹浏览器环境修改_通过底层配置修改和分布式测试实现浏览器指纹完美伪装与真机环境一致性验证的云计算级自动化测试平台_用于大规模移动.zip

    移动端安全测试_虚拟化模拟器动态注入_多架构多版本指纹浏览器环境修改_通过底层配置修改和分布式测试实现浏览器指纹完美伪装与真机环境一致性验证的云计算级自动化测试平台_用于大规模移动

    Screenshot_20250504_192300.jpg

    Screenshot_20250504_192300.jpg

    aws-java-sdk-s3-1.12.255.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    智能穿戴设备开发_Flutter跨平台开发_Android_WearOS_智能手表应用_哔哩哔哩API接口调用_视频流媒体处理_用户界面适配_手势操作优化_在智能手表上实现哔哩哔哩.zip

    智能穿戴设备开发_Flutter跨平台开发_Android_WearOS_智能手表应用_哔哩哔哩API接口调用_视频流媒体处理_用户界面适配_手势操作优化_在智能手表上实现哔哩哔哩

    mybatis-3.4.1.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    HChenX_AutoSEffSwitch_12888_1745869156796.zip

    HChenX_AutoSEffSwitch_12888_1745869156796

    iOS移动应用开发_Swift5UIKitAlamofireKingfisherSnapKit_百思不得姐API接口调用首页推荐段子图文视频播放评论互动用户中心.zip

    iOS移动应用开发_Swift5UIKitAlamofireKingfisherSnapKit_百思不得姐API接口调用首页推荐段子图文视频播放评论互动用户中心

    thymeleaf-1.1.5.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    智能穿戴设备开发_Android_SDK_Geakwear_第三方开发者工具包_用于快速开发兼容Geakwear和Android_Wear的智能手表应用_包含数据通信_消息推送_健.zip

    智能穿戴设备开发_Android_SDK_Geakwear_第三方开发者工具包_用于快速开发兼容Geakwear和Android_Wear的智能手表应用_包含数据通信_消息推送_健

    Matlab调制解调与OFDM、OTFS技术仿真:16QAM、QPSK、LDPC与Turbo码在高斯白噪声及频率选择性衰落信道下的误比特率性能分析(含保护间隔与信道均衡算法实现代码详解)

    内容概要:本文详细介绍了如何使用MATLAB进行OFDM和OTFS调制解调及其在高斯白噪声(AWGN)和频率选择性衰落信道下的性能仿真。文中涵盖了16QAM、QPSK调制,LDPC和Turbo信道编码的具体实现,并讨论了保护间隔(CP)和信道均衡(如ZF、MMSE)的方法。此外,还简要介绍了OTFS作为一种新兴调制技术的优势及其与时频域处理的区别。通过详细的代码示例和理论解释,展示了不同调制方式、编码技术和信道条件下误比特率(BER)的变化情况。 适合人群:通信工程专业的学生、研究人员以及从事无线通信系统开发的技术人员。 使用场景及目标:①理解和掌握OFDM和OTFS的基本原理和技术细节;②评估不同调制方式、信道编码和信道条件对通信系统性能的影响;③为实际通信系统的优化设计提供参考依据。 其他说明:附带完整的MATLAB代码包,包括OFDM/OTFS发射接收链、多径信道模型、多种均衡器实现和BER测试框架等,便于读者动手实践。

    【Linux内核开发】调试方法框架全解析:从准备工作到高级工具的应用与优化

    内容概要:本文深入探讨了Linux内核开发调试方法框架,全面覆盖了从前期准备到具体调试工具和技术的应用。文章首先介绍了Linux内核的重要性及其开发挑战,强调了调试在内核开发中的关键作用。随后,详细阐述了调试前的必备工作,包括确认bug的存在、了解内核版本号、深入理解内核代码、确保bug可复现以及最小化系统。接着,文章介绍了内核调试配置选项,如“Magic SysRq key”和“Kernel debugging”等关键配置项,以及调试原子操作的设置。在引发bug与打印信息方面,讲解了BUG()和BUG_ON()宏、dump_stack()函数的作用,并深入解析了printk()函数的健壮性、局限性及LOG等级设定。文件系统如procfs、sysfs和debugfs在调试中的应用也被详细说明。最后,介绍了ftrace与trace-cmd、kprobe与systemtap、KGDB与KGT等调试工具和技术。; 适合人群:具备一定Linux基础知识和编程经验的研发人员,尤其是从事操作系统开发、内核优化或嵌入式系统开发的工程师。; 使用场景及目标:①帮助开发者在内核开发过程中快速定位和解决bug;②提升对内核代码的理解,掌握内核调试的常用工具和方法;③通过实际案例和具体技术手段,提高内核开发的效率和稳定性。; 其他说明:本文不仅提供了理论知识,还结合了大量实际案例和具体操作步骤,旨在帮助读者全面掌握Linux内核调试的精髓。随着技术的进步,未来内核调试有望借助AI和机器学习实现智能化和自动化,进一步提升调试效率。

    电子商务平台_SpringBoot20_SpringCloudFinchley_SpringCloudAlibaba_微服务架构_RBAC权限管理_OAuth2认证_JWT令牌_.zip

    电子商务平台_SpringBoot20_SpringCloudFinchley_SpringCloudAlibaba_微服务架构_RBAC权限管理_OAuth2认证_JWT令牌_

    流媒体传输技术_RTMP客户端SDK_H264H265视频解码_跨平台音视频采集组件_全架构兼容性工具_支持WindowsLinuxAndroidiOSARM_提供稳.zip

    流媒体传输技术_RTMP客户端SDK_H264H265视频解码_跨平台音视频采集组件_全架构兼容性工具_支持WindowsLinuxAndroidiOSARM_提供稳

Global site tag (gtag.js) - Google Analytics