特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过。如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/

大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解。本次为大家带来的是diamond核心原理的介绍,主要包括server集群的数据同步、client获取server地址、client从server获取数据、client运行时感知server的数据变化,这四部分。

一、server集群数据同步

diamond-server将数据存储在mysql和本地文件中,mysql是一个中心,diamond认为存储在mysql中的数据绝对正确,除此之外,server会将数据存储在本地文件中。

同步数据有两种方式:

(1)server写数据时,先将数据写入mysql,然后写入本地文件,写入完成后发送一个HTTP请求给集群中的其他server,其他server收到请求,从mysql中dump刚刚写入的数据至本地文件。

(2)server启动后会启动一个定时任务,定时从mysql中dump所有数据至本地文件。

二、client获取server地址

diamond-client在使用时没有指定server地址的代码,地址获取对用户是透明的。

server地址存储在一台具有域名的机器上的HTTPserver中,我们称它为地址服务器,diamond-client使用前需要在本地进行正确的域名绑定,启动时它会根据域名绑定,去对应环境的地址服务器上获取diamond-server地址列表。

获取的地址列表,会保存在client本地,当出现网络异常,无法从网络获取地址列表时,client会使用本地保存的地址列表。

client启动后会启动一个定时任务,定时从HTTPserver上获取地址列表并保存在本地,以保证地址是最新的。

三、client主动获取数据

client调用getAvailableConfigInfomation(),即可获取一份最新的可用的配置数据,获取过程实际上是拼接httpurl,使用http-client调用httpmethod的过程。

为了避免短时间内大量的获取数据请求发向server,client端实现了一个带有过期时间的缓存,client将本次获取到的数据保存在缓存中,在过期时间内的所有请求,都返回缓存内的数据,不向server发出请求。

四、client运行中感知数据变化

这是diamond最为核心的一个功能。

这个特性是通过比较client和server的数据的MD5值实现的。

server在启动时,会将所有数据的MD5加载到内存中(MD5根据某算法得出,保证数据内容不同,MD5不同,MD5存储在mysql中),数据更新时,会更新内存中对应的MD5

client在启动并第一次获取数据后,会将数据的MD5保存在内存中,并且在启动时会启动一个定时任务,定时去server检查数据是否变化。每次检查时,client将MD5传给server,server比较传来的MD5和自身内存中的MD5是否相同,如果相同,说明数据没变,返回一个标示数据不变的字符串给client;如果不同,说明数据变了,返回变化数据的dataId和group给client.client收到变化数据的dataId和group,再去server请求一次数据,拿回数据后回调监听器。

原文地址:http://aliapp.blog.51cto.com/8192229/1328021

【转】diamond专题(二)– 核心原理介绍的更多相关文章

  1. 高性能消息队列 CKafka 核心原理介绍(上)

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:闫燕飞 1.背景 Ckafka是基础架构部开发的高性能.高可用消息中间件,其主要用于消息传输.网站活动追踪.运营监控.日志聚合.流式 ...

  2. Kylin系列之二:原理介绍

    Kylin系列之二:原理介绍 2018年4月15日 15:52 因何而生 Kylin和hive的区别 1. hive主要是离线分析平台,适用于已经有成熟的报表体系,每天只要定时运行即可. 2. Kyl ...

  3. 淘宝JAVA中间件Diamond详解(二)---原理介绍

    转:http://blog.csdn.net/anhuidelinger/article/details/70314744 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本 ...

  4. ofbiz框架以及核心原理介绍

    1. 什么是Ofbiz Ofbiz(Open for business)是一个开源的,基于J2EE和XML规范的,用于构建大型企业级.跨平台.跨数据库.跨应用服务器的多层.分布式电子商务类WEB应用系 ...

  5. 淘宝JAVA中间件Diamond详解(2)-原理介绍

    淘宝JAVA中间件Diamond详解(二)---原理介绍 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本次为大家带来的是diamond核心原理的介绍,主要包括server ...

  6. diamond专题(四)—— 容灾机制

    大家好,本次为大家带来diamond的容灾机制. diamond之所以表现的稳定可靠,除了架构简单之外,另一个重要原因是diamond具有一套完备的容灾机制,容灾机制涉及到client和server两 ...

  7. 【转】diamond专题(四)—— 容灾机制

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  8. mydumper安装、原理介绍

    一.安装   安装依赖包: yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel cmake 下载二进制包: ...

  9. 新书介绍 -- 《Redis核心原理与实践》

    大家好,今天给大家介绍一下我的新书 -- <Redis核心原理与实践>. 后端开发的同学应该对Redis都不陌生,Redis由于性能极高.功能强大,已成为业界非常流行的内存数据库. < ...

随机推荐

  1. MySQL两种内核对比

    MySQL内核 https://blog.csdn.net/baichoufei90/article/details/83504446 关键字:全文索引 索引外置 两种内核:MyISAM 和InnoD ...

  2. 如何在万亿级别规模的数据量上使用Spark

    一.前言 Spark作为大数据计算引擎,凭借其快速.稳定.简易等特点,快速的占领了大数据计算的领域.本文主要为作者在搭建使用计算平台的过程中,对于Spark的理解,希望能给读者一些学习的思路.文章内容 ...

  3. PXE自动化部署

    PXE 预启动执行环境,基于tftp条件下完成基于网络的自动化部署软件 原理: 网卡利用自身的tftp 请求dhcp 服务器获取ip和一个pxelinux.0的地址 在给定的tftp目录下存有ks的配 ...

  4. CentOS7.6静默(无图形化界面)安装Oracle 11g

    一.准备工作 1.准备CentOS 7 系统环境 由于是使用静默模式(silent)安装的,无需使用图形化界面,我选择了最小安装的服务器版的CentOS 7.安装完成后,只有命令行界面. 2.下载 O ...

  5. 软件测试 基础 (三) (web 页面常见功能测试)

    web 页面中 四种常见 必测控件 输入框 1.为空 (如果不为空,页面有“*”号标注,或者只有一个输入框) a.没有任何输入,焦点离开有提示,提交页面无跳转 仍有提示 b.输入一个或多个空格,焦点离 ...

  6. 牛客练习赛44 C 小y的质数 (数论,容斥定理)

    链接:https://ac.nowcoder.com/acm/contest/634/C 来源:牛客网 题目描述 给出一个区间[L,R],求出[L,R]中孪生质数有多少对. 由于这是一个区间筛质数的模 ...

  7. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction (2017)论文要点

    论文链接: https://arxiv.org/pdf/1703.04247.pdf FM原理参考: Factorization Machines with libFM 论文阅读  https://w ...

  8. Linux查看所有子文件夹及文件的数量

    find命令查看(推荐): 所有子目录的数量: [root@localhost ~]# find afish -type d | wc -l158[root@localhost ~]# find af ...

  9. oracle表的列合并(group by)和行合并(union all)

    group by select a.dn,t.dn dnt,a.BEGIN_TIME,a.R032_001,t.R032_001,a.R032_002,a.R032_003,a.R032_004, a ...

  10. python 异常处理(五)

    异常处理&异常基类 1.处理异常 try.....except 语法: 1) try: 放可能会出现问题的代码 except: 处理错误的方式 例如: try: print(ab)  #无错执 ...