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

服务智能路由

本文为阿里云容器服务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依赖


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发现服务。

```java
@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进行负载均衡


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

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

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


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

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

## 小节
本文讨论了如何利用zuul实现服务智能路由,以及对外通过阿里云SLB实现对zuul的负载均衡。
时间: 2024-11-01 14:58:10

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

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

本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四.服务间通信与集成 五.服务智能路由 六.集中配置管理 七.高可用和容错 八.监控和日志 九.服务的部署和发布策略 微服务概述 单体应用通常指在一个程序中满足多个业务或技术领域的需求,不同的需求领域内化为模块.假定我们要开发一个Web应用,通常的MVC模式可以满足要求.针对不同领域有不少代码生成工具

云上Docker的Spring Cloud微服务应用实践分享

本文整理自2017云栖大会-上海峰会中阿里云高级技术专家李荣陆的分享讲义,讲义主要介绍了云上Docker的Spring Cloud微服务应用实践的契机,过程,和对未来的展望.

搭建spring cloud微服务架构

在搭建环境之前,首先根据公司的业务定义微服务架构的代码结构,因为考虑到不同行业,不同领域,不同业务,我这边针对于所有行业做通用的架构模式. 项目整个架构使用maven来构建的,使用maven不仅仅是jar包的管控,重要的是要抓住maven的一个核心作用,那就是将整个项目按照模块化的方式进行划分,业务与业务之间解耦,然后将模块化的业务再进行服务化或者组件化,这样可以进行任意的项目或者平台的业务移植. 最后还要考虑到服务的细粒度拆分,比如:一个登录的模块,我们可以将所有跟登录有关系的业务进行服务化(

编码实现Spring Cloud微服务负载均衡调用(eureka、ribbon)

Spring 封装.揉和了一批开源项目,其中以Netflix开源的为主,比如zuul.eureka.hystrix.robbin等:然后就有了现在的Spring cloud微服务架构.这也充分展现了Spring的揉合能力. Spring cloud通过封装使这些项目融入spring的bean管理机制中,从而方便使用.这套微服务的核心功能还是使用这些项目的. 由本篇的标题可以想到本篇就是不使用Spring的注解和配置来使用这套微服务.看看现在网上关于Spring cloud的示例,千篇一律那几行注

Spring Cloud微服务升级总结

一.应用系统的架构历史 [ 二.什么是微服务? 2.1 微服务概述 起源:微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇文章"Microservices".文中内容提到:微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值. 通信方式:每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API). 微服务的常规定义:微服务是一种架构风

阿里云容器服务飞天敏捷版详解

概述 飞天敏捷版深度整合了Docker商业版套件和阿里的容器服务,成为国内唯一具有全商业版支持能力的容器云平台,可以部署在客户自有数据中心,包含从容器的创建到运行以及镜像的全生命周期管理.飞天敏捷版另外提供开放的接口,全面兼容Docker原生API和命令行以及第三方工具,为客户提供敏捷.弹性.开放的容器云平台.借助阿里云在公共云和专有云方面的积累,飞天敏捷版更提供了独特的混合云管理模式,让客户轻松管理云上云下运行环境. 飞天敏捷版的架构可以用下图表示: 从图中我们可以看到,飞天敏捷版底层基于Do

阿里云容器服务新增支持Kubernetes编排系统,性能重大提升

阿里云容器服务提供了面向企业客户的技术能力,为企业应用容器化提供了迁移工具和咨询服务.深度学习.区块链等应用解决方案,以帮助企业优化现有IT投资和加速业务创新. 10月12日云栖大会上,阿里云专有云新版本(飞天专有云敏捷版2.0)宣告了对Kubernetes的支持:日前,公共云容器服务也宣布了开放支持Kubernetes 1.8.1 版本的托管服务,并且成为全球首批通过Kubernetes一致性认证的厂商之一.作为容器编排系统的两大流派, Kubernetes和Swarm的重要性不言而喻.融合了

Python应用容器化(二)----使用阿里云容器服务部署应用

前言 我们曾经在Python程序容器化(一)中介绍了如何将一个克隆版Twitter程序(retwit-py)容器化,并使用docker-compose运行于宿主机上.对于经典的Web程序,处理前端请求的Web服务通常都是可扩展伸缩的.生产环境中,随着访问量的不断增长,需要部署多个Web服务实例,并通过负载均衡统一对外进行服务.本文将会介绍如何使用阿里云容器服务将retwit-py改造为贴近生产环境的系统并部署. 阿里云容器服务 容器服务是一项高性能可扩展的容器管理服务,支持在一组阿里云云服务器上

几种常见的微服务架构方案——ZeroC IceGrid、Spring Cloud、基于消息队列、Docker Swarm

微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合项目的特点来选择某个合适的微服务架构平台,以此稳妥地实施项目的微服务化改造或开发进程. 本文选自<架构解密:从分布式到微服务>. 本文盘点了四种常用的微服务架构方案,分别是ZeroC IceGrid.Spring Cloud.基于消息队列与Docker Swarm. ZeroC IceGrid微服