欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?Chassis3應(yīng)用視角的配置管理技術(shù)解密

 更新時(shí)間:2024年01月17日 09:33:18   作者:liubao68  
這篇文章主要為大家介紹了Java?Chassis3應(yīng)用視角的配置管理相關(guān)的機(jī)制和背后故事,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

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)文章

  • Java的運(yùn)算符和程序邏輯控制你了解嗎

    Java的運(yùn)算符和程序邏輯控制你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Java的運(yùn)算符和程序邏輯控制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 將本地的jar包打到Maven的倉(cāng)庫(kù)中實(shí)例

    將本地的jar包打到Maven的倉(cāng)庫(kù)中實(shí)例

    下面小編就為大家分享一篇將本地的jar包打到Maven的倉(cāng)庫(kù)中實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Spring(一):IOC如何推導(dǎo)和理解

    Spring(一):IOC如何推導(dǎo)和理解

    下面小編就為大家?guī)?lái)一篇詳談Spring對(duì)IOC的理解(推薦篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-07-07
  • Java使用XML與注解方式實(shí)現(xiàn)CRUD操作代碼

    Java使用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-02
  • Java使用easyExcel導(dǎo)出excel數(shù)據(jù)案例

    Java使用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-10
  • SpringBoot整合ES解析搜索返回字段問(wèn)題

    SpringBoot整合ES解析搜索返回字段問(wèn)題

    這篇文章主要介紹了SpringBoot整合ES解析搜索返回字段問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Java如何實(shí)現(xiàn)定時(shí)任務(wù)

    Java如何實(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-07
  • Java中的Spring Security配置過(guò)濾器

    Java中的Spring Security配置過(guò)濾器

    這篇文章主要介紹了Java中的Spring Security配置過(guò)濾器,文章通過(guò)圍繞文章主題的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Java基于MySQL實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    Java基于MySQL實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java基于MySQL實(shí)現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java中MD5的使用代碼示例

    Java中MD5的使用代碼示例

    這篇文章主要給大家介紹了關(guān)于Java中MD5的使用示例,MD5加密是一種常見(jiàn)的加密方式,我們經(jīng)常用在保存用戶(hù)密碼和關(guān)鍵信息上,需要的朋友可以參考下
    2023-08-08

最新評(píng)論