阿里云ACM:云原生配置管理利器,让云上的Spring Cloud应用配置管理舞动起来

简介: 在传统架构中,如果配置信息有变更,通常是登陆服务器手动修改配置来使配置生效。在微服务架构中,应用数和节点数由于微服务化数量激增,导致发布次数增加,配置变更难度加大,通常是将应用配置抽象出来放置在外部的配置中心里,从而实现配置变更的自动化,但这类原生方案会存在依赖严重、发布延时高的问题。

在传统架构中,如果配置信息有变更,通常是登陆服务器手动修改配置来使配置生效。在微服务架构中,应用数和节点数由于微服务化数量激增,导致发布次数增加,配置变更难度加大,通常是将应用配置抽象出来放置在外部的配置中心里,从而实现配置变更的自动化,但这类原生方案会存在依赖严重、发布延时高的问题。

Spring Cloud中的标准配置管理方法和存在的问题

以Spring Cloud为例,其提供了Spring Cloud Config组件来默认对配置进行管理。

关于Spring Cloud Config的工作原理,如下图所示:

1541680214859_91a597f5_158c_4d48_ba2a_61a4d08169b2

和传统人肉到生产服务器上一台台手动修改配置的思路不同,在Spring Cloud中,当用户配置发生变化时,用户可以在Git中修改配置,再通过Spring Cloud Config Server动态下发配置,从而在各个机器上动态生效。其整个流程大概如下:

  • 用户在Git中update和commit配置;
  • Spring Cloud Config Server通过回掉,获取更新配置;
  • 用户在其中任一一台机器上执行配置刷新操作 (图中为 "post /bus/refresh")
  • 目标机 (App A)在Config Server中拉取最新配置,并发送消息到消息总线中,通知其他机器配置被变更;
  • 所有其他机器通过消息总线获知配置刷新后,在Config Server中拉取最新配置。

至此,配置修改完成。

Spring Cloud Config组件成功的以配置中心思路解决了静态配置繁琐的运维问题,但是Spring Cloud Config仍存在以下问题:

  • 标准方案依赖Git。虽然提供其他存储支持,但是标准的Git方案饱受争议,毕竟Git运维在业界算是小众领域,在关键的生产环境中使用得并不多(开发测试环境除外);
  • 配置变更依赖Cloud Bus,架构复杂的同时,存在配置的一致性问题;
  • 整个配置的时效性较低。由于发布路径长,中间存在多个异步操作,因此从发布到最后所有配置生效,延时可能会是分钟级别。

阿里云ACM为spring cloud带来的配置管理优化

阿里云应用配置管理服务ACM,作为Nacos的云上实现,可以将以上的配置管理问题进行优化,配置修改将变得异常简单和高效,如下图所示。

1541729584501_4353a192_663a_48f4_9b3f_01c55cd80362

整个操作流程分为两步:

  • 用户在ACM中修改配置内容;
  • ACM动态推送到所有应用中。

ACM全面兼容Spring框架接口,包括Spring Framework、Spring Boot和Spring Cloud,其为 Spring Cloud编写的应用配置管理,和Spring Cloud Config对比,由于极简的架构,带来了众多的好处:

  • 配置变更推送性能高,根据阿里巴巴内部的性能统计来看,绝大多数情况下,配置推送0.5秒生效,99.9%场景下,3秒以内能推送到上千台机器;
  • 运维简单,不需要额外的Git存储或Cloud Bus组件,单应用接口即可完成所有配置中心功能;
  • 遵循开源精神,ACM作为Nacos的云上实现,用户无需额外付费即可使用全部功能。

Spring Cloud用户可以基于Spring Cloud Config提供的接口将Spring Cloud应用的配置管理无缝迁移到ACM上,大幅度提升基于Spring Cloud框架的微服务应用的配置管理敏捷性。此外,相比于Spring Cloud Config,ACM还拥有多项实用功能,例如,云上配置安全合规,配置灰度发布和回滚等。

如何快速部署ACM

使用Spring Cloud的用户在阿里云上如果要从Spring Cloud Config切换成ACM方案,在程序业务层代码无需任何改动,原生@Value标签直接有效。用户仅仅需要改动Spring Cloud应用的两个编译配置文件即可。

1、修改配置文件

在 bootstrap.properties中添加ACM的连接地址和认证信息,示例如下。其中,endpoint、namesspace、accessKey和secretKey等参数在ACM控制台上可以直接获取。

1541683676569_02f8d3ad_3993_4e11_9211_b78f6e85288b

指定spring.application.name和spring.coud.nacos.config.file以后,将决定ACM控制台上配置名,如上例中,配置名为com.alibaba.nacos.example.properties。

2、在 pom 中添加相关的nacos starter依赖

如下图所示。

1541683836271_356853cb_4aed_4c84_a6ed_192fa38a9fab

以上两处修改完成之后,重新打包编译Spring Cloud程序,即可将配置管理转为ACM托管。

Spring Cloud 代码和配置变更实例

以Spring Cloud代码示例为例,/echo 接口将返回动态配置参数 configValue 的值。

1541687303513_e93aed02_b920_46f4_ac82_f25ba9d36781

将以下代码片段示例打包运行,并在对应ACM控制台上添加配置,设置对应配置名DataID (本例中为com.alibaba.nacos.example.properties),并点击发布。

1541687775823_3d2f4026_d155_4f79_bd12_a204a363f45a

最后在本地运行curl命令,假设http监控端口为8080:

_2018_11_12_11_56_45

则将返回:

_2018_11_12_11_56_51

返回true值后,即配置成功。详细的程序实例,可参照ACM官方文档

欢迎加入Aliware企业级互联网架构钉钉群:21704851

相关文章
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——常见问题总结
本文总结了Spring Boot中使用事务的常见问题,虽然通过`@Transactional`注解可以轻松实现事务管理,但在实际项目中仍有许多潜在坑点。文章详细分析了三个典型问题:1) 异常未被捕获导致事务未回滚,需明确指定`rollbackFor`属性;2) 异常被try-catch“吃掉”,应避免在事务方法中直接处理异常;3) 事务范围与锁范围不一致引发并发问题,建议调整锁策略以覆盖事务范围。这些问题看似简单,但一旦发生,排查难度较大,因此开发时需格外留意。最后,文章提供了课程源代码下载地址,供读者实践参考。
515 0
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
1983 0
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——事务相关
本文介绍Spring Boot事务配置管理,阐述事务在企业应用开发中的重要性。事务确保数据操作可靠,任一异常均可回滚至初始状态,如转账、购票等场景需全流程执行成功才算完成。同时,事务管理在Spring Boot的service层广泛应用,但根据实际需求也可能存在无需事务的情况,例如独立数据插入操作。
403 0
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
近期,阿里云重磅发布了首款面向 Java 开发者的开源 AI 应用开发框架:Spring AI Alibaba(项目 Github 仓库地址:alibaba/spring-ai-alibaba),Spring AI Alibaba 项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。本文将详细介绍 Spring AI Alibaba 的核心特性,并通过「智能机票助手」的示例直观的展示 Spring AI Alibaba 开发 AI 应用的便利性。示例源
14140 144
|
人工智能 Java API
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
本次分享的主题是阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手,由阿里云两位工程师分享。
960 2
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
|
安全 Cloud Native Shell
云上攻防:云原生篇&Docker容器逃逸
本文介绍了Docker的基本概念及其对渗透测试的影响,重点讲解了容器逃逸的方法。Docker是一种轻量级的容器技术,与虚拟机相比,具有更高的便携性和资源利用率。然而,这也带来了安全风险,特别是容器逃逸问题。文章详细描述了三种常见的容器逃逸方法:不安全的配置、相关程序漏洞和内核漏洞,并提供了具体的检测和利用方法。此外,还介绍了几种特定的漏洞(如CVE-2019-5736和CVE-2020-15257)及其复现步骤,帮助读者更好地理解和应对这些安全威胁。
1837 3
云上攻防:云原生篇&Docker容器逃逸
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
阿里云开源 Spring AI Alibaba,旨在帮助 Java 开发者快速构建 AI 应用,共同构建物理新世界。
4385 8
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
2710 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
Cloud Native Java 对象存储
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
340 1

热门文章

最新文章