diamond专题(二)-- 核心原理介绍
大家好,通过第一篇的快速使用,大家已经对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地址存储在一台具有域名的机器上的HTTP server中,我们称它为地址服务器,diamond-client使用前需要在本地进行正确的域名绑定,启动时它会根据域名绑定,去对应环境的地址服务器上获取diamond-server地址列表。
获取的地址列表,会保存在client本地,当出现网络异常,无法从网络获取地址列表时,client会使用本地保存的地址列表。
client启动后会启动一个定时任务,定时从HTTP server上获取地址列表并保存在本地,以保证地址是最新的。
三、client主动获取数据
client调用getAvailableConfigInfomation(), 即可获取一份最新的可用的配置数据,获取过程实际上是拼接http url,使用http-client调用http method的过程。
为了避免短时间内大量的获取数据请求发向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请求一次数据,拿回数据后回调监听器。
本文来源于"阿里中间件团队播客",原文发表时间" 2012-04-17"
Dubbo3 源码解读-宋小生-6:Dubbo的SPI扩展机制之普通扩展对象的创建与Wrapper机制的源码解析 Dubbo3 已经全面取代 HSF2 成为阿里的下一代服务框架,2022 双十一基于 Dubbo3 首次实现了关键业务不停推、不降级的全面用户体验提升,从技术上,大幅提高研发与运维效率的同时地址推送等关键资源利用率提升超 40%,基于三位一体的开源中间件体系打造了阿里在云上的单元化最佳实践和统一标准,同时将规模化实践经验与技术创新贡献开源社区,极大的推动了开源技术与标准的发展。 本文是
【第四篇】XiaoZaiMultiAutoAiDevices之核心机制 在上一期说到主要的流程和部分核心运行流程,这一期我们主讲:`如何通过外部参数指定脚本运行指定设备` 测试框架传参,可能一部分同学会想到unittest的DDT,使用pytest相关装饰器和各种外部文件的数据传入方式。
Dubbo3 源码解读-宋小生-7:Dubbo的SPI扩展机制之自动激活扩展Activate源码解析 Dubbo3 已经全面取代 HSF2 成为阿里的下一代服务框架,2022 双十一基于 Dubbo3 首次实现了关键业务不停推、不降级的全面用户体验提升,从技术上,大幅提高研发与运维效率的同时地址推送等关键资源利用率提升超 40%,基于三位一体的开源中间件体系打造了阿里在云上的单元化最佳实践和统一标准,同时将规模化实践经验与技术创新贡献开源社区,极大的推动了开源技术与标准的发展。 本文是
如何实现一个图化框架?代码已开源! 大家好,我是不会写代码的纯序员——Chunel Feng[3]。俗话说,人生如码,码如人生。人生中,有些事情是可以同时进行的,有些事情又必须是前后依次进行的;有些事情是可以刚开始就做的,有些事情又必须等待某个时机成熟了才可以开始。
相关文章
- 【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
- Java--使用多线程下载,断点续传技术原理(RandomAccessFile)
- jsp学习--JSP运行原理,九大隐式对象和JSP常用标签
- 《深入探索Androdi热修复技术原理(阿里巴巴)》--读书笔记
- Ajax框架及原理分析--视频
- Python中的浮点数原理与运算分析
- Hibernate学习--hibernate延迟加载原理-动态代理(阿里电面)
- SAP UI5 基于 OData V4 的表格控件,Patch 请求的发送原理
- SAP ABAP 系统同微软 Office 套件进行 Desktop Integration 的工作原理
- 【转】MySQL索引背后的数据结构及算法原理
- Atitit.异步编程技术原理与实践attilax总结
- Atitit 自然语言处理原理与实现 attilax总结
- atitit.词法分析原理 词法分析器 (Lexer)
- SAP Cloud for Customer对UI界面元素文本的调整原理
- 【项目实战】SpringAOP入门介绍,原理与使用
- H264视频--x264编解码原理详解
- 六问六答理解ForkJoin原理
- 91.第十九章 MySQL数据库 -- 数据库原理(一)
- 《3GPP系统架构演进(SAE)原理与设计》 | 详细目录
- [闪存2.1.1] 固态硬盘存储介质闪存_闪存的物理结构_NAND_Flash工作原理
- 内网渗透(二十一)之Windows协议认证和密码抓取-Golden Ticket黄金票据制作原理及利用方式
- C# lock 语法糖实现原理--《.NET Core 底层入门》之自旋锁,互斥锁,混合锁,读写锁
- C# lock的语法糖原理--《.net core 底层入门》之自旋锁,互斥锁,混合锁,读写锁
- Mysql原理篇之MVCC原理--01
- 好玩的ES--第二篇之高级查询,索引原理和分词器
- 【java】Spring Boot --深入SpringBoot注解原理及使用
- Mysql备份原理与工具mysqldump之--single-transaction,--master-data
- Elasticsearch原理学习--为什么Elasticsearch/Lucene检索可以比MySQL快
- Iptables防火墙的基本概念以及执行原理