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