天天看点

手写分布式配置中心

一.引言

   随着微服务架构的兴起,分布式配置中心越来越必不可少。目前比较流行的有携程的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是一个最简单的分布式配置中心的框架,安全和权限啥的都没有扩展,当然传输协议,网络通讯也是使用最基本的方式实现的。如果想应用到生产,还需要做很多工作,但是对于理解分布式配置原理应该是足够了。