`

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

 
阅读更多

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

server集群数据同步

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

同步数据有两种方式:

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

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

 

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的过程。

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

 

client运行中感知数据变化

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

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

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

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

分享到:
评论

相关推荐

    大型网站系统与JAVA中间件实践-高清-带目录

    《大型网站系统与Java中间件实践》围绕大型网站和支撑大型网站架构的 Java 中间件的实践展开介绍。从分布式系统的知识切入,让读者对分布式系统有基本的了解;然后介绍大型网站随着数据量、访问量增长而发生的架构...

    大型网站系统与JAVA中间件实践-高清完整版

    大型网站系统与JAVA中间件实践-高清完整版,大型网站系统与JAVA中间件实践-高清完整版。

    大型网站系统与Java中间件实践(书签版)

    围绕大型网站和支撑大型网站架构的 Java 中间件的实践展开介绍。从分布式系统的知识切入,让读者对分布式系统有基本的了解;然后介绍大型网站随着数据量、访问量增长而发生的架构变迁;接着讲述构建 Java 中间件的...

    大型网站技术架构 核心原理与案例分析+李智慧-高清 和 大型网站系统与JAVA中间件实践

    《大型网站技术架构:核心原理与案例分析》与《大型网站系统与JAVA中间件实践》这两本书是深入探讨现代互联网企业级应用开发的关键资源。它们涵盖了构建和优化大规模网站所需的诸多核心技术,包括分布式系统、Java...

    大型网站系统与Java中间件开发实践 - 曾宪杰.mobi 带目录、书签、超清文字版

    大型网站系统与Java中间件开发实践 - 曾宪杰.mobi 带目录、书签、超清文字版

    金蝶中间件:AAS-V9.0.zip

    金蝶中间件AAS-V9.0是一款由国内领先的软件公司金蝶国际开发的企业级应用服务器,它在中间件领域中扮演着至关重要的角色。中间件是计算机软件的一种,它位于操作系统与应用程序之间,提供服务和支持,使得不同系统和...

    基于java的开发源码-COM中间件 JACOB.zip

    基于java的开发源码-COM中间件 JACOB.zip 基于java的开发源码-COM中间件 JACOB.zip 基于java的开发源码-COM中间件 JACOB.zip 基于java的开发源码-COM中间件 JACOB.zip 基于java的开发源码-COM中间件 JACOB.zip 基于...

    《Java中间件技术及其应用开发》-李华飚-源代码

    书中的源代码可能涉及以上这些中间件技术的具体实现和应用场景,通过阅读和理解这些代码,读者可以深入学习Java中间件技术的工作原理,并提升实际开发能力。对于想从事Java后端开发或者对Java中间件感兴趣的开发者来...

    java资源Java-COM中间件JACOB

    java资源Java-COM中间件 JACOB提取方式是百度网盘分享地址

    大型网站系统与JAVA中间件实践-曾宪杰

    二、JAVA中间件 1. **Tomcat与Jetty**:作为常见的JAVA应用服务器,Tomcat和Jetty用于部署和运行JAVA Web应用程序。它们轻量级且高效,是许多中小型网站的首选。 2. **Spring框架**:Spring是JAVA开发中的核心框架,...

    大型系统的JAva中间件实践-曾宪杰,淘宝

    标题《大型系统的Java中间件实践-曾宪杰,淘宝》和描述《InfoQ大会上淘宝的Java中间件ppt。非常有用的资料。对于理解分布式系统的架构非常有用。》表明本次分享的主题是关于淘宝在InfoQ大会上的一个关于Java中间件...

    《精通Java中间件编程》源代码.doc

    《精通Java中间件编程》源代码.doc,《精通Java中间件编程》源代码.doc,《精通Java中间件编程》源代码.doc,《精通Java中间件编程》源代码.doc,《精通Java中间件编程》源代码.doc,《精通Java中间件编程》源代码.doc,...

    《Java中间件技术及其应用开发》-李华飚-源代码-4914

    《Java中间件技术及其应用开发》是一本深入探讨Java企业级应用开发的著作,由李华飚编著。这本书的源代码包含了丰富的实例和练习,旨在帮助读者理解和掌握Java中间件的核心技术和实际运用。在4914页的源代码中,我们...

    淘宝Java中间件之路.pdf

    ### 淘宝Java中间件之路 #### 一、背景介绍 在2007年下半年以前,淘宝的技术架构面临着诸多挑战。随着业务的迅速发展,原有的技术栈难以满足日益增长的需求,尤其是对于分布式系统的管理与协调。那时的技术架构主要...

    大型网站系统与JAVA中间件实践

    之后的几章都是根据笔者的经验来介绍支撑大型网站架构的Java中间件系统的设计和实践。希望读者通过本书可以了解大型网站架构变迁过程中的较为通用的问题和解法,并了解构建支撑大型网站的Java并了解构建支撑大型网站...

    rabbitmq-java-client-bin-3.3.4

    《RabbitMQ Java客户端3.3.4详解》 RabbitMQ Java客户端是RabbitMQ消息中间件的一个重要组成部分,它允许Java开发者方便地与RabbitMQ服务器进行交互,实现消息的发布与消费。在“rabbitmq-java-client-bin-3.3.4”...

    大型网站系统与JAVA中间件实践(超清版)

    《大型网站系统与Java中间件实践》围绕大型网站和支撑大型网站架构的 Java 中间件的实践展开介绍。从分布式系统的知识切入,让读者对分布式系统有基本的了解;然后介绍大型网站随着数据量、访问量增长而发生的架构...

    大型网站系统与Java中间件实践

    《大型网站系统与Java中间件实践》围绕大型网站和支撑大型网站架构的 Java 中间件的实践展开介绍。从分布式系统的知识切入,让读者对分布式系统有基本的了解;然后介绍大型网站随着数据量、访问量增长而发生的架构...

Global site tag (gtag.js) - Google Analytics