解析Java Chassis 3中应用视角的配置管理

这篇具有很好参考价值的文章主要介绍了解析Java Chassis 3中应用视角的配置管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文分享自华为云社区《Java Chassis 3技术解密:应用视角的配置管理》,作者: liubao68。

谈论微服务配置管理的时候,最多的是以配置中心为视角,讨论其配置管理能力。 和注册中心一样,不同的配置中心会有一些关键的设计指标。

  • 配置的格式和类型。支持不同格式和类型的配置项,比如YAML、文本、JSON、XML等。
  • 配置的逻辑层次。比如 Kie 提供了 Label 来表达配置的层次,可以简化为应用配置、服务配置和自定义配置等;Nacos 使用 Namespace、Group等概念来表达配置的层次。
  • 变更通知机制。和注册中心一样,配置中心也有变更通知机制,两者的机制相似。相较而言,配置中心对于变更感知周期的的要求更低。
  • 配置历史和推送轨迹。通过配置历史,能够了解配置项的改动记录,方便进行审计和回退,推送轨迹则帮助了解配置项被应用到了哪些微服务。

Java Chassis 3的设计目标之一,就是以应用的视角,支持不同的配置中心,并提供统一一致的使用方式。

Java Chassis 3简化了微服务定义,只包含如下核心概念:

  • 环境名称:用于表示部署环境,不同环境的微服务之间不能进行服务发现。对于不同的注册中心和配置中心,会以对应的概念表示环境。比如Nacos使用 namespace 来表示环境。
  • 应用名称:用于描述一组可以相互访问的微服务,不同应用名称之间是逻辑隔离的,不能进行服务发现。对于不同的注册中心和配置中心,会以对应的概念表示应用。比如Nacos使用 group 来表示应用。
  • 微服务名称:用于标识一个微服务。可以通过微服务名称查询需要访问的目标微服务。
  • 微服务版本:表示微服务的版本。当存在微服务属性变化、接口变化的场景,建议修改版本号。
  • 微服务描述:简单的微服务描述信息。
  • 微服务属性:用于描述微服务的扩展信息。
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

当一个微服务接入配置中心以后,Java Chassis 3的配置管理模块,会自动从配置中心获取如下配置层次的配置信息:

  • 应用配置。
  • 服务配置。
  • 版本配置。
  • 自定义配置。

这些配置在不同配置中心的对应关系:

项目 Nacos 配置中心 Kie 配置中心 备注
应用配置 namespace=environment
group=application
dataId=application
environment=environment
app=application
 
服务配置 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  

以应用视角建立这种对应关系的好处,是用户不需要自行规划如何在配置中心存放数据,可以直接将一个优秀的管理实践应用于业务场景。将用户需要思考的问题,固定为几个具体的问题:如何创建应用级别的配置?如何创建服务级别的配置?如何创建微服务自定义的配置?

应用视角的配置管理另外一个关键问题,是开发者如何使用配置。

  • Spring Boot使用配置

Spring Boot的开发者一般通过 @Value@ConfigurationProperties 和 Environment 获取配置。 它提供了 PropertySource 来扩展配置源。 Spring Boot并未针对配置变更提供额外的处理机制,无法很好的处理配置变更。 尽管当 PropertySource 的内容变化后,通过 Environment 可以获取到最新的版本内容,但是 @Value@ConfigurationProperties 定义的配置项则不会发生变化。

  • Spring Cloud使用配置

Spring Cloud在Spring Boot基础之上,提供了动态配置的能力。 可以使用 @RefershScope 标签声明 Bean, 在配置变化后,Spring Cloud会销毁老的 Bean, 并重建新的 Bean,新的 Bean会使用最新的配置值进行初始化。 Spring Cloud在处理配置变更的过程中,会对Bean的访问加读写锁。

  • Java Chassis 3使用配置

Java Chassis 3完全兼容 Spring Boot的配置使用方式。 并提供了更加友好的 API 监听配置变更和处理优先级配置。 配置监听 API 主要用于高性能场景:配置变更后需要进行必要的业务逻辑初始化,初始化可以在配置变更线程中执行,而不阻塞当前业务执行。

@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");
  }
}

优先级配置是Java Chassis3特有的管理配置优先级方式。比如对于某个方法,会考虑是否有应用级别的全局配置、针对服务的配置和针对这个方法的配置,针对方法的配置优先级最高。 这种配置方式被广泛应用于Java Chassis 3的限流等服务治理场景中。 下面的代码片段是Java Chassis的接口超时配置示例。

@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;
}

相对于Spring Cloud,Java Chassis3的配置API,能够更加方便的监听配置变化,并提供了更好的性能。

客户故事:Spring Cloud配置变更会加锁。在高并发场景,配置变更会阻塞所有请求的执行。如果业务执行(已经获取读锁)包含RPC等相对慢的逻辑,配置变更等待写锁以及其他执业务线程等待读锁都会被阻塞,产生雪崩效应,触发应用吞吐急剧下降。Java Chassis 3配置变更不阻塞业务处理,能够有效的防止配置变更触发雪崩效应,特别是在高并发、需要动态调整运行、治理规则的业务场景。

 文章来源地址https://www.toymoban.com/news/detail-817986.html

点击关注,第一时间了解华为云新鲜技术~

 

到了这里,关于解析Java Chassis 3中应用视角的配置管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微信小程序】如何获得自己当前的定位呢?本文利用逆地址解析、uni-app带你实现

    目录 前言 效果展示 一、在腾讯定位服务配置微信小程序JavaScript SDK 二、使用uni-app获取定位的经纬度 三、 逆地址解析,获取精确定位 四、小提示 在浏览器搜索腾讯定位服务,找到官方网站,利用微信或者其他账号注册登录,登录后如下图操作 点进去之后,可以看到如下图

    2024年01月19日
    浏览(86)
  • Java 应用部署包优化经验分享

    背景 最近接手了一个 2018 年的老项目,因为太久远了,功能上的代码不敢乱动,虽然是老项目,但最近一年也在持续加功能,功能不稳定,于是我就进入了救火式改 Bug 的状态。 功能不能妄动,但是这个项目还有一个问题,打包模块打出的全量包部署不起来。拿到这个项目的

    2024年01月21日
    浏览(83)
  • 【佳佳怪文献分享】MVFusion: 利用语义对齐的多视角 3D 物体检测雷达和相机融合

    标题:MVFusion: Multi-View 3D Object Detection with Semantic-aligned Radar and Camera Fusion 作者:Zizhang Wu , Guilian Chen , Yuanzhu Gan , Lei Wang , Jian Pu 来源:2023 IEEE International Conference on Robotics and Automation (ICRA 2023) 这是佳佳怪分享的第2篇文章 多视角雷达-摄像头融合三维物体检测为自动驾驶提供了更

    2024年02月12日
    浏览(57)
  • 深入解析SNMP协议及其在网络设备管理中的应用

    SNMP(Simple Network Management Protocol,简单网络管理协议)作为一种用于网络设备管理的协议,在实现网络设备的监控、配置和故障排除方面发挥着重要的作用。本文将深入解析SNMP协议的工作原理、重要概念和功能,并探讨它在网络设备管理中的应用。 首先,让我们对SNMP协议进

    2024年02月10日
    浏览(41)
  • 本文通过实例介绍了Redis的基础知识、数据类型、数据结构以及典型应用场景 值得一看!

    作者:禅与计算机程序设计艺术 2017年,Redis是基于MIT许可发布的一个开源的高性能键值数据库,其开发语言为C语言。它提供了多种数据类型(strings、hashes、lists、sets、sorted sets等),分布式支持(可横向扩展),内存存储,持久化功能,事务处理功能等。作为一种高性能的

    2024年02月06日
    浏览(66)
  • Python与Pytorch系列(二) 本文(1.8万字) | 解析Opencv, Matplotlib, PIL | 三者之间的转换 | 三者对JPG和PNG读取和写入 |

    点击进入专栏: 《人工智能专栏》 Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程 推荐网站 : OpenCV Matplotlib Pillow opencv的基本图像类型可以和numpy数组相互转化,因此可以直接调用 torch.from_numpy(img) 将图像转换成 t

    2024年02月03日
    浏览(71)
  • 高光谱分类论文解读分享之Grid Network: 基于各向异性视角下特征提取的高光谱影像分类

    Grid Network: Feature Extraction in Anisotropic Perspective for Hyperspectral Image Classification Zhonghao Chen , Student Member, IEEE, Danfeng Hong , Senior Member, IEEE, and Hongmin Gao , Member, IEEE Anisotropic, feature fusion, hyperspectral (HS) images, semantic gap, spectral–spatial feature. 考虑高光谱影像内部空间和光谱特征各向异性

    2024年01月19日
    浏览(48)
  • 权限管理详解:认证、授权及Spring Security配置解析

    深入探讨权限管理的重要性与实现方式,包括认证、授权概念,基于角色和资源的访问控制方案,以及Spring Security框架的概述和快速入门指南。

    2023年04月10日
    浏览(37)
  • 管理学国际化与领导力视角

    随着全球化的进程不断加速,管理学的国际化已经成为一个不可忽视的趋势。在这个多元化和全球化的时代,管理者需要具备跨文化的领导力,以适应不同国家和地区的商业环境,并有效地管理全球团队。本文将从管理学国际化和领导力的角度探讨这一问题。 首先,管理学国

    2024年02月09日
    浏览(38)
  • 三个视角解读ChatGPT在教学创新中的应用

      教育工作者不应该因为学生利用了先进技术而惩罚他们,相反,应该专注于让学生去挑战超越AI能力范围的任务。这需要我们重新思考教育策略和方法,同时培养学生独特的人类特质的创新性思维能力。[1] 更重要的目标是为学生的未来做准备,毫无疑问,他们的未来肯定离

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包