天天看點

手寫分布式配置中心

一.引言

   随着微服務架構的興起,分布式配置中心越來越必不可少。目前比較流行的有攜程的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是一個最簡單的分布式配置中心的架構,安全和權限啥的都沒有擴充,當然傳輸協定,網絡通訊也是使用最基本的方式實作的。如果想應用到生産,還需要做很多工作,但是對于了解分布式配置原理應該是足夠了。

繼續閱讀