日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

实战:基于 Spring 的应用配置如何迁移至阿里云应用配置管理 ACM

發(fā)布時(shí)間:2024/8/23 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实战:基于 Spring 的应用配置如何迁移至阿里云应用配置管理 ACM 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近遇到一些開(kāi)發(fā)者朋友,準(zhǔn)備將原有的Java Spring的應(yīng)用配置遷移到 阿里云應(yīng)用配置管理 ACM 中。遷移過(guò)程中,遇到不少有趣的問(wèn)題。本文將通過(guò)一個(gè)簡(jiǎn)單的樣例來(lái)還原遷移過(guò)程中遇到的問(wèn)題和相關(guān)解決思路,以期達(dá)到和讀者交流的目的。

什么樣的配置適合進(jìn)入配置中心

這是所有準(zhǔn)備遷移配置到配置中心的用戶(hù)遇到的第一個(gè)問(wèn)題。我們將從時(shí)效性和安全這兩個(gè)維度進(jìn)行分析。

時(shí)效性:靜態(tài) VS 動(dòng)態(tài)

靜態(tài)配置是指程序版本一旦發(fā)布,基本上不會(huì)修改的配置內(nèi)容,例如:

  • 軟件版本號(hào):顯然版本號(hào)一經(jīng)確定,產(chǎn)品基本上不需要改。
  • 日志樣式:日志的layout,如時(shí)間戳,文件名,日志級(jí)別等排版,基本上也不需要大改。
  • 三方軟件LicenseKey:基本上也是一經(jīng)發(fā)布,很少變化。不排除中途三方軟件License升級(jí),但是這種升級(jí)一般都可以根據(jù)軟件重新發(fā)版來(lái)解決配置變更。
  • PaaS平臺(tái)連接串:如數(shù)據(jù)庫(kù)連接串,中間包含數(shù)據(jù)庫(kù),用戶(hù)名和密碼等。除非因?yàn)楹弦?guī)原因修改密碼,或者數(shù)據(jù)發(fā)生遷移等,否則也是很少變化。

動(dòng)態(tài)配置是指程序運(yùn)行時(shí)的一些配置變化,通常會(huì)影響到程序的一些運(yùn)行行為,例如:

  • 限流降級(jí)參數(shù):限流降級(jí)參數(shù)一般都不太固定。系統(tǒng)一般在運(yùn)行時(shí)最好是需要根據(jù)實(shí)際workload pattern來(lái)動(dòng)態(tài)調(diào)節(jié)限流參數(shù)如閾值RT,峰值TPS,等。
  • 監(jiān)控報(bào)警閾值:如交易環(huán)比下跌20%產(chǎn)生error報(bào)警,下跌50%產(chǎn)生critical報(bào)警。 對(duì)于監(jiān)控系統(tǒng)來(lái)講,線(xiàn)上業(yè)務(wù)特征由于變化比較頻繁,因此一般也不將報(bào)警的閾值寫(xiě)死,
  • 日志打印級(jí)別:線(xiàn)上一旦出現(xiàn)詭異的行為,希望吧日志打印級(jí)別從error比如調(diào)高到debug,一般都比較希望能動(dòng)態(tài)的去調(diào)整,而不需要重啟應(yīng)用。
  • 容災(zāi)多活:一旦站點(diǎn)反生災(zāi)難,一定是希望切換是越快越好。因此配置必須動(dòng)態(tài)秒級(jí)生效,盡可能降低資損。

從時(shí)效性的維度來(lái)講,一般建議用戶(hù)把靜態(tài)配置存放到自己文件中,盡可能保持簡(jiǎn)單,但是需要把動(dòng)態(tài)配置放到配置中心里,以加強(qiáng)靈活性和應(yīng)用動(dòng)態(tài)變更的實(shí)效性。

安全:非敏感 VS 敏感

非敏感配置一般指偏向技術(shù)類(lèi),暴露后不會(huì)導(dǎo)致配置上的安全隱患,例如:

  • 軟件版本號(hào):跟產(chǎn)品迭代相關(guān),無(wú)業(yè)務(wù)屬性,非敏感配置。
  • 日志樣式:一般跟程序事后診斷相關(guān),非敏感配置。
  • 日志打印級(jí)別:影響日志打印的多或少,非敏感配置。
  • 限流降級(jí)參數(shù):限流降級(jí)主要為維持內(nèi)部應(yīng)用穩(wěn)定,非敏感配置。
  • 監(jiān)控報(bào)警閾值:主要是影響業(yè)務(wù)的報(bào)警精度,非敏感配置。
  • 容災(zāi)多活:一般和數(shù)據(jù)主備配置和業(yè)務(wù)分片相關(guān),非敏感配置。

敏感配置通常和業(yè)務(wù)數(shù)據(jù)相關(guān),一旦泄露將引起安全隱患,例如:

  • 三方軟件LicenseKey:一旦泄露容易發(fā)生LicenseKey被盜用,為敏感配置。
  • PaaS平臺(tái)連接串:典型如數(shù)據(jù)庫(kù)連接串,一旦泄露,無(wú)論內(nèi)部或外部用戶(hù),都可以很容易地登到業(yè)務(wù)數(shù)據(jù)庫(kù)接觸到業(yè)務(wù)敏感信息,為敏感配置。

從安全的維度來(lái)看,我們通常建議用戶(hù)把非敏感配置存放到自己的文件中,盡可能保持簡(jiǎn)單,但是需要把敏感配置放到配置中心里,并加密且做好鑒權(quán),盡量不要讓無(wú)關(guān)人員接觸到。

時(shí)效性和安全分析總結(jié)

基于 Spring 框架的Java應(yīng)用配置如何遷移

使用Spring框架的Java開(kāi)發(fā)者一般經(jīng)常用到的一種配置注解姿勢(shì)是利用Spring的@value注解。

原始的純靜態(tài)文件場(chǎng)景

例如這個(gè)配置,包含兩個(gè)配置參數(shù),一個(gè)是軟件的版本號(hào),一個(gè)是數(shù)據(jù)庫(kù)連接串:

通過(guò)@PropertySource和@value的注解來(lái)自動(dòng)注入配置。

@Configuration @ComponentScan("com.alibaba") @PropertySource("classpath:myApp.properties")public class AppConfig {@Value(value="${url}")private String URL;@Value(value="${dbuser}")private String USER;@Value(value="${driver}")private String DRIVER;@Value(value="${dbpassword}")private String PASSWORD;@Value(value="${appVersion}")private String version; }

以上代碼省略了相關(guān)數(shù)據(jù)庫(kù)連接初始化等操作。

開(kāi)始配置遷移,進(jìn)入混合配置場(chǎng)景

目前由于安全合規(guī)或配置時(shí)效等原因,要開(kāi)始遷移配置到ACM上。經(jīng)過(guò)分析,我們發(fā)現(xiàn)部分?jǐn)?shù)據(jù)庫(kù)的配置最好遷移到ACM,以紅色字體標(biāo)注。紅色部分將全部被遷移到ACM中。

接下來(lái)主要三個(gè)改動(dòng),先歸納下。

  • 在ACM控制臺(tái)種增加相關(guān)配置的記錄。
  • Java工程包中增加 ACM SDK 相關(guān)依賴(lài)。
  • 少許修改代碼,增加在ACM中取配置的注解代碼。

第一步,直接到ACM中創(chuàng)建配置項(xiàng),名字為myapp.dbconfig.properties,并把配置內(nèi)容編輯在對(duì)應(yīng)編輯框中。詳細(xì)操作指南請(qǐng)參見(jiàn) ACM 快速入門(mén)文檔,操作截圖如下。

第二步,在maven的pom.xml中增加依賴(lài),如下。

<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-spring-context</artifactId> <version>0.2.1- RC1</version> </dependency>

第三步,在對(duì)應(yīng)AppConfig.java代碼中植入API注解,通過(guò)ACM去獲取動(dòng)態(tài)配置。代碼增加部分如紅色字體部分。

@Configuration @ComponentScan("com.journaldev") @PropertySource("classpath:myApp.properties") @EnableNacosConfig(globalProperties = @NacosProperties(endpoint = "acm.aliyun.com", namespace = "xxx", accessKey = "xxx", secretKey = "xxx")) @NacosPropertySource(dataId = "myApp.dbconfig.properties", autoRefreshed = true) public class AppConfig { @Value(value="${url}") private String URL; @Value(value="${dbuser}") private String USER; @Value(value="${driver}") private String DRIVER; @Value(value="${dbpassword}") private String PASSWORD; @Value(value="${appVersion}") private String version; public String getVersion() { return version; } }

至此,改動(dòng)結(jié)束。通過(guò)ACM SDK支持Spring的@value注解能力,代碼幾乎0改動(dòng)。

幾點(diǎn)注意事項(xiàng)

在以上代碼實(shí)例中,有幾樣事情需要注意:

  • 代碼中使用的ACM SDK為Nacos SDK。Nacos 為ACM的開(kāi)源實(shí)現(xiàn),ACM無(wú)縫兼容所有Nacos的接口。
  • 在代碼示例中,使用了明文注解來(lái)寫(xiě)死ACM的endpoint, namespace, AK, SK, 等等。在實(shí)際操作種,相關(guān)變量其實(shí)不用寫(xiě)死。

    • endpoint namespace等可以通過(guò)ACM的相關(guān)文件配置或系統(tǒng)變量來(lái)解決。
    • AK, SK等敏感信息可以通過(guò)ECS Ram Role功能來(lái)讓系統(tǒng)自行判斷,代碼不用寫(xiě)死。
  • 代碼中未包含動(dòng)態(tài)配置監(jiān)聽(tīng)的回調(diào)部分。


原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

總結(jié)

以上是生活随笔為你收集整理的实战:基于 Spring 的应用配置如何迁移至阿里云应用配置管理 ACM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。