隨着Nacos2.0成熟穩定,Nacos-spring-boot發佈0.1.10、0.2.10兩個核心版本,全面支持了Nacos2.0,同時支持自動識別配置類型注入能力,修復了高併發場景下數據一致性問題。
Nacos-spring-boot老用戶,將相關maven依賴進行如下替換,即可快速升級。
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.10</version>
</dependency>
本文將系統介紹新版本增強能力,並且以一次生產環境的配置管理項目構建過程爲例,詳細描述新版本Nacos Spring Boot0.2.10版本的部署,幫助Spring Boot老玩家快速上岸Nacos2.0,感受長連接帶來的10倍性能提升。
Nacos-spring-boot新版本特性
新發布的0.1.10版本和0.2.10版本主要feature增強包括以下幾個部分:
全面兼容Nacos2體系,向長連接時代演進
Nacos1體系中,配置中心的訂閱、實時推送功能主要通過長輪訓進行。儘管長輪訓是HTTP短連接體系中被採用較多的動態刷新解決方案,但也不可避免地存在時延過高等缺陷;在生產實踐中暴露了一定問題,如下面這兩個鏈接所示:
https://github.com/alibaba/nacos/issues/6345
https://github.com/alibaba/nacos/issues/2674
Nacos2體系將整個配置中心的訂閱、推送功能重構成爲了基於gRPC的長連接方案,保證了配置刷新實時推送;迄今爲止,已經歷了大量的生產環境考驗。
自動識別配置的文件類型
在使用Nacos-spring-boot新版本之後,即使用戶對配置類型未設置的情況下,nacos-spring-boot也會自動識別該配置的文件類型(json/yaml/properties)並給定默認值。該機制極大降低了因爲文件類型不匹配,業務側出現配置處理錯誤的風險。下圖爲新版本Nacos-spring-boot項目在一次配置文件刷新過程中的工作機制。
@NacosValue註解全面支持Spel表達式
Spel表達式全稱爲“Spring Expression Language”,是Spring自帶的一種動態字符串構建方式表達式)。用戶可以方便地使用Spel表達式來定義NacosValue,與Spring功能完美整合,減少SpringBoot玩家們的工作量。
修復了高併發場景下的一致性問題
阿里雲內部同學在使用Nacos-spring-boot項目進行大規模壓測的過程中,出現了一些配置讀取錯誤:在大流量頻繁修改某些dataId的配置的過程中,客戶端可能會拉取到舊版本的配置數據,導致客戶端配置數據反覆。Nacos-spring-boot新版本通過增加智能鎖、升級Nacos-spring依賴等方式,對於潛在的線程安全風險進行了修復。
生產演示-客戶端部署
Springboot老玩家可以通過下面方式升級到Nacos-spring-boot新版本。
在 Maven 項目的 pom.xml 文件中增加(或升級)以下依賴來獲取 Starter
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.10</version>
</dependency>
注: 使用時請根據自定義構建的Spring Boot版本選擇相應的nacos-config-spring-boot-starter版本:nacos-config-spring-boot-starter 版本 0.2.10 對應 Spring Boot 2.x 版本,版本 0.1.10 對應 Spring Boot 1.x 版本。
在 application.properties 文件中配置連接信息
nacos.config.server-addr=${nacos_server_address}:8848
注:${nacos_server_address}
爲佔位符,表示Nacos server的地址,後文將給出如何獲取其詳細地址信息的方案。
使用 @NacosPropertySource 加載 dataId 爲 example 的配置源,並開啓自動更新
@SpringBootApplication
@NacosPropertySource(dataId = "com.alibaba.nacos.example.properties", autoRefreshed = true)
public class NacosConfigApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigApplication.class, args);
}
}
使用 @NacosValue 註解設置屬性值。
@Controller
@RequestMapping("config")
public class ConfigController {
@NacosValue(value = "${connectTimeoutInMills:5000}", autoRefreshed = true)
private int connectTimeoutInMills;
@RequestMapping(value = "/get", method = GET)
@ResponseBody
public int get() {
return connectTimeoutInMills;
}
}
生產演示-服務端部署
Nacos官方爲SpringBoot玩家提供了兩種服務端的部署方式:自建開源Nacos和MSE Nacos專業版。
自建開源Nacos
用戶如果選擇開源Nacos,可以進行自主部署、運維、生產環境調優;另外,由於開源Nacos協議爲Apache2.0協議,用戶甚至可以進行自定義功能的開發。開源Nacos的安裝步驟可參考https://github.com/alibaba/nacos,支持環境包括Windows、MacBook、Linux等各種平臺,可以方便地進行單機或集羣啓動。
MSE Nacos專業版
MSE Nacos則致力於提供高可用的一站式解決方案,相對於基礎版和開源版本進行了大量升級:
-
自動化升級流程,無需複雜運維部署,即可完成基礎版至專業版的平滑升級。 -
提供企業級99.95%高可用保障。 -
支持長鏈接,性能相對於基礎版提升10倍。 -
更完善的配置加解密體系,無需擔心敏感配置信息丟失風險。 -
更完善的鑑權體系,全面引入阿里雲RAM主子賬號體系權限控制。
使用MSE Nacos專業版作爲服務端,詳細步驟可分爲如下幾步。
1、首先訪問MSE官網,https://cn.aliyun.com/product/aliware/mse?spm=nacos-website.topbar.0.0.0,登陸。
2、點擊"立即購買"、"創建實例"。
3、選擇“專業版”,並根據需要進行其他相應設置。
並點擊立即購買。
4、等待3分鐘,即可在控制檯看到剛剛創建的Nacos集羣。
5、將相應內網或公網地址複製,並填入上文所述${nacos_server_address}
中。(如希望使用內網訪問,則可直接複製內網地址;如希望使用公網訪問,則需要點擊進入並將訪問端添加進宮網白名單)。
6、點擊進入相應實例的控制檯,點擊“配置列表”、“創建配置”。
7、創建和客戶端匹配的配置信息,注意下圖中紅框標出的幾個項目(其中數據加密根據需要選擇),最後點擊“發佈”。
結果驗證
在本地啓動客戶端項目,並運行以下命令:
curl localhost:8080/config/get
若返回以下信息,則說明 SDK 可正常使用。
3000
在MSE控制檯將示例配置 com.alibaba.nacos.example.properties
更改爲以下內容併發布。
connectTimeoutInMills=6000
若Console打印出更新的配置內容 ,則說明SDK的配置自動更新功能正常;工程正式跨入高性能配置中心時代。
往期推薦
關注我回復「加羣」,加入Spring技術交流羣
本文分享自微信公衆號 - 程序猿DD(didispace)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。