【Nacos】微服務配置中心介紹
文章目錄
一、Nacos簡介
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ZmCpjvtb-1585720730083)(https://ask.qcloudimg.com/draft/1060300/m0qjivhld2.png)]
Nacos是阿里開源的一個微服務配置中心,其官方宣傳:
一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。
目前是github的一個明星專案,高達6k+的star。有大量組織在現網使用Nacos,詳見官方issue:https://github.com/alibaba/nacos/issues/273
二、微服務配置中心探討
1.為什麼要配置管理
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-CXdzg3ss-1585720730085)(https://ask.qcloudimg.com/draft/1060300/x0ntfth9rc.png)]
微服務背景下,配置管理呈現兩大特徵:分散、動態。這兩點都很易於理解: 微服務下是不可能一個配置檔案管理多個服務,同時同一個服務會分散在海量機器上。這會帶來程式配置管理的碎片化,也就是“分散”。同時微服務需要更靈活地更及時地獲取到配置,也就是“動態”。
所以傳統的靜態配置檔案\程式碼寫死的管理方式無法滿足現在的要求。
2.配置管理策略
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-jUF0Yv24-1585720730086)(https://ask.qcloudimg.com/draft/1060300/pfqzf8hk22.png)]
所以我們的配置管理策略主要是需要這兩點
- 降低運維困難
- 實時推送能力
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-NxBrpmtV-1585720730087)(https://ask.qcloudimg.com/draft/1060300/e2mw86ijfo.png)]
三、Nacos基礎
1.Nacos設計原則
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-xXjAAdCk-1585720730087)(https://ask.qcloudimg.com/draft/1060300/4my7q63n1l.png)]
Nacos使用Namespace + Group + DataId 來確定一個配置的內容。
2.Nacos的介面
Nacos支援三類介面:
- OPEN-API: 純HTTP介面
- SDK:目前官方社群已有JAVA版本
- spring註解
簡單的demo如下:
# OPEN-API
curl -x GET "http://serverIp:8848/nacos/v1/cs/configs?dataId=dataIdparam&group=groupParam&tenant=tenantParam
"
public String getConfig(String dataId, String group, long timeoutMs) throws NacosException
@NacosInjected
private ConfigService configService;
@Test
public void testPublishConfig() throws NacosException {
configService.publishConfig(DATA_ID, DEFAULT_GROUP, "9527");
}
3.完整的客戶端例項
- 生成一個configService
- configService獲取配置(getConfig)(SDK層面看是拉配置)
- configService呼叫addListener方法監聽服務端的變化(SDK層面看是服務端在推送配置)
String serverAddr = "{serverAddr}";
String dataId = "{dataId}";
String group = "{group}";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
ConfigService configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
configService.addListener(dataId, group, new Listener() {
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("recieve1:" + configInfo);
}
@Override
public Executor getExecutor() {
return null;
}
});
// 測試讓主執行緒不退出,因為訂閱配置是守護執行緒,主執行緒退出守護執行緒就會退出。 正式程式碼中無需下面程式碼
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
四、一些思考
1.Nacos 客戶端是怎麼實時獲取到 Nacos 服務端的最新資料的?
服務端和客戶端直接本質上還是通過 http 進行資料通訊的,之所以有“推”的感覺,是因為服務端主動將變更後的資料通過 http 的 response 物件提前寫入了。
詳見:
2.Nacos如何相容apache的configuration
將Nacos的SDK與apache的configuration結合起來,儘量少地修改我們的業務程式碼以實現Nacos的接入。以下是一個完整的例子:
String serverAddr = "localhost";
String dataId = "DATA_ID";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig(dataId, group, 5000);
// 載入檔案前設定分隔符失效(不使用任何分隔符).
config.setDelimiterParsingDisabled(true);
// 將字串轉換成PropertiesConfiguration格式
config.load(new ByteArrayInputStream(content.getBytes()));
configService.addListener(dataId, group, new Listener() {
// 監聽變化
public void receiveConfigInfo(String configInfo) {
try {
// 需要先clear再load,不然load不生效
config.clear();
config.load(new ByteArrayInputStream(configInfo.getBytes()));
} catch (ConfigurationException e) {
e.printStackTrace();
}
}
public Executor getExecutor() {
return null;
}
});
} catch (ConfigurationException e) {
logger.error("create conf file error.", e);
e.printStackTrace();
}
2.AP還是CP,還是mixed
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-PyWzvG0g-1585720730088)(https://ask.qcloudimg.com/draft/1060300/o101oyarqw.png)]
詳見官方的issue,待深入研究
文章首發:
https://cloud.tencent.com/developer/article/1446931
相關文章
- silky微服務框架服務註冊中心介紹微服務框架
- 微服務(五)nacos配置管理微服務
- 微服務框架/配置中心/註冊中心微服務框架
- 微服務架構 | 3.2 Alibaba Nacos 註冊中心微服務架構
- 微服務註冊中心 Nacos 比 Eureka的優勢微服務
- Nacos配置中心原理
- 【微服務目錄】.NET Core 微服務介紹微服務
- 微服務之分散式配置中心微服務分散式
- 微服務配置中心完全解讀微服務
- 微服務架構之「 配置中心 」微服務架構
- SpringCloud Nacos 配置中心SpringGCCloud
- Docker 搭建 Nacos 配置中心Docker
- SpringBoot使用Nacos作為配置中心服務和服務註冊中心Spring Boot
- 康過來!Nacos配置和管理微服務的使用微服務
- 配置中心之Nacos簡介,使用及Go簡單整合Go
- SpringCloud Alibaba實戰(7:nacos註冊中心管理微服務)SpringGCCloud微服務
- 微服務實戰系列(五)-註冊中心Eureka與nacos區別微服務
- 微服務實戰系列(四)-註冊中心springcloud alibaba nacos微服務SpringGCCloud
- SpringCloud微服務實戰——搭建企業級開發框架(十):使用Nacos分散式配置中心SpringGCCloud微服務框架分散式
- SpringCloud+Nacos實現服務配置中心(Hoxton版本)SpringGCCloud
- lms微服務框架主機介紹微服務框架
- Spring Cloud 微服務實戰——nacos 服務註冊中心搭建(附原始碼)SpringCloud微服務原始碼
- silky微服務框架的服務治理介紹微服務框架
- SpringBoot使用Nacos配置中心Spring Boot
- nacos入門系列之配置中心
- Springcloud alibaba nacos配置中心SpringGCCloud
- Nacos註冊中心+配置管理
- .net5+nacos+ocelot 配置中心和服務發現實現
- Spring Cloud Alibaba 整合 Nacos 實現服務配置中心SpringCloud
- 微服務註冊發現配置中心-consul微服務
- Consul微服務的配置中心體驗篇微服務
- Nacos 介面詳細介紹
- Nacos服務心跳和健康檢查原始碼介紹原始碼
- 微服務 Spring cloud 各元件介紹微服務SpringCloud元件
- SpringCloud包含的微服務介紹--EurekaSpringGCCloud微服務
- (18)go-micro微服務ELK介紹Go微服務
- spring微服務實戰(一):介紹Spring微服務
- Java 微服務框架 Redkale 入門介紹Java微服務框架