`

diamond_使用与简介

 
阅读更多

 

它是什么

diamond为应用系统提供了获取配置的服务,应用不仅可以在启动时从diamond获取相关的配置,

而且可以在运行中对配置数据的变化进行感知并获取变化后的配置数据.

 

为什么需要它

diamond的特点是简单、可靠、易用:

简单:整体结构非常简单,从而减少了出错的可能性。

可靠:应用方在任何情况下都可以启动,在承载阿里核心系统并正常运行多年来,没有出现过任何重大故障。

易用:客户端使用只需要两行代码,暴露的接口都非常简单,易于理解。

 

常见应用场景

  1. 分表分库的DB服务器地址.
  2. 中间件的服务地址.
  3. 经常变化的开关,配置.

简单使用

引入

<dependency>
  <groupId>com.taobao.diamond</groupId>
  <artifactId>diamond-client</artifactId>
  <version>2.0.5.4.taocode-SNAPSHOT</version>
</dependency>

  

客户端代码(推荐使用方式3,若想绕过其它使用方式,强制使用方式三,DefaultDiamondManager最后一个参数写成true)

DiamondClientExample
package com.taobao.diamond.client;
import java.util.concurrent.Executor;
import com.taobao.diamond.manager.DiamondManager;
import com.taobao.diamond.manager.ManagerListener;
import com.taobao.diamond.manager.impl.DefaultDiamondManager;
/**
 * <pre>
 * diamond-server的ip列表依次按如下方式<1>,<2>,<3>寻找,寻到配置的ip列表就结束寻找,没寻找到就报异常.
 * 使用diamond时,
 *
 * 方式<1>:
 *      DefaultDiamondManager构造器中如果指定了ip列表,则以这个ip列表为准
 * 方式<2>:
 *      类路径下,增加配置文件ServerAddress,其中指定ip列表
 * 新方式<3>(兼容老方式):
 *      diamond-client首次启用会自动添加.diamond.domain文件到用户目录下
 *      客户端会使用文件中配置的域名来访问diamond-server
 *      各环境域名:
 *      diamond.sit.ds.gome.com.cn
 *      diamond.uat.ds.gome.com.cn
 *      diamond.pre.ds.gome.com.cn
 *      diamond.live.ds.gome.com.cn
 *
 * 文件.diamond.domain说明:
 *  (1)windows和mac的操作系统默认内容是diamond.sit.ds.gome.com.cn,可以自行修改
 *  (2)linux操作系统不设置默认内容,需要修改.diamond.domain来选择域名
 *  (3)若要兼容老的域名访问方式,请在.diamond.domain中配置a.b.c,同时在/etc/hosts配置a.b.c指向自己的nginx
 *
 *
 * </pre>
 *
 * @author liutingfeng
 *
 */
public class DiamondTestClient {
    public static DiamondManager manager;
    public static void main(String[] str) {
        initDiamondManager();
    }
    private static void initDiamondManager() {
        manager = new DefaultDiamondManager("group_test", "dataId_test", new ManagerListener() {
            public void receiveConfigInfo(String configInfo) {
                restart();
            }
            public Executor getExecutor() {
                return null;
            }
        },true);//true表示强制使用域名
        restart();
    }
    private static void restart() {
        String availableConfigureInfomation = manager.getAvailableConfigureInfomation(5000);
        System.out.println("availableConfigureInfomation=" + availableConfigureInfomation);
    }
}

 

 

服务端配置

 

国美线上的部署结构

 

 

容灾性

1、数据库不可用.

2、所有server均不可用.

3、client主动删除了snapshot.

4、client没有备份配置数据,导致其不能配置“容灾目录”.

diamond与springPropertyPlaceholder动态集成

///////////////////动态配置说明/////////////////////
1.引入

<dependency>
  <groupId>com.gome</groupId>
  <artifactId>gome-common-spring</artifactId>
  <version>1.0.0</version>
</dependency>
<dependency>
  <groupId>com.taobao.diamond</groupId>
  <artifactId>diamond-client</artifactId>
  <version>2.0.5.4.taocode-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>com.taobao.diamond</groupId>
  <artifactId>diamond-utils</artifactId>
  <version>2.0.5.4.taocode-SNAPSHOT</version>
</dependency>


2.项目下
  config.properties //配置了diamond定义的配置信息的 groupId和dataId 名称
  //注意这个配置规范
  ServerAddress //配置diamond的服务器pi地址

3.spring 配置

<bean id="diamondProperties" class="com.gome.spring.utils.DiamondProperties" />
<bean id="customPropertyConfigurer"
 class="com.gome.spring.lang.CustomPropertyPlaceholderConfigurer">
 <constructor-arg index="0">
 <set>
 <!-- 注意这里若没有本地配置文件时可以不配置value,但constructor-arg index set必须保留 若配置了本地配置文件,则该配置将和diamond远程配置文件合并 -->
 <value>classpath:internal.properties</value>
 </set>
 </constructor-arg>
 <constructor-arg index="1" ref="diamondProperties" />
</bean

diamond执行流程

1.读本地用户目录下 .diamond.domain 文件中的域名 ,比如 diamond.uat.ds.gome.com.cn , 如果使用a.b.c 需要在服务器hosts文件中配置

2.读步骤1中域名对应的ip , 比如:ping diamond.uat.ds.gome.com.cn ==> 10.58.50.110

3.通过步骤2中的ip取出可用的diamond-server列表, 访问 http://ip/url , 比如:curl 'http://diamond.uat.ds.gome.com.cn/url' ==> 10.58.50.204,10.58.50.205

4.通过步骤3中的ip列表,提取数据,比如(苦中group,dataId由程序中给定):curl 'http://10.58.50.204/diamond-server/config.co?group=zookeeper&dataId=url' ==> 10.58.50.203:2181,10.58.50.204:2181,10.58.50.205:2181

 

相关链接

阿里中间件团队技术博客 http://jm.taobao.org/ .

  • 大小: 154.4 KB
  • 大小: 131.3 KB
分享到:
评论

相关推荐

    EXPLORING_SKLEARN:探索sklearn:glowing_star:

    @@位简介关于图书馆基于NumPy,SciPy和Matplotlib原始名称scikit-learn构建的python库。安装pip install scikit-learn Sklearn的功能监督学习模型无监督学习模型聚类降维合奏方法特征提取功能选择开源的 :diamond_...

    思维导图大全.rar

    网络安全类思维导图大全,高清,...diamond_threat_model.png JavaWeb简介.png LAMPer技能树.jpeg Linux Security Coaching.png Linux检查脚本.jpeg Maltego使用导图.jpg Nmap 思维导图.png MPDRR模型.jpg NMAP by_mx

    diamond:分布式配置服务中心

    Diamond -- 分布式配置中心一、简介Diamond是淘宝研发的分布式配置管理系统。使用Diamond可以让集群中的服务进程动态感知数据的变化,无需重启服务就可以实现配置数据的更新。具有简单、可靠、易用等特点二、使用...

    taller_r_mujeres

    R for and for women工作坊欢迎大家 :woman: 我们希望欢迎所有在冲突与社会凝聚力研究中心( 举办的R by and Women研讨会上注册的人。讲师该研讨会将由 谁可以参加? 该活动是为想要开始使用R和RStudio的女性设计的...

    网络安全思维导图

    JavaWeb简介.png Maltego使用导图.jpg Nmap.png PHP源码审计.png Python系统审计.jpg WEB2HACK.jpg Web安全.png Web安全技术点.jpg Web服务器入侵防御.jpg Web攻击及防御技术.png XSS利用架构图.jpg XSS...

    Kotlin DSL HTTP客户端-Android开发

    简介Kotlin DSL http客户端功能:small_blue_diamond:开发人员体验驱动的库,没有冗长的内容。 Ko在Kotlin中使用HTTP客户端的本机方式。 :small_blue_diamond:HTTP GET / POST / PUT / HEAD / DELETE / PAT简介Kotlin...

    分布式数据层TDDL.zip

    TDDL动态数据源使用示例说明:http://rdc.taobao.com/team/jm/archives/1645diamond简介和快速使用:http://jm.taobao.org/tag/diamond专题/TDDL源码:https://github.com/alibaba/tb_tddl TDDL复杂度相对较高。...

    tx-dc-011121

    OO简介 :small_orange_diamond: 对象关系(一对多):index_pointing_up_light_skin_tone: - 对象关系(多对多):raised_hand_light_skin_tone: - 真理与面向对象的唯一来源 :briefcase: 介绍ORM和ActiveRecord ...

    ReportMachine

     9、更新迅速,可根据使用人员与用户的意见,不断的加入新的功能。  10、多种格式转换,可以把做出的报表转换为html,xls,pdf,bmp,jpeg等等格式。  11、自动对超长记录折行,超长的内容也会自动折行,中文换行不会...

    Sorbier Pokémon Editor:SorbierPokémon编辑-开源

    RowanPokémonEditor使您可以编辑Diamond,Pearl和Platinum版本的神奇宝贝简介。

    分布式逻辑管理平台xxl-glue.zip

    一、简介 1.1 概述 XXL-GLUE 是一个分布式环境下的逻辑管理平台, 扩展JVM的动态语言支持。 GlueHandler可以方便的嵌入到线上各个业务线中, 从而扩展相应业务模块的动态语言支持。可以节省部分...

Global site tag (gtag.js) - Google Analytics