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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文讨论了如何利用zuul实现服务智能路由,以及对外通过阿里云SLB实现对zuul的负载均衡。

服务智能路由

本文为阿里云容器服务Spring Cloud应用开发系列文章的第五篇,讨论如何利用Spring Cloud 对 Netflix Zuul支持,完成服务的职能路由功能。

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

二、部署Spring Cloud应用示例

三、服务发现

四、服务间通信与集成

五、服务智能路由(本文)

六、集中配置管理

七、高可用和容错

八、监控和日志

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

使用Zuul构建简单API Gateway

在手机端完成一个功能有可能需要调用多个后台的服务,如果从手机端完成所有调用,可能造成调用次数很多,通信时间过长。由于手机电量的限制,一般也不建议多次调用后台服务。

一个可行的办法是将所有相关的服务聚合起来,生成一个新的服务。新的服务作为入口点,前端应用只需调用一次,就完成了原来多次调用。并且,对于服务调用的处理也可以在新的服务中完成,更减轻了前端的处理压力。相关的代码在foobar中展示。

我们还可以利用Spring Cloud Zuul构建的一个API Gateway将foobar和其它需要对外提供服务的应用暴露出来。我们可以通过Zuul的配置文件声明对外的服务的URL模式等信息,可以非常简单地将服务对外输出。这部分示例代码为commons/gateway

Zuul是多实例的,对Zuul也需要负载均衡。在阿里云上,我们可以定义一个SLB来实现对Zuul的对外输出和负载均衡。相关的部署模版声明在docker-compose.yml中。

build.gradle中引入Zuul依赖

gateway服务使用Eureka进行服务的发现,所以在build.gradle不但由Zuul,还有对Eureka的依赖。

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

注解

在主class上添加@EnableZuulProxy,声明该应用使用Zuul提供服务路由能力;添加@EnableDiscoveryClient注解表示该应用内置服务发现客户端。由于在build.gradle中引入了Eureka,所以客户端会自动通过Eureka发现服务。

@SpringBootApplication
@EnableZuulProxy
@EnableDiscoveryClient
public class GatewayApplication {

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

application.yml中定义对服务的访问

application.yml中定义gateway侦听固定的端口8080,在zuul.routes.foobar.path定义所有对本机/acs/***访问都指向foobar服务。

zuul通过Eureka发现所有foobar服务,具体Eureka的配置和前文相同。

server:
  port: 8080

eureka:
  ...

zuul:
  routes:
    foobar:
      path: /acs/**
...

利用阿里云SLB进行负载均衡

gateway是服务的职能路由,内部的服务可以通过它对外暴露。如果我们想让gateway也是多个实例那么怎么将单一外部访问端点映射到多个gateway实例呢?

使用阿里云的SLB负载均衡可以达成这个目标。在阿里云容器服务提供了对docker compose模版的标签扩展,将服务声明为通过SLB进行负载均衡。具体方法见docker-compose.yml文件:

  gateway:
    image: xxxx
    ...
    labels:
      aliyun.scale: "2"
      aliyun.lb.port_8080: http://${slbname}:8080
    ...

阿里云容器服务会解析以aliyun开头的标签,并根据标签的定义执行不同的操作。aliyun.scale表示启动2个实例。

aliyun.lb.port_8080表示将该的所有实例通过SLB进行负载均衡,服务端口号(又称为后端端口号)为8080,SLB的地址通过随后的URL来描述。${slbname}为占位变量,需要替换为对应SLB的名字或ID。用户可以在部署文件中直接替换这个变量,也可以在部署应用时系统提示输入slbname,用户填入正确值。

URL中最后的8080表示SLB对外的端口号,在这里也是8080。

关于如何利用标签扩展docker compose能力在容器服务的官方帮助文档中有很详细的描述,读者可以关注,链接是阿里云容器服务帮助文档

小节

本文讨论了如何利用zuul实现服务智能路由,以及对外通过阿里云SLB实现对zuul的负载均衡。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2天前
|
Java 数据安全/隐私保护 Spring
Java 中 Spring Boot 框架下的 Email 开发
Java 中 Spring Boot 框架下的 Email 开发
28 2
|
2天前
|
前端开发 Java 测试技术
Java一分钟之Spring MVC:构建Web应用
【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
51 3
|
2天前
|
Java 应用服务中间件 测试技术
深入探索Spring Boot Web应用源码及实战应用
【5月更文挑战第11天】本文将详细解析Spring Boot Web应用的源码架构,并通过一个实际案例,展示如何构建一个基于Spring Boot的Web应用。本文旨在帮助读者更好地理解Spring Boot的内部工作机制,以及如何利用这些机制优化自己的Web应用开发。
29 3
|
2天前
|
安全 Java 开发者
深入理解Spring Boot配置绑定及其实战应用
【4月更文挑战第10天】本文详细探讨了Spring Boot中配置绑定的核心概念,并结合实战示例,展示了如何在项目中有效地使用这些技术来管理和绑定配置属性。
14 1
|
2天前
|
存储 安全 数据安全/隐私保护
【Docker 专栏】Docker 容器化应用的备份与恢复策略
【5月更文挑战第9天】本文探讨了Docker容器化应用的备份与恢复策略,强调了备份在数据保护、业务连续性和合规要求中的关键作用。内容涵盖备份的重要性、内容及方法,推荐了Docker自带工具和第三方工具如Portainer、Velero。制定了备份策略,包括频率、存储位置和保留期限,并详细阐述了恢复流程及注意事项。文章还提及案例分析和未来发展趋势,强调了随着技术发展,备份与恢复策略将持续演进,以应对数字化时代的挑战。
【Docker 专栏】Docker 容器化应用的备份与恢复策略
|
2天前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
2天前
|
开发框架 监控 Java
深入探索Spring Boot的监控、管理和测试功能及实战应用
【5月更文挑战第14天】Spring Boot是一个快速开发框架,提供了一系列的功能模块,包括监控、管理和测试等。本文将深入探讨Spring Boot中监控、管理和测试功能的原理与应用,并提供实际应用场景的示例。
15 2
|
2天前
|
Java Spring 容器
深入理解Spring Boot启动流程及其实战应用
【5月更文挑战第9天】本文详细解析了Spring Boot启动流程的概念和关键步骤,并结合实战示例,展示了如何在实际开发中运用这些知识。
18 2
|
2天前
|
存储 安全 数据库
【Docker 专栏】Docker 容器内应用的状态持久化
【5月更文挑战第9天】本文探讨了Docker容器中应用状态持久化的重要性,包括数据保护、应用可用性和历史记录保存。主要持久化方法有数据卷、绑定挂载和外部存储服务。数据卷是推荐手段,可通过`docker volume create`命令创建并挂载。绑定挂载需注意权限和路径一致性。利用外部存储如数据库和云服务可应对复杂需求。最佳实践包括规划存储策略、定期备份和测试验证。随着技术发展,未来将有更智能的持久化解决方案。
【Docker 专栏】Docker 容器内应用的状态持久化
|
2天前
|
机器学习/深度学习 人工智能 异构计算
【Docker 专栏】Docker 与 GPU 加速应用的结合
【5月更文挑战第9天】GPU加速技术在处理大规模数据和复杂计算时展现强大性能,尤其在AI和深度学习领域。Docker作为轻量级容器化工具,提供隔离、可移植和高效的环境。结合GPU加速,关键在于容器访问GPU设备和安装相应驱动。NVIDIA提供了支持工具,允许Docker利用GPU。应用场景包括人工智能、科学计算和视频处理。优势包括资源利用率提升和部署灵活性,但面临驱动兼容性、资源管理和监控调试的挑战。未来,随着技术发展,Docker与GPU加速在边缘计算中的应用将有广阔前景。
【Docker 专栏】Docker 与 GPU 加速应用的结合

相关产品

  • 容器计算服务