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

开发者社区> libinjingshan> 正文

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

简介: 本文讨论了如何利用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的负载均衡。

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

相关文章
基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统
前言 在上一篇文章中讨论了容器服务提供的交付能力,在本文中我们将讨论如何从零搭建一个持续交付系统。 对于大多数公司而言,选择一个合适自己的持续交付系统是尤为重要的一件事情,不同的公司、不同的业务使用的场景也各不相同,因此要根据自己的业务场景与发展方向来选择合适的方案。
8277 0
Docker 为 ASP.NET Core Web 应用程序生成 Docker 映像,创建并运行多个容器
1.为 ASP.NET Core 应用程序生成 Docker 映像 下载这个事例项目:https://github.com/dotnet/dotnet-docker/tree/master/samples/aspnetapp 下载完成后给这项目生成一个镜像名为aspnetapp镜像 docker build -t aspnetapp .
865 0
Docker 为 ASP.NET Core WebApi 应用程序生成 Docker 映像,创建容器并运行
1.使用VS2017新建ASP.NET Core WebApi项目 选择API启用Docker支持 2.为 ASP.NET Core WebApi 应用程序生成 Docker 映像,并创建容器运行 生成项目,将项目拷贝到 E:\web\aspnetcore.
1617 0
阿里云容器服务--自定义路由和负载均衡策略
阿里云容器服务已经提供了默认的简单路由服务来提供http请求的路由和负载均衡,但是对某些对路由和负载均衡有定制需求的用户来说,这往往不能满足用户的需求,下面我们就来介绍阿里云容器服务推出的自定义路由镜像acs/proxy
9777 0
Alibaba Cloud Toolkit 发布 RDS MySQL 插件,开发效率更“biu”了
阿里云RDS官方针对Alibaba Cloud Toolkit所有开发者推出了免费试用RDS MySQL实例,2019年3月31日前,任何Alibaba Cloud Toolkit使用者均可免费购买1台阿里云数据库MySQL基础版指定规格实例(1核1G+20GB SSD云盘,时长1个月,限1次)。
2263 0
What is new? 阿里云 RDS for MySQL 8.0 上线 独家技术解读
原作者: 阿里云高级技术专家 冷香 MySQL 8.0 简介 MySQL 5.7 到 8.0,Oracle 官方跳跃了 Major Version 版本号,随之而来的就是在 MySQL 8.0 上做了许多重大更新,在往企业级数据库的路上大步前行,全新 Data Dictionary 设计,支持 Atomic DDL,全新的版本升级策略,安全和账号管理加强,InnoDB 功能增强等,目前小版本已经 release 到 8.0.16,新的功能仍然在持续推出。
3900 0
MyEclipse使用Docker的JavaEE开发
本文讲的是MyEclipse使用Docker的JavaEE开发【编者的话】本文主要讲述了如何在MyEclipse中通过Docker开发JavaEE程序。
2093 0
+关注
libinjingshan
李斌,目前负责阿里云容器服务解决方案的研发工作。加入阿里之前,李斌曾在IBM工作,专注于企业软件开发,DevOps,微服务和Docker实践。
24
文章
0
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载