Java?Chassis3應(yīng)用視角的配置管理技術(shù)解密
Java Chassis 3技術(shù)解密:應(yīng)用視角的配置管理
談?wù)撐⒎?wù)配置管理的時(shí)候,最多的是以配置中心為視角,討論其配置管理能力。 和注冊(cè)中心一樣,不同的配置中心會(huì)有一些關(guān)鍵的設(shè)計(jì)指標(biāo)。
- 配置的格式和類(lèi)型。支持不同格式和類(lèi)型的配置項(xiàng),比如YAML、文本、JSON、XML等。
- 配置的邏輯層次。比如 Kie 提供了 Label 來(lái)表達(dá)配置的層次,可以簡(jiǎn)化為應(yīng)用配置、服務(wù)配置和自定義配置等;Nacos 使用 Namespace、Group等概念來(lái)表達(dá)配置的層次。
- 變更通知機(jī)制。和注冊(cè)中心一樣,配置中心也有變更通知機(jī)制,兩者的機(jī)制相似。相較而言,配置中心對(duì)于變更感知周期的的要求更低。
- 配置歷史和推送軌跡。通過(guò)配置歷史,能夠了解配置項(xiàng)的改動(dòng)記錄,方便進(jìn)行審計(jì)和回退,推送軌跡則幫助了解配置項(xiàng)被應(yīng)用到了哪些微服務(wù)。
Java Chassis 3的設(shè)計(jì)目標(biāo)之一,就是以應(yīng)用的視角,支持不同的配置中心,并提供統(tǒng)一一致的使用方式。
Java Chassis 3核心概念
Java Chassis 3簡(jiǎn)化了微服務(wù)定義,只包含如下核心概念:
- 環(huán)境名稱(chēng):用于表示部署環(huán)境,不同環(huán)境的微服務(wù)之間不能進(jìn)行服務(wù)發(fā)現(xiàn)。對(duì)于不同的注冊(cè)中心和配置中心,會(huì)以對(duì)應(yīng)的概念表示環(huán)境。比如Nacos使用
namespace
來(lái)表示環(huán)境。 - 應(yīng)用名稱(chēng):用于描述一組可以相互訪(fǎng)問(wèn)的微服務(wù),不同應(yīng)用名稱(chēng)之間是邏輯隔離的,不能進(jìn)行服務(wù)發(fā)現(xiàn)。對(duì)于不同的注冊(cè)中心和配置中心,會(huì)以對(duì)應(yīng)的概念表示應(yīng)用。比如Nacos使用
group
來(lái)表示應(yīng)用。 - 微服務(wù)名稱(chēng):用于標(biāo)識(shí)一個(gè)微服務(wù)??梢酝ㄟ^(guò)微服務(wù)名稱(chēng)查詢(xún)需要訪(fǎng)問(wèn)的目標(biāo)微服務(wù)。
- 微服務(wù)版本:表示微服務(wù)的版本。當(dāng)存在微服務(wù)屬性變化、接口變化的場(chǎng)景,建議修改版本號(hào)。
- 微服務(wù)描述:簡(jiǎn)單的微服務(wù)描述信息。
- 微服務(wù)屬性:用于描述微服務(wù)的擴(kuò)展信息。
servicecomb: service: application: hello-applicaton name: hello-service version: 0.0.1 properties: key1: value1 key2: value2 description: This is a description about the microservice environment: production
配置層次的配置信息
當(dāng)一個(gè)微服務(wù)接入配置中心以后,Java Chassis 3的配置管理模塊,會(huì)自動(dòng)從配置中心獲取如下配置層次的配置信息:
- 應(yīng)用配置。
- 服務(wù)配置。
- 版本配置。
- 自定義配置。
配置層次的配置信息
這些配置在不同配置中心的對(duì)應(yīng)關(guān)系:
項(xiàng)目 | Nacos 配置中心 | Kie 配置中心 | 備注 |
---|---|---|---|
應(yīng)用配置 | namespace=environment group=application dataId=application | environment=environment app=application | |
服務(wù)配置 | namespace=environment group=application dataId=service | environment=environment app=application service=service | |
版本配置 | namespace=environment group=application dataId=service-version | environment=environment app=application service=service version=version | |
自定義配置 | namespace=environment group=group dataId=dataId | customLabel=customLabelValue |
以應(yīng)用視角建立這種對(duì)應(yīng)關(guān)系的好處,是用戶(hù)不需要自行規(guī)劃如何在配置中心存放數(shù)據(jù),可以直接將一個(gè)優(yōu)秀的管理實(shí)踐應(yīng)用于業(yè)務(wù)場(chǎng)景。將用戶(hù)需要思考的問(wèn)題,固定為幾個(gè)具體的問(wèn)題:如何創(chuàng)建應(yīng)用級(jí)別的配置?如何創(chuàng)建服務(wù)級(jí)別的配置?如何創(chuàng)建微服務(wù)自定義的配置?
開(kāi)發(fā)者如何使用配置
應(yīng)用視角的配置管理另外一個(gè)關(guān)鍵問(wèn)題,是開(kāi)發(fā)者如何使用配置。
- Spring Boot使用配置
Spring Boot的開(kāi)發(fā)者一般通過(guò) @Value
、@ConfigurationProperties
和 Environment
獲取配置。 它提供了 PropertySource
來(lái)擴(kuò)展配置源。 Spring Boot并未針對(duì)配置變更提供額外的處理機(jī)制,無(wú)法很好的處理配置變更。 盡管當(dāng) PropertySource
的內(nèi)容變化后,通過(guò) Environment
可以獲取到最新的版本內(nèi)容,但是 @Value
、@ConfigurationProperties
定義的配置項(xiàng)則不會(huì)發(fā)生變化。
- Spring Cloud使用配置
Spring Cloud在Spring Boot基礎(chǔ)之上,提供了動(dòng)態(tài)配置的能力。 可以使用 @RefershScope
標(biāo)簽聲明 Bean, 在配置變化后,Spring Cloud會(huì)銷(xiāo)毀老的 Bean, 并重建新的 Bean,新的 Bean會(huì)使用最新的配置值進(jìn)行初始化。 Spring Cloud在處理配置變更的過(guò)程中,會(huì)對(duì)Bean的訪(fǎng)問(wèn)加讀寫(xiě)鎖。
- Java Chassis 3使用配置
Java Chassis 3完全兼容 Spring Boot的配置使用方式。 并提供了更加友好的 API 監(jiān)聽(tīng)配置變更和處理優(yōu)先級(jí)配置。 配置監(jiān)聽(tīng) API 主要用于高性能場(chǎng)景:配置變更后需要進(jìn)行必要的業(yè)務(wù)邏輯初始化,初始化可以在配置變更線(xiàn)程中執(zhí)行,而不阻塞當(dāng)前業(yè)務(wù)執(zhí)行。
@RestSchema(schemaId = "ProviderController") @RequestMapping(path = "/") public class ProviderController { private DynamicProperties dynamicProperties; private String example; @Autowired public ProviderController(DynamicProperties dynamicProperties) { this.dynamicProperties = dynamicProperties; this.example = this.dynamicProperties.getStringProperty("basic.example", value -> this.example = value, "not set"); } }
優(yōu)先級(jí)配置是Java Chassis3特有的管理配置優(yōu)先級(jí)方式。比如對(duì)于某個(gè)方法,會(huì)考慮是否有應(yīng)用級(jí)別的全局配置、針對(duì)服務(wù)的配置和針對(duì)這個(gè)方法的配置,針對(duì)方法的配置優(yōu)先級(jí)最高。 這種配置方式被廣泛應(yīng)用于Java Chassis 3的限流等服務(wù)治理場(chǎng)景中。 下面的代碼片段是Java Chassis的接口超時(shí)配置示例。
@InjectProperties(prefix = "servicecomb") public class OperationConfig { public static final List<String> CONSUMER_OP_ANY_PRIORITY = Arrays.asList( "${service}.${schema}.${operation}", "${service}.${schema}", "${service}"); /** * consumer request timeout */ @InjectProperty(keys = {"request.${op-any-priority}.timeout", "request.timeout"}, defaultValue = "30000") private long msRequestTimeout; }
相對(duì)于Spring Cloud,Java Chassis3的配置API,能夠更加方便的監(jiān)聽(tīng)配置變化,并提供了更好的性能。
客戶(hù)故事:Spring Cloud配置變更會(huì)加鎖。在高并發(fā)場(chǎng)景,配置變更會(huì)阻塞所有請(qǐng)求的執(zhí)行。如果業(yè)務(wù)執(zhí)行(已經(jīng)獲取讀鎖)包含RPC等相對(duì)慢的邏輯,配置變更等待寫(xiě)鎖以及其他執(zhí)業(yè)務(wù)線(xiàn)程等待讀鎖都會(huì)被阻塞,產(chǎn)生雪崩效應(yīng),觸發(fā)應(yīng)用吞吐急劇下降。Java Chassis 3配置變更不阻塞業(yè)務(wù)處理,能夠有效的防止配置變更觸發(fā)雪崩效應(yīng),特別是在高并發(fā)、需要?jiǎng)討B(tài)調(diào)整運(yùn)行、治理規(guī)則的業(yè)務(wù)場(chǎng)景。
以上就是Java Chassis3應(yīng)用視角的配置管理技術(shù)解密的詳細(xì)內(nèi)容,更多關(guān)于Java Chassis3應(yīng)用視角配置管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
將本地的jar包打到Maven的倉(cāng)庫(kù)中實(shí)例
下面小編就為大家分享一篇將本地的jar包打到Maven的倉(cāng)庫(kù)中實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02Java使用XML與注解方式實(shí)現(xiàn)CRUD操作代碼
MyBatis提供了靈活的配置和使用方式,使得數(shù)據(jù)庫(kù)操作更加簡(jiǎn)潔和高效,通過(guò)本文,我們介紹了如何使用MyBatis框架,通過(guò)XML映射文件和注解兩種方式來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的增刪改查操作,感興趣的朋友跟隨小編一起看看吧2024-02-02Java使用easyExcel導(dǎo)出excel數(shù)據(jù)案例
這篇文章主要介紹了Java使用easyExcel導(dǎo)出excel數(shù)據(jù)案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Java如何實(shí)現(xiàn)定時(shí)任務(wù)
這篇文章主要介紹了Java如何實(shí)現(xiàn)定時(shí)任務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Java中的Spring Security配置過(guò)濾器
這篇文章主要介紹了Java中的Spring Security配置過(guò)濾器,文章通過(guò)圍繞文章主題的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05Java基于MySQL實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java基于MySQL實(shí)現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01