Diamond之客户端架构解析

一 概念 

    diamond是阿里内部广泛使用的配置中心,主要提供持久化管理和动态配置推送服务。它的特点是简单,可靠,易用,目前阿里大多数系统的配置都由diamond进行统一管理。

应用不仅可以在启动时从diamond获取相关的配置,而且可以在运行中对配置数据的变化进行感知并获取变化后的配置数据。

持久配置是指配置数据会持久化到磁盘和数据库中。

 

二  实现原理

diamond选择了http协议提供服务,如何在request-response的通信模式下解决实时推送的问题呢? 在diamond产品发展过程中,先后使用了2种思路

1  基于拉模型的客户端轮询的方案

    优点:简单,可靠

    缺点:实时性和轮训频率有关,较高的沦陷频率会给diamond服务带来压力,客户端越多压力越大,而且配置中心是一种写少读多的系统,客户端的大数据轮询是无意义的,所以不够高效

 

2  基于推模型的客户端长轮询的方案

 

三  diamond的特点

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

可靠:应用方在任何情况下都可以启动,一直承载这阿里系海量应用的正常使用

易用:客户端只需要两行代码,暴露的借口都非常简单

 

四 diamond持久化机制

1 写入mysql 

2 写本地磁盘

3 通知集群其他机器去数据库dump更新的数据

订阅方获取到配置数据时,直接读取服务端的本地磁盘文件,尽量减少对数据库的压力。当然这种机制用了短暂的延时换取最大的性能和一致性,
一些配置不接受延时的情况下,通过API可以获取数据库中最新的配置

 

五  diamond的容灾机制

diamond作为一个分布式环境下的持久配置系统,有一套完整的容灾机制,数据被存储在:数据库,磁盘,客户端缓存目录,以及可以手工干预的容灾目录。

客户端通过API获取配置数据按照固定的顺序去不同的数据源获取数据:容灾目录,服务端磁盘,客户端缓存

 

1  数据库主库不可用,可以切换到备库,diamond继续提供服务

2  数据库主备库不可用,diamond通过服务器缓存提供服务

3  数据库主备库不可用,diamon服务端不可用,diamond客户端使用缓存目录继续运行,支持离线启动

4 数据库主备库不可用,diamond服务端不可用,diamond可会淡缓存数据被删,可以通过拷贝备份的缓存目录到容灾目录下继续使用

 

六   diamond 架构

Diamond之客户端架构解析

 

 Diamond客户端获取服务器地址

  (1)Diamond服务器列表是一份静态数据储存在httpServer中,Diamond客户端启动时从httpServer获取服务器列表

Diamond服务器之间数据同步

 (1)任何一个服务器都有其他服务器的地址,任何一个服务器的数据变更,都会将改变的数据写入到mysql中,然后通知其他服务器从mysql中dump变更的数据。

Diamond客户端获取数据

 (1)Client端在启动时会启动一个定时任务,定时去server去检查数据变化,每次检查都是将对应的数据的MD5传给server,server会比较对应数据的MD5,

如果相同说明数据没变,返回数据没变给client,如果不相等,返回变化数据的dataId、group给client。Client收到变化数据,再向server请求变更数据

交互过程

Diamond之客户端架构解析

 

七  

 

上一篇:计算机网络(四)—— 网络层(6):路由选择协议


下一篇:极客时间云原生训练营【网盘下载】