ToB企服应用市场:ToB评测及商务社交产业平台

标题: 解析Java Chassis 3中应用视角的配置管理 [打印本页]

作者: 梦见你的名字    时间: 2024-4-14 04:14
标题: 解析Java Chassis 3中应用视角的配置管理
本文分享自华为云社区《Java Chassis 3技术解密:应用视角的配置管理》,作者: liubao68。
谈论微服务配置管理的时候,最多的是以配置中心为视角,讨论其配置管理能力。 和注册中心一样,不同的配置中心会有一些关键的设计指标。
Java Chassis 3的设计目标之一,就是以应用的视角,支持不同的配置中心,并提供统一一致的使用方式。
Java Chassis 3简化了微服务定义,只包含如下核心概念:
  1. servicecomb:
  2.   service:
  3.     application: hello-applicaton
  4.     name: hello-service
  5.     version: 0.0.1
  6.     properties:
  7.       key1: value1
  8.       key2: value2
  9.     description: This is a description about the microservice
  10.     environment: production
复制代码
当一个微服务接入配置中心以后,Java Chassis 3的配置管理模块,会自动从配置中心获取如下配置层次的配置信息:
这些配置在不同配置中心的对应关系:
项目Nacos 配置中心Kie 配置中心备注应用配置namespace=environment
group=application
dataId=applicationenvironment=environment
app=application 服务配置namespace=environment
group=application
dataId=serviceenvironment=environment
app=application
service=service 版本配置namespace=environment
group=application
dataId=service-versionenvironment=environment
app=application
service=service
version=version 自定义配置namespace=environment
group=group
dataId=dataIdcustomLabel=customLabelValue 以应用视角建立这种对应关系的好处,是用户不需要自行规划如何在配置中心存放数据,可以直接将一个优秀的管理实践应用于业务场景。将用户需要思考的问题,固定为几个具体的问题:如何创建应用级别的配置?如何创建服务级别的配置?如何创建微服务自定义的配置?
应用视角的配置管理另外一个关键问题,是开发者如何使用配置。
Spring Boot的开发者一般通过 @Value、@ConfigurationProperties 和 Environment 获取配置。 它提供了 PropertySource 来扩展配置源。 Spring Boot并未针对配置变更提供额外的处理机制,无法很好的处理配置变更。 尽管当 PropertySource 的内容变化后,通过 Environment 可以获取到最新的版本内容,但是 @Value、@ConfigurationProperties 定义的配置项则不会发生变化。
Spring Cloud在Spring Boot基础之上,提供了动态配置的能力。 可以使用 @RefershScope 标签声明 Bean, 在配置变化后,Spring Cloud会销毁老的 Bean, 并重建新的 Bean,新的 Bean会使用最新的配置值进行初始化。 Spring Cloud在处理配置变更的过程中,会对Bean的访问加读写锁。
Java Chassis 3完全兼容 Spring Boot的配置使用方式。 并提供了更加友好的 API 监听配置变更和处理优先级配置。 配置监听 API 主要用于高性能场景:配置变更后需要进行必要的业务逻辑初始化,初始化可以在配置变更线程中执行,而不阻塞当前业务执行。
  1. @RestSchema(schemaId = "ProviderController")
  2. @RequestMapping(path = "/")
  3. public class ProviderController {
  4.   private DynamicProperties dynamicProperties;
  5.   private String example;
  6.   @Autowired
  7.   public ProviderController(DynamicProperties dynamicProperties) {
  8.     this.dynamicProperties = dynamicProperties;
  9.     this.example = this.dynamicProperties.getStringProperty("basic.example",
  10.             value -> this.example = value, "not set");
  11.   }
  12. }
复制代码
优先级配置是Java Chassis3特有的管理配置优先级方式。比如对于某个方法,会考虑是否有应用级别的全局配置、针对服务的配置和针对这个方法的配置,针对方法的配置优先级最高。 这种配置方式被广泛应用于Java Chassis 3的限流等服务治理场景中。 下面的代码片段是Java Chassis的接口超时配置示例。
  1. @InjectProperties(prefix = "servicecomb")
  2. public class OperationConfig {
  3.   public static final List<String> CONSUMER_OP_ANY_PRIORITY = Arrays.asList(
  4.       "${service}.${schema}.${operation}",
  5.       "${service}.${schema}",
  6.       "${service}");
  7.   
  8.   /**
  9.    * consumer request timeout
  10.    */
  11.   @InjectProperty(keys = {"request.${op-any-priority}.timeout", "request.timeout"}, defaultValue = "30000")
  12.   private long msRequestTimeout;
  13. }
复制代码
相对于Spring Cloud,Java Chassis3的配置API,能够更加方便的监听配置变化,并提供了更好的性能。
客户故事:Spring Cloud配置变更会加锁。在高并发场景,配置变更会阻塞所有请求的执行。如果业务执行(已经获取读锁)包含RPC等相对慢的逻辑,配置变更等待写锁以及其他执业务线程等待读锁都会被阻塞,产生雪崩效应,触发应用吞吐急剧下降。Java Chassis 3配置变更不阻塞业务处理,能够有效的防止配置变更触发雪崩效应,特别是在高并发、需要动态调整运行、治理规则的业务场景。
 
点击关注,第一时间了解华为云新鲜技术~
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4