在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用(六)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文介绍了如何通过Spring Config Server和阿里云的对象存储OSS来进行配置信息的集中管理。

集中配置管理

本文为阿里云容器服务Spring Cloud应用开发系列文章的第六篇。

一、在阿里云容器服务上开发Spring Cloud微服务应用

二、部署Spring Cloud应用示例

三、服务发现

四、服务间通信与集成

五、服务智能路由

六、集中配置管理(本文)

七、高可用和容错

八、监控和日志

九、服务的部署和发布策略

在传统的运维中,如果一个服务器或着运行环境升级升级,可以通过自动化脚本对服务器进行更新。随着时间的推移和需求的不断变化,可能需要运维人员登陆进入服务器进行改动。这样做虽然方便,但积累起来会造成服务器环境的"漂移",意味着自从上次代码部署后在这个服务器发生了什么改变谁都不记得了,也许微小的一个差异就会引起错误。

不变基础架构(Immutable Infrastructure)的意思我们不再打补丁了,也不允许运维人员登陆进入手工修改。如果服务器需要升级,那就把原来的服务停掉,删除服务器,用一个新的服务器替换。不变架构保证了线上运行的代码和配置永远是有版本控制,并且一致的。

Spring Cloud Config Server

这样做会带来一些不方便,如果一个服务需要更新一个基础配置,也需要在代码的配置文件中进行更改,构建一个新的镜像,然后把该服务的所有实例停掉进行替换。有时候为了更改一个配置信息而重新构建镜像,这件事总让人觉得有些不对。能不能应用的配置信息也集中管理起来?

Spring Cloud提供的集中配置管理(Config Server)可以解决这个问题。服务在启动的时候统一从一个集中的配置服务器中读取的配置,这样可以保证服务的代码和配置选项都不变的情况下又能够得到最新的配置信息。

我们在下面会演示如何创建Config Server,如何让其它服务访问Config Server。

注意:本文的示例程序没有包含这部分内容。如果向获得详细描述,请参见Spring官方文档。

创建Config Server

在build.gradle中引入对Config Server的依赖。

dependencies {
    compile('org.springframework.cloud:spring-cloud-config-server')
   ...
}

通过@EnableConfigServer注解将主class声明为Config Server:

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

application.properties中定义Config Server的侦听端口和从git中获得配置信息:

server.port=8888
spring.cloud.config.server.git.uri=https://github.com/xxxx/spring-cloud-samples-config

git.uri指向存储配置信息的git仓库,里面为每个服务创建一个.properties文件,例如如下文件目录结构:

$ tree springcloud-samples-config/
springcloud-samples-config/
├── foo-cloud.properties
└── foo.properties

0 directories, 2 files

foo.properties是为一个名字为foo的服务存储配置信息的文件,foo-cloud.properties是同样的foo服务在cloud profile下使用的配置信息。

具体关于Config Server内容可以参见Spring官方文档:Spring Cloud Config Server

假定foo需要一个名字为message的配置信息,可以在foo.properties中写入:

message = Spring Cloud!

Config Server启动后可以通过http协议访问,获取配置信息:

$ curl http://localhost:8888/foo/message
Spring Cloud!

在其它服务中配置对Config Server的访问

所有需要从Config Server中获取配置信息的服务,需要在build.gradle中引入Spring Config依赖:

dependencies {
    compile('org.springframework.cloud:spring-cloud-starter-config')
    ...
}

@RefreshScope注解将FooController class声明为从Config Server中获取配置。

@RefreshScope
@RestController
public class FooController {
    ...

bootstrap.yml声明Config Server的地址和端口号,在这里分别是config-server8888

spring:
  ...
  cloud:
    config:
      uri: http://config-server:8888

启动容器时,通过容器间的links将真正的Config Server和服务关联起来。

假定这个服务就上文提到的foo服务,那么它如何获取message配置呢?这也是通过注解完成。

public class FooController {
    ...
    @Value("${message}")
    private String message;
    ...

@Value("${message}")表示在应用启动时自动注入FooController的message变量。

利用阿里云OSS进行配置信息同步

通过Spring Config Server进行配置信息同步可能有一个潜在的问题,例如上面的示例中,在bootstrap.yml中配置对配置服务器的访问。bootstrap.yml是在应用启动时解析的,如果在启动时配置服务器还没有启动则会出现依赖它的所有服务也无法成功启动。

我们这里展示的是通过阿里云的对象存储(OSS)完成服务的集中配置管理。原理是所有的容器挂载OSS,启动成功后容器内的应用从OSS中读取配置。由于OSS具有非常高的可靠性,并且对其内容的更改会被所有服务读到,非常适用于配置信息同步这个场景。

更进一步,阿里云容器服务上提供了OSSFS的支持。OSSFS可以把OSS模拟成为文件系统,应用可以直接用传统的文件系统API访问OSS,而不必使用OSS API。由于一般应用都是将配置存储在文件系统中,使用OSSFS意味着应用不必做任何变更就实现了配置信息的中心化管理。

下面演示如何创建OSS以及挂载OSSFS。

创建OSS Bucket并为子账号授权

进入OSS管理控制台,创建OSS Bucket,注意所属地域要选择容器集群所在地域,如下图所示:

oss01

Bucket创建好后,将配置文件上传。

oss02

基于安全的考虑,建议进入安全令牌创建子账号,并记录下AccessKeyId和AccessKeySecret。

oss03

进入容器服务控制台,在数据卷菜单下创建新的数据卷:

oss04

选择刚才创建的bucket:
oss05

在部署模版文件中为服务挂载OSSFS

在docker-compose.yml中为服务增加如下声明:

  bar:
    image: xxxx
    ...
    volumes:
      - 'foobar-config-oss:/config'

volumes中,foobar-config-oss是前面创建的OSS Bucket名字,/config是在容器中的挂载点。

验证OSSFS是否已经挂载成功

我们准备通过登陆进入容器来验证OSSFS是否已经挂载成功。

首先在容器服务的控制台上点击集群连接信息进入连接信息页面。

cluster_access

复制环境变量配置,在你的命令行窗口配置环境变量,下载证书,将证书解压缩到工作目录。

在工作目录下运行如下命令,获得挂载OSSFS的容器ID:

docker ps

进入容器,查看/config下的配置文件内容。

$ docker exec -ti 8eb8de74440c ash
/ # cat /config/bar-config.txt
message=Hello OSS!

可以看到容器已经成功挂载OSSFS。如果配置文件发生变更,上传进入OSS Bucket后容器就可以读到最新的内容。所以容器示例都挂载同一个数据卷,实现了配置信息的集中化管理和分布读取。

小节

本文介绍了如何通过Spring Config Server和阿里云的对象存储OSS来进行配置信息的集中管理。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
弹性计算 Java 关系型数据库
最佳实践:阿里云倚天ECS在千寻位置时空智能服务的规模化应用
当前,千寻已有上千台倚天ECS实例在支撑线上核心业务。
|
1天前
|
弹性计算 运维 Java
最佳实践:阿里云倚天ECS在千寻位置时空智能服务的规模化应用
阿里云、平头哥及安谋科技联合举办的飞天技术沙龙探讨了倚天Arm架构在业务创新中的应用。活动中,千寻位置运维专家分享了将核心业务迁移到倚天处理器ECS实例的成功案例,强调了倚天处理器的高能效比和降本增效优势。迁移过程涉及操作系统、CICD系统和监控系统的适配,以及业务系统的性能测试。目前,千寻已迁移了上千台ECS实例到倚天处理器,实现了成本和效率的显著提升。未来计划继续扩展倚天处理器在核心业务和K8S中的应用。
|
1天前
|
弹性计算 运维 负载均衡
【阿里云弹性计算】阿里云ECS在金融科技中的应用案例:高性能交易系统的构建
【5月更文挑战第27天】阿里云ECS助力某证券公司构建高性能交易系统,满足高并发、高可用和弹性扩展需求。ECS凭借最新处理器技术、高速内存实现高性能计算;支持多地域、多可用区部署保证高可用性;弹性伸缩特性适应业务波动,降低运维成本。通过分布式架构和负载均衡技术,实现交易请求高效处理,确保系统稳定运行。案例证明,阿里云ECS是金融科技领域构建高性能交易系统的理想选择。
10 1
|
1天前
|
Cloud Native 安全 Serverless
【阿里云云原生专栏】低代码开发在云原生平台的应用:阿里云低代码服务探索
【5月更文挑战第27天】在云原生时代,低代码开发凭借其图形化界面和预构建模块,简化了应用开发,提升了效率。阿里云积极探索低代码领域,推出函数计算FC和应用配置中心ACM等服务。FC让开发者无需关注基础设施,仅需少量代码即可实现应用部署,而ACM则提供动态配置管理,增强应用灵活性。阿里云的这些服务为企业数字化转型提供了高效、安全的解决方案,预示着低代码开发在云原生平台上的重要地位。
15 1
|
1天前
|
SQL 监控 安全
【阿里云云原生专栏】云原生安全体系构建:阿里云云防火墙与WAF的应用
【5月更文挑战第27天】阿里云云防火墙和WAF是构建云原生安全体系的关键产品,提供网络、主机和Web应用多维度防护。云防火墙采用分布式架构抵御网络攻击,确保应用安全稳定;WAF专注Web应用安全,防止SQL注入、XSS和DDoS等威胁。简单部署配置,结合使用可实现全面安全防护,提升企业云上应用安全性,保障业务安全运行。未来,阿里云将持续强化云原生安全建设。
14 1
|
2天前
|
Java API 网络架构
利用Java Spring Boot构建微服务架构的实践探索
随着业务复杂性的增长和互联网技术的飞速发展,微服务架构已成为现代软件开发中不可或缺的一部分。本文旨在探讨如何利用Java Spring Boot框架构建微服务架构,包括微服务的定义、优势,以及通过实际案例展示如何设计、开发和部署微服务。我们将关注服务拆分、服务间通信、数据一致性、服务治理等核心问题,并探讨如何结合Spring Cloud生态中的组件来实现高效、可靠的微服务架构。
|
2天前
|
消息中间件 弹性计算 物联网
【阿里云弹性计算】阿里云ECS在IoT领域的应用:支撑大规模设备连接与数据处理
【5月更文挑战第26天】阿里云ECS是弹性计算服务,支持IoT设备的连接与数据处理。通过MQTT协议实现设备快速接入,配合消息队列处理异构实时数据。ECS可用于部署数据处理工具、应用服务,如智能家居控制系统,通过弹性伸缩适应负载变化。结合阿里云其他服务,ECS为IoT提供完整解决方案,助力企业数字化转型。
11 0
|
2天前
|
弹性计算 Cloud Native 安全
【阿里云云原生专栏】云原生与芬克斯:阿里云函数计算在金融行业的应用案例
【5月更文挑战第26天】阿里云函数计算在金融行业数字化转型中发挥关键作用,提供高可用、安全、灵活且成本效益的解决方案。通过事件驱动架构和弹性伸缩,适应业务波动,确保服务连续性。在实时风控系统案例中,函数计算实现低延迟评估,提升风控效率。此技术助力金融企业快速创新,增强市场竞争力。
20 0
|
13天前
|
弹性计算 运维 监控
解密阿里云弹性计算:探索云服务器ECS的核心功能
阿里云ECS是核心计算服务,提供弹性云服务器资源,支持实例按需配置、集群管理和监控,集成安全防护,确保服务稳定、安全,助力高效业务运营。
272 0

相关产品

  • 容器计算服务