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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 本文演示了如何利用阿里云容器服务的服务编排能力实现应用的高可用,以及Spring Cloud Hystrix 熔断器的使用方式。

高可用和容错

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

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

二、部署Spring Cloud应用示例

三、服务发现

四、服务间通信与集成

五、服务智能路由

六、集中配置管理

七、高可用和容错(本文)

八、监控和日志

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

服务降级和容错

Spring Cloud 提供了Netflix Hystrix智能断路器能力。当服务调用超时或出错的时候,可以将对失效服务的调用断路,尽量使得错误不会在系统中产生雪崩效应。

在这里简单介绍一下如何在应用中添加Hystrix支持。由于篇幅所限,本文的示例代码中没有包含这部分内容。读者可以访问Spring Cloud Netflix 文档获取详细描述。

在build.gradle中添加项目对Hystrix和Eureka的依赖包。

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

在应用里添加@EnableCircuitBreaker注解。由于已经引入了Hystrix依赖,这实际上是使用Hystrix的熔断器能力。

@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public class FoobarHystrixApplication {

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

在服务调用时,针对可能出错的下游服务通过@HystrixCommand设置出错时的fallback方法,一旦调用超时或出错会调用fallback方法。

@Service
public class BarService {

    @Autowired
    @LoadBalanced
    private RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "getMessageFallback")
    public String getMessage() {
        return restTemplate.getForObject("http://bar/message", String.class);
    }

    public String getMessageFallback(){
        return "Bar service (fallback result)";
    }
}

通过引入Hystrix,可以完成服务一级的出错断路功能,提供了fallback方法后,可以在下游服务失效的时候返回临时替代结果,一定程度上实现了服务降级的能力。

跨可用区部署

实现应用的高可用的方式之一是将容器实例部署到多个可用区中。阿里云容器服务支持跨可用区的编排,以及其它很多部署模式。

比如我们想按照如下架构部署应用:

zone

容器集群的节点分布在两个可用区里,每个服务至少为两个容器实例,同一容器实例不要在一个可用区内。外面申请一个SLB将流量导入,进行跨可用区的负载均衡。

这样的部署描述文件可以声明如下:

...
  svc1:
    image: xxx
...
  svc2:
    image: xxx
    environment:
      - affinity:service!=svc1
...      
  foo:
    image: xxx
    labels:
      aliyun.scale: "2"
    environment:
      - 'availability:az==2'
...

svc2的描述中affinity:service!=svc2表示svc2不能部署在svc1所在节点。

foo的描述中aliyun.scale: "2"表示有两个节点,这两个节点必须在不同的可用区('availability:az==2')

节点失效时容器重新调度

容器服务支持对Docker容器的重新调度:当一个节点失效时,容器可以被自动调度到其他可用节点自动运行。缺省情况下,容器的重新调度策略是关闭的。根据需要可以用如下配置来让重调度策略生效:

redis:
  image: redis
  environment:
    - reschedule:on-node-failure

这里演示的只是很小一部分容器服务的服务治理能力,详细内容请参见服务编排文档

小节

本文演示了如何利用阿里云容器服务的服务编排能力实现应用的高可用,以及Spring Cloud Hystrix 熔断器的使用方式。

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3天前
|
负载均衡 大数据 测试技术
docker容器技术有哪些应用场景?
docker容器技术有哪些应用场景?
18 5
|
8天前
|
C# 微服务 Windows
模块化革命:揭秘WPF与微服务架构的完美融合——从单一职责原则到事件聚合器模式,构建高度解耦与可扩展的应用程序
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中借鉴微服务架构思想,实现模块化设计。通过将WPF应用分解为独立的功能模块,并利用事件聚合器实现模块间解耦通信,可以有效提升开发效率和系统可维护性。文中还提供了具体示例代码,展示了如何使用事件聚合器进行模块间通信,以及如何利用依赖注入进一步提高模块解耦程度。此方法不仅有助于简化复杂度,还能使应用更加灵活易扩展。
23 0
|
8天前
|
容器 C# Docker
WPF与容器技术的碰撞:手把手教你Docker化WPF应用,实现跨环境一致性的开发与部署
【8月更文挑战第31天】容器技术简化了软件开发、测试和部署流程,尤其对Windows Presentation Foundation(WPF)应用程序而言,利用Docker能显著提升其可移植性和可维护性。本文通过具体示例代码,详细介绍了如何将WPF应用Docker化的过程,包括创建Dockerfile及构建和运行Docker镜像的步骤。借助容器技术,WPF应用能在任何支持Docker的环境下一致运行,极大地提升了开发效率和部署灵活性。
22 0
|
8天前
|
应用服务中间件 Java Maven
掌控视图的力量!深入解析 JSF 视图管理,揭秘视图生命周期的秘密,让你的应用更高效!
【8月更文挑战第31天】JavaServer Faces (JSF) 是一种强大的框架,用于管理 Web 应用程序的视图。本文通过具体案例介绍 JSF 视图管理的基础知识,包括创建、管理和销毁视图的过程。首先,在 Eclipse 中创建一个新 JSF 项目,并配置 Maven 依赖。接着,在 `WEB-INF` 目录下配置 `web.xml` 文件,设置 JSF servlet。
21 0
|
8天前
|
JavaScript 应用服务中间件 nginx
玩转现代化部署:Angular与Docker的完美邂逅——细说如何通过容器化技术让您的Angular应用飞速上线,实现一键部署的高效与便捷,彻底告别复杂流程
【8月更文挑战第31天】容器化技术已成现代软件部署标配,为应用提供一致的运行环境。本文通过具体示例详细介绍了如何使用 Docker 容器化 Angular 应用,包括创建 Angular 项目、编写 Dockerfile 以及构建和运行 Docker 镜像的过程,显著提升了部署效率与可靠性。无论在本地调试还是生产部署,Docker 均提供了高效解决方案。
19 0
|
8天前
|
Cloud Native 架构师 持续交付
探索云原生之旅:从传统应用到微服务的转型之路
【8月更文挑战第31天】本文是一篇深入浅出的指南,旨在帮助开发者和架构师理解如何将传统应用迁移到云原生架构。我们将通过一个实际的案例,展示如何使用容器化、服务网格和持续集成/持续部署(CI/CD)等技术,实现应用的现代化改造。文章不仅提供理论指导,还包含代码示例,确保读者能够获得实践知识。无论你是云原生新手,还是希望深化理解的资深人士,这篇文章都将为你开启一段新的旅程。
|
23天前
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
|
3月前
|
Java 应用服务中间件 Maven
ContextLoaderListener在Spring应用中的作用与配置方法
ContextLoaderListener在Spring应用中的作用与配置方法
|
Java 开发者 微服务
深入解析@SpringBootApplication注解:简化Spring Boot应用的配置
在现代的Java开发中,Spring Boot框架成为了构建微服务和快速开发应用的首选。Spring Boot的成功部分归功于其简化的配置和约定大于配置的理念。而`@SpringBootApplication`注解则是Spring Boot应用的入口,负责自动配置和启动Spring Boot应用。本文将深入探讨`@SpringBootApplication`注解的作用、用法,以及在Spring Boot应用中的应用场景。
803 0
|
4月前
|
安全 Java Maven
Spring Boot常见企业开发场景应用、自动配置原理结构分析(三)
Spring Boot常见企业开发场景应用、自动配置原理结构分析

相关产品

  • 容器计算服务