分布式配置中心Diamond

架构设计

  Diamond架构由三部分组成:ConfigServer、DataServer和MySql存储,如下图所示:
这里写图片描述
ConfigServer:管理DataServer集群,将客户端与DataServer集群解耦,上下线、扩容对客户端不感知;

DataServer:提供配置的持久化管理、动态推送等服务;
MySql存储:配置数据的持久化存储,采用一主两备的部署方式保障数据的安全;

Write流程

  DataServer接受到写请求后,首先将配置数据持久化到DB,然后将配置数据变更事件异步广播到集群所有机器,包括自己在内,如下图所示:
这里写图片描述
注意:主备切换期间,写服务不可用;

Read流程

这里写图片描述

高可靠性:完善的容灾机制

  1. DB主备容灾,Master挂掉后自动切换到备库,继续提供读写服务;
  2. DB主备全部挂掉后,通过服务端本地缓存,仍可提供读服务;
  3. DB和服务端全部挂掉后,通过客户端容灾目录下的缓存,仍可提供读服务;

高性能

1. 高吞吐量

思路:本地缓存+Zero Copy。首先,每台服务器以本地磁盘文件的形式缓存全量配置数据;这样每次读请求就是一次静态文件请求,使用Zero Copy提高吞吐量,伪代码如下所示:

//本地缓存配置文件
FileInputStream fis = new FileInputStream(file);
//使用Zero Copy将文件写入response
fis.getChannel().transferTo(0L, fis.getChannel().size(),
                            Channels.newChannel(response.getOutputStream()));

2. 实时推送

  采用长轮询方式实现配置数据的实时推送,原理与DPS方案相似,如下图所示:
这里写图片描述

疑问

  1. 为什么没采用长连接的方式实现实时推送?;
  2. 数据库为什么采用一主两备部署方式?
  3. 数据库主备间的同步方式(全异步、半同步和全同步)?如果采用全异步方式,如何避免数据丢失?

猜你喜欢

转载自blog.csdn.net/yangguosb/article/details/80790123