文档章节

阿里云ACM:云原生配置管理利器

阿里云官方博客
 阿里云官方博客
发布于 11/19 17:06
字数 1527
阅读 9
收藏 0

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

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

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

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

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

和传统人肉到生产服务器上一台台手动修改配置的思路不同,在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的云上实现,可以将以上的配置管理问题进行优化,配置修改将变得异常简单和高效,如下图所示。

整个操作流程分为两步:

  • 用户在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控制台上可以直接获取。

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

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

如下图所示。

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

Spring Cloud 代码和配置变更实例

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

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

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

则将返回:

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

原文链接

© 著作权归作者所有

共有 人打赏支持
阿里云官方博客
粉丝 130
博文 458
码字总数 982073
作品 0
杭州
程序员
私信 提问
阿里云应用配置管理ACM 4.1.0 版本发布

阿里云应用配置管理产品ACM 近日发布4.1.0版本,该版本主要新增功能: 1、新增nodejs、c++客户端,全面支持nodejs以及c++体系。2、支持国际化,中英文 3、支持命名空间删除、详情 4、支持按g...

guoping.gp
2017/12/21
0
0
阿里云应用配置管理ACM发布,重新定义云上配置的存放方式

9月26日,阿里云宣布应用配置管理ACM产品正式商用,将重新定义云上配置的存放方式。 据了解,该产品具备亿级应用配置处理能力,将分布式架构下的应用配置管理智能化,极大的降低了在微服务、...

云攻略小攻
09/27
0
0
阿里云ACM英文版上线,论“全局配置”在电商国际化微服务平台建设中的妙用

这是一个最好的时代。中国的品牌正在走向世界。希望我们的云服务商们,能够助力它所承载的中国企业出海,以国际化的视野和全球化的高度,为世界各地的客户提供我们最好的服务。 ACM 英文版上...

中间件小哥
06/12
0
0
阿里云应用配置管理ACM商用,配置信息秒级生效

软件升级离不开应用配置工作环节,在业务量大的场景下,智能化的配置工具尤为重要。 近日,阿里云宣布应用配置管理ACM商用,可保证大型客户云上场景配置中心的安全合规,让运维人员和开发者无...

阿里云头条
10/09
0
0
如何借助配置中心ACM加速企业IT服务快速迭代

在5月29日召开的第二届研发效能嘉年华中,云效邀请了阿里云产品团队的伏羿和来自阿里巴巴中间件技术部的彦林带来了“如何借助配置中心ACM加速企业IT服务快速迭代”的主题分享。 分别对配置中...

smile小太阳
06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS账户如何工作,我们如何获取eos账号?

EOS账户的工作方式是什么?帐户是存储在区块链中的人类可读名称。它可以由个人或一群人拥有,具体的取决于权限配置。需要一个帐户来将交易转移或推送到区块链。——EOSIO Wiki EOS账户如何工...

笔阁
12分钟前
0
0
iOS面试之@property

https://github.com/acBool/Blogs/blob/master/property/%40property%E4%BB%8B%E7%BB%8D.md @property介绍 相信做过iOS开发的同学都使用过@property,@property翻译过来是属性。在定义一个类...

壹峰
14分钟前
0
0
[springBoot系列]--springBoot注解大全

一、注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加......

Jack088
28分钟前
7
0
tomcat编译超过64k大小的jsp文件报错原因

  今天遇到一个问题,首先是在tomcat中间件上跑的web项目,一个jsp文件,因为代码行数实在是太多了,更新了几个版本之后编译报错了,页面打开都是报500的错误,500的报错,知道http协议返回...

SEOwhywhy
49分钟前
5
0
flutter http 请求客户端

1、pubspec文件管理Flutter应用程序的assets(资源,如图片、package等)。 在pubspec.yaml中,通过网址“https://pub.dartlang.org/packages/http#-installing-tab-”确认版本号后,将http(0...

渣渣曦
50分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部