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

开发者社区> libinjingshan> 正文

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

简介: 本文演示了如何利用阿里云容器服务的服务编排能力实现应用的高可用,以及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 熔断器的使用方式。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SpringCloud迁移至EDAS微服务——Series2:在 ECS 集群中部署 Web 应用
SpringCloud迁移至EDAS微服务——Series2:在 ECS 集群中部署 Web 应用
1714 0
本地容器服务 VS 公有云容器服务
本文讲的是本地容器服务 VS 公有云容器服务【编者的话】是将容器部署到本地,还是云上,这是所有公司都会考虑的问题,这两者各有什么利弊呢,让我们逐一看看。
1891 0
【公测】服务器迁移中心——应用环境、服务器轻松上云
服务器迁移中心公测邀请,公测申请二维码及链接见文章底部
741 0
云原生时代下,容器服务如何发展与落地 | 开发者社区精选文章合集(十七)
云原生的火热带来了企业基础设施和应用架构等技术层面的革新。大势所趋下,越来越多的企业选择拥抱云原生。但是云原生时代下,企业又将面临哪些容器安全新挑战,又该如何解决呢?
76 0
《云计算架构技术与实践》读书笔记(五):Docker 容器及其调度
5.1容器典型应用场景 Docker技术的出现和迅猛发展,已成为云计算产业的新的热点。容器使用范围也由互联网厂商快速向传统企业扩展,大量传统企业开始测试和尝试部署容器云。
2177 0
阿里云容器服务Kubernetes实现应用自动部署
## 前言 CICD是研发效率提升必不可少的一环, 要提高迭代效率,就要减少开发到部署中等待和人工操作的时间与步骤。 通过容器以及周边产品集成,我们更能将代码开发完成到部署时间极大缩短, 并将一切手工操作自动化。
5204 0
SpringCloud迁移至EDAS微服务——Series3:在容器服务K8s集群中部署应用
SpringCloud迁移至EDAS微服务——Series3:在容器服务K8s集群中部署应用
2568 0
DockOne微信分享(八十七):基于Docker的开发云提高资源利用率的实践
本文讲的是DockOne微信分享(八十七):基于Docker的开发云提高资源利用率的实践【编者的话】Docker的出现,为更简便、更细粒度地对云资源的调控提供了一个强有力的支撑,WeX5开发者云基于Rancher+Docker,在如何提高物理资源利用率的课题上做了一些探索和研究,在保障用户体验良好的前提下,大大提高了物理资源的利用率,有效地降低了运营成本。
1911 0
MyEclipse使用Docker的JavaEE开发
本文讲的是MyEclipse使用Docker的JavaEE开发【编者的话】本文主要讲述了如何在MyEclipse中通过Docker开发JavaEE程序。
2136 0
+关注
libinjingshan
李斌,目前负责阿里云容器服务解决方案的研发工作。加入阿里之前,李斌曾在IBM工作,专注于企业软件开发,DevOps,微服务和Docker实践。
24
文章
0
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载