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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 阿里云的容器服务不但提供了语言无关的服务治理能力,同时对Spring Cloud应用也有很好的支持,还有很多对云应用动态管理的很多扩展。所有这些因素都使得阿里云容器服务部署运行微服务应用的一个完美平台。

服务的部署和发布策略

本文为阿里云容器服务Spring Cloud应用开发系列文章的第九篇。前文讨论了如何开发基于Spring Cloud微服务应用,所有代码通过标准的Dockerfile构建成为不同的镜像,我们还要写docker-compose.yml来描述容器启动参数和容器之间的关系,这个文件也就是我们常说的部署模版文件。

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

二、部署Spring Cloud应用示例

三、服务发现

四、服务间通信与集成

五、服务智能路由

六、集中配置管理

七、高可用和容错

八、监控和日志

九、服务的部署和发布策略(本文)

部署服务

在示例代码中有两个docker compose文件,一个是docker-compose.yml,另外一个是docker-compose.acs.yml。它们两者的区别是docker-compose.yml中的数据库是MySQL容器,docker-compose.acs.yml中服务连接的是阿里云的RDS

version: "2"
services:
  discovery1:
    container_name: discovery1
    image: registry.aliyuncs.com/jingshanlb/discovery-server
    labels:
      # demo only, do not use it in production
      aliyun.routing.port_8761: http://eureka1
    environment:
      - ADDITIONAL_EUREKA_SERVER_LIST=http://discovery2:8761/eureka/
      - SPRING_PROFILES_ACTIVE=cloud

  discovery2:
    container_name: discovery2
    image: registry.aliyuncs.com/jingshanlb/discovery-server
    environment:
      - ADDITIONAL_EUREKA_SERVER_LIST=http://discovery1:8761/eureka/
      - SPRING_PROFILES_ACTIVE=cloud
      - affinity:service!=discovery1
      
  gateway:
    image: registry.aliyuncs.com/jingshanlb/gateway
    ports:
      - "8080:8080"
    labels:
      aliyun.scale: "2"
      aliyun.lb.port_8080: http://${slbname}:8080
    environment:
      - EUREKA_SERVER_LIST=http://discovery1:8761/eureka/,http://discovery2:8761/eureka/
      - SPRING_PROFILES_ACTIVE=cloud
      - 'availability:az==2'

  mysql:
    image: registry.aliyuncs.com/acs-sample/mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=passw0rd
      - MYSQL_DATABASE=foodb
      - MYSQL_USER=user1
      - MYSQL_PASSWORD=passw0rd


  foo:
    image: registry.aliyuncs.com/jingshanlb/foo
    links:
      - mysql:mysql
    environment:
      - EUREKA_SERVER_LIST=http://discovery1:8761/eureka/,http://discovery2:8761/eureka/
      - SPRING_PROFILES_ACTIVE=cloud
      - MYSQL_DATABASE=foodb
      - MYSQL_USERNAME=user1
      - MYSQL_PASSWORD=passw0rd

  bar:
    image: registry.aliyuncs.com/jingshanlb/bar
    environment:
      - EUREKA_SERVER_LIST=http://discovery1:8761/eureka/,http://discovery2:8761/eureka/
      - SPRING_PROFILES_ACTIVE=cloud
      - SERVER_PORT=8080
      - MANAGEMENT_PORT=8081

  foobar:
    image: registry.aliyuncs.com/jingshanlb/foobar
    environment:
      - EUREKA_SERVER_LIST=http://discovery1:8761/eureka/,http://discovery2:8761/eureka/
      - SPRING_PROFILES_ACTIVE=cloud

两个Eureka Server组成的集群,容器名分别为discovery1discovery2,对于所有使用Eureka的其它服务来说,启动时的环境变量EUREKA_SERVER_LIST设置成这两个Eureka Server的URL,Eureka Client需要这个信息决定连接那个Eureka Server。

discovery1通过aliyun.routing.port_8761声明为对外可以访问,访问端点可以在控制台界面中的discovery1页面看到。

gateway服务通过aliyun.lb.port_8080配置为由SLB进行负载均衡。更多关于aliyun.lb和aliyun.routing的区别可以参见阿里云容器服务服务编排文档

foo的mysql:mysqllinks声明将mysql(容器)和mysql(foo代码使用的DNS地址)绑定起来,而且是跨主机的绑定。

模版部署文件中的其它内容已经都在前文中介绍过了,这里就不再重复了。

部署的过程在前面的文章已经讨论过了,这里把仅输入部署模版文件内容的部分再简单介绍一下。

拷贝docker-compose.yml内容,粘贴进入模版编辑器。注意其中的${slbname}将来会替换为前面创建的负载均衡名字或ID。

create_app02

点击创建并部署按钮,在对话框中输入负载均衡ID,确认后创建应用。
create_app03

服务升级

部署成功的应用如果镜像发生了变化,需要在对应用重新部署,如果docker-compose.yml内容发生了变化,需要执行变更配置

redeploy

发布策略

阿里云容器服务提供了多种发布策略,我们介绍一下这其中最简明的一种方式:rolling update发布,意思是在更新的服务时按顺序更新,只有当前一个服务更新成功后再做下一个服务的更新。这里的要求时需要用aliyun.scale标签声明容器实例数量,并且通过aliyun.probe声明了健康检查方式。

下面部署模版演示了如何使用rolling update模式发布(例子来源:服务编排文档)。

web:
  image: wordpress
  ...
  labels:
    aliyun.probe.url: http://container/license.txt
    aliyun.probe.initial_delay_seconds: '10'
    aliyun.routing.port_80: http://wordpress
    aliyun.rolling_updates: 'true'
    aliyun.scale: '2'

阿里云容器服务的服务治理能力

在本系列文章中我们讨论了如何利用SpringCloud构建一个微服务应用,以及如何在阿里云容器服务上部署微服务应用。阿里云容器服务在完全兼容Docker API的前提提供了服务治理能力,这些服务治理能力都是和语言无关的,比如服务的注册、发现和绑定,服务健康检查,高可用保证,服务接入路由,多重服务发布策略,服务的管控等。

后续会有相关的文章详细介绍这些功能。

总结

容器技术的应用隔离和一致性交付能力使得它成为微服务架构的最佳实践之一。由于封装了互联网级别的Netfix开源产品,Spring Cloud成为Java语言实现微服务应用的成熟框架。

阿里云的容器服务不但提供了语言无关的服务治理能力,同时对Spring Cloud应用也有很好的支持,还有很多对云应用动态管理的很多扩展。所有这些因素都使得阿里云容器服务部署运行微服务应用的一个完美平台。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
监控 安全 云计算
云端防御战线:云计算环境下的网络安全策略构建高效稳定的Docker容器监控体系
【5月更文挑战第27天】 在数字化时代的浪潮中,云计算已成为企业与个人存储和处理数据的重要平台。然而,随着云服务使用率的飙升,网络威胁也愈发狡猾且复杂。本文将深入探讨在云计算环境中维护网络安全的挑战及策略,重点分析信息安全的关键组成部分,并提出多层次防御模型以增强云环境的数据保护能力。通过剖析最新的安全技术与实践,我们旨在为读者提供一套全面的网络安全解决方案蓝图。
|
1天前
|
监控 Cloud Native 持续交付
构建未来:云原生架构在现代企业中的应用与挑战构建高效微服务架构:策略与实践
【5月更文挑战第27天】 随着数字化转型的深入,企业对技术的依赖日益增强。云原生技术以其灵活性、可扩展性和敏捷性成为推动企业IT架构现代化的关键力量。本文将探讨云原生架构的核心概念、实施策略以及在采纳过程中可能遇到的挑战。通过分析案例和最佳实践,旨在为读者提供如何在保持业务连续性的同时,利用云原生技术加速创新的见解。 【5月更文挑战第27天】 在当前软件开发的快速迭代和市场需求多变的背景下,微服务架构以其灵活性、可扩展性和容错性成为企业技术选型的热门。本文将探讨如何构建一个高效的微服务系统,包括关键的设计原则、常用的技术栈选择、以及实施过程中的最佳实践。我们将重点分析如何通过合理的服务划分、
|
1天前
|
Docker 容器
【开发问题记录】启动某个服务时请求失败(docker-componse创建容器时IP参数不正确)
【开发问题记录】启动某个服务时请求失败(docker-componse创建容器时IP参数不正确)
8 1
|
2天前
|
Java API 网络架构
利用Java Spring Boot构建微服务架构的实践探索
随着业务复杂性的增长和互联网技术的飞速发展,微服务架构已成为现代软件开发中不可或缺的一部分。本文旨在探讨如何利用Java Spring Boot框架构建微服务架构,包括微服务的定义、优势,以及通过实际案例展示如何设计、开发和部署微服务。我们将关注服务拆分、服务间通信、数据一致性、服务治理等核心问题,并探讨如何结合Spring Cloud生态中的组件来实现高效、可靠的微服务架构。
|
2天前
|
运维 监控 Cloud Native
构建高效云原生应用:容器化与微服务架构的融合
【5月更文挑战第26天】 在数字化转型的浪潮中,企业正迅速将重心转向云原生技术以支撑其业务灵活性和扩展性。本文深入探讨了如何通过结合容器化技术和微服务架构来构建和维护高效的云原生应用。首先概述了云原生的核心概念及其带来的优势,接着详细分析了容器化技术的关键作用以及微服务架构的设计原则。文章还展示了如何通过持续集成/持续部署(CI/CD)流程实现快速迭代,并通过实际案例说明如何应对分布式系统带来的复杂性挑战。最终,文中提出了一系列优化策略,旨在帮助开发者和运维人员提高系统的可靠性、安全性和性能。
|
5天前
|
Prometheus 监控 Cloud Native
Ubantu docker学习笔记(九)容器监控 自带的监控+sysdig+scope+cAdvisor+prometheus
Ubantu docker学习笔记(九)容器监控 自带的监控+sysdig+scope+cAdvisor+prometheus
|
5天前
|
网络协议 Docker 容器
Ubantu docker学习笔记(七)容器网络
Ubantu docker学习笔记(七)容器网络
|
5天前
|
Docker 容器
Ubantu docker学习笔记(六)容器数据卷——补充实验
Ubantu docker学习笔记(六)容器数据卷——补充实验
|
5天前
|
安全 Linux Docker
Ubantu docker学习笔记(六)容器数据卷
Ubantu docker学习笔记(六)容器数据卷
Ubantu docker学习笔记(六)容器数据卷
|
5天前
|
存储 Linux 调度
Ubantu docker学习笔记(五)容器底层技术
Ubantu docker学习笔记(五)容器底层技术

相关产品

  • 容器计算服务