一.引言
随着微服务架构的兴起,分布式配置中心越来越必不可少。目前比较流行的有携程的Apollo,阿里的disconf,淘宝的diamond。
二.原理
其实实现原理可以简单的概括如下:客户端先集成框架,在启动的时候已经将客户端的ip和端口发送到了注册中心(比如zookeeper),再设置具体某个值得时候,发送给服务器端,服务器端接收到请求后,依次通知之前注册的机器。这样随便一台机器只要某个值被更改了,其他集群中的机器都可以获取到最新的值(当然一般会有一个延迟,性能和实现方式有关)。
这个基本上就是最简单的分布式配置中心了,基于此,一步步来讲解如何手写一个分布式配置中心。
三.步骤
1.选择注册中心
这里就使用大家比较熟悉的zk。
2.实现核心框架完成基本的客户端ip+端口的注册
3.客户端和服务器端集成框架
4.通知
通知主要分两块,一块是client发送key设置值得请求到服务端,一块是server获取zk中该集群下的全部机器进行通知。目前采用的是http协议请求。
四.框架讲解
注解 PConfigType
mode :
server 表明是服务器
client: 表明是客户端(默认值)
/**
* 该服务会去调用远程的服务
*/
@Autowired
private PConfigClientServiceImpl pConfigClientService;
/**
* 该服务是引用本地的core服务
*/
@Autowired
private BaseService baseService;
需要client端做数据接收
@RestController
@Slf4j
public class ChangeValueController {
@Autowired
private BaseService baseService;
@PostMapping("/changeData")
public String changeData(@RequestBody DataModel dataModel) {
log.info("===============================");
log.info("enter changeData data:{}", dataModel);
log.info("===============================");
baseService.put(dataModel);
return "success";
}
}
具体请参考框架地址
https://gitee.com/YiHaiFeng/pconfig/
五.题外话
该pconfig是一个最简单的分布式配置中心的框架,安全和权限啥的都没有扩展,当然传输协议,网络通讯也是使用最基本的方式实现的。如果想应用到生产,还需要做很多工作,但是对于理解分布式配置原理应该是足够了。