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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文演示了如何利用阿里云容器服务的服务编排能力实现应用的高可用,以及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 熔断器的使用方式。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
机器学习/深度学习 监控 持续交付
构建高效微服务架构:后端开发的新趋势探索深度学习在图像识别中的边界
【5月更文挑战第27天】随着业务需求的快速变化和市场竞争的激烈,企业需要更灵活、高效和可扩展的系统来支持其运营。微服务架构作为一种新兴的软件开发模式,已经成为后端开发领域的热门话题。本文将深入探讨微服务架构的概念、优势以及如何构建一个高效的微服务架构,帮助后端开发者更好地应对业务挑战。 【5月更文挑战第27天】 随着人工智能的不断进步,深度学习技术已经在图像识别领域取得了显著成就。本文将深入探讨深度学习模型在处理复杂图像数据时的挑战与机遇,分析现有技术的局限性,并提出潜在的改进方向。通过实验验证,我们将展示如何通过创新的网络架构、数据增强策略和损失函数设计来提升模型性能。本研究不仅为深度学习
|
1天前
|
Kubernetes API 开发者
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第27天】 在现代软件开发领域,微服务架构已经成为一种流行的设计模式。它通过将大型应用程序拆分成一系列小型、独立的服务来提高可维护性、扩展性和敏捷性。本文深入探讨了如何构建一个高效的微服务架构,包括选择合适的技术栈、实现服务的解耦和独立部署、以及确保系统的高可用性和安全性。我们将讨论微服务架构的优势,以及在实施过程中可能遇到的挑战和解决方案。
|
1天前
|
消息中间件 监控 数据库
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第27天】 在当今快速演变的技术景观中,构建高效、可扩展且易于管理的后端系统已成为开发社区的重中之重。微服务架构作为一种创新的软件开发模式,以其独特的模块化和独立性特征,为解决复杂系统问题提供了新的解决方案。本文将深入探讨微服务架构的核心概念,分析其对后端开发流程的影响,并提供一系列实践策略来帮助开发者构建和维护高效的微服务系统。通过实际案例分析和最佳实践的分享,我们旨在为读者提供一套全面的工具和思路,以优化他们的后端项目并提升系统性能。
|
1天前
|
负载均衡 监控 API
探索后端开发中的微服务架构设计与实践
在当今快速发展的互联网时代,后端开发领域的微服务架构设计和实践变得愈发重要。本文将从微服务架构的概念、优势,以及设计和实施过程中的关键问题等方面展开探讨,带您深入了解后端开发中微服务架构的精髓。
6 0
|
1天前
|
存储 监控 安全
构建高效微服务架构:后端开发的新范式
【5月更文挑战第27天】随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性和维护性的瓶颈。本文探讨了采用微服务架构作为解决方案的优势与挑战,并详细阐述了在设计、部署和优化微服务过程中的关键实践和技术考量。通过将大型应用程序拆分成一系列小型、自治的服务,开发团队可以更灵活地应对市场变化,提高系统的可靠性,同时促进技术创新。
|
1天前
|
运维 负载均衡 API
构建高效微服务架构的七大关键策略
【5月更文挑战第27天】 在当前企业级应用开发中,微服务架构已成为实现敏捷、可扩展和灵活部署的主流解决方案。本文将深入探讨构建和维护一个高效微服务系统的七个关键策略,包括服务划分原则、API网关设计、服务发现与注册、配置管理、熔断机制、分布式跟踪及持续集成和部署。这些策略不仅有助于提升系统的稳定性和弹性,还能确保在不断变化的业务需求面前,系统能够快速响应并保持高效的运行状态。
|
1天前
|
监控 安全 数据管理
构建高效微服务架构的五大核心要素
【5月更文挑战第27天】在现代软件开发中,微服务架构以其灵活性、可扩展性和容错性而受到企业青睐。本文将深入探讨构建一个高效微服务架构所需的五大核心要素:服务划分策略、通信机制、数据管理、安全性和监控与日志系统。这些要素是确保微服务架构能够高效运行并适应快速变化需求的关键。我们将逐一解析每个要素的重要性及其实现方法,为后端开发者提供一套全面的指导原则和实践技巧。
|
1天前
|
消息中间件 缓存 数据库
构建高性能微服务架构:从理论到实践
【5月更文挑战第27天】在现代软件开发中,微服务架构已成为实现可扩展、灵活和容错系统的关键设计模式。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计理念、技术选型以及性能优化策略。我们将通过分析真实案例,提供一套实用的指导原则和最佳实践,帮助开发者提升系统的响应速度和处理能力,从而满足不断变化的业务需求。
|
1天前
|
存储 运维 监控
探索微服务架构下的系统监控策略
【5月更文挑战第27天】在当今快速迭代和持续部署盛行的软件工程实践中,微服务架构以其灵活性、可扩展性成为了众多企业技术选型的宠儿。然而,随之而来的复杂性也给系统监控带来了前所未有的挑战。本文深入剖析了在微服务环境中实施有效监控的策略,探讨了如何通过日志聚合、性能指标监控与分布式追踪技术相结合,实现对微服务生态系统的全方位把控。我们将分享一系列实践经验,并讨论监控策略的最佳实践,以期为面临类似挑战的开发者和运维团队提供参考。
|
1天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的新范式
【5月更文挑战第27天】在现代软件开发领域,随着业务需求的不断复杂化和开发团队规模的增长,传统的单体应用架构逐渐显得笨重且难以维护。微服务架构作为解决这一问题的银弹,其设计理念是拆分大型应用程序为一系列小型、自治的服务单元,每个单元负责一个功能模块并独立运行在其各自的进程中。本文探讨了微服务架构的设计原则、技术选型、以及在实施过程中可能面临的挑战,并提供了一系列解决方案和最佳实践,旨在帮助后端开发人员构建更加灵活、可扩展且高效的系统。

相关产品

  • 容器计算服务