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