Spring Cloud 学习 | - 08 -Zuul路由网关(一)

文章目录

  • Spring Cloud 学习 | - 08 -Zuul路由网关(一)
    • 1. 架构前瞻
      • 1.1 架构不足
      • 1.2 解决方案
    • 2. 简介
    • 3. 新架构图(加入Zuul后)
    • 4. Zuul快速入门
      • 4.1 新建项目
      • 4.2 编写配置
      • 4.3 启动测试

Spring Cloud 学习 | - 08 -Zuul路由网关(一)

学习 Spring Cloud 之路,文中 Spring Boot 版本为 2.1.3.RELEASESpring Cloud 版本为 Greenwich.SR1 。因能力有限,难免会有不足或者错误之处,还望不吝指正,谢!

1. 架构前瞻

通过前面几章,我们使用Spring Cloud构建微服务的架构基本成型了,架构图大概是这样:
Spring Cloud 学习 | - 08 -Zuul路由网关(一)_第1张图片
我们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间通过RibbonFeign实现服务的消费以及均衡负载;为了使得服务集群更为健壮,使用Hystrix的融断机制来避免在微服务架构中个别服务出现异常时引起的故障蔓延。

在该架构中,我们的服务集群包含:内部服务Service A和Service B,他们都会注册与订阅服务至Eureka Server,而Open Service是一个对外的服务,通过均衡负载公开至服务调用方。

我们把焦点聚集在对外服务这块,直接暴露我们的服务地址,这样的实现是否合理,或者是否有更好的实现方式呢?

1.1 架构不足

先来说说这样架构需要做的一些事儿以及存在的不足:

  • 首先,破坏了服务无状态特点。
    • 为了保证对外服务的安全性,我们需要实现对服务访问的权限控制,而开放服务的权限控制机制将会贯穿并污染整个开放服务的业务逻辑,这会带来的最直接问题是,破坏了服务集群中REST API无状态的特点。
    • 从具体开发和测试的角度来说,在工作中除了要考虑实际的业务逻辑之外,还需要额外考虑对接口访问的控制处理。
  • 其次,无法直接复用既有接口。
    • 当我们需要对一个即有的集群内访问接口,实现外部服务访问时,我们不得不通过在原有接口上增加校验逻辑,或增加一个代理调用来实现权限控制,无法直接复用原有的接口。

1.2 解决方案

面对类似上面的问题,我们要如何解决呢?答案是:服务网关!

为了解决上面这些问题,我们需要将权限控制这样的东西从我们的服务单元中抽离出去,而最适合这些逻辑的地方就是处于对外访问最前端的地方,我们需要一个更强大一些的均衡负载器的 服务网关。

服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

2. 简介

Spring Cloud 学习 | - 08 -Zuul路由网关(一)_第2张图片

3. 新架构图(加入Zuul后)

Spring Cloud 学习 | - 08 -Zuul路由网关(一)_第3张图片

这样不管是来自于客户端(PC or 移动端)的请求,还是服务的内部调用。一切对服务的请求都会经过Zuul网关,然后再由网关来实现鉴权、动态路由等等操作。Zuul就是我们服务的统一入口。

4. Zuul快速入门

4.1 新建项目

利用的IDEA的Spring Initializr快速创建一个Spring Boot项目,名称叫做spring-cloud-zuul
Spring Cloud 学习 | - 08 -Zuul路由网关(一)_第4张图片
选择Zuul依赖
Spring Cloud 学习 | - 08 -Zuul路由网关(一)_第5张图片
项目创建完成后,主要依赖如下:

		<dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-zuulartifactId>
        dependency>

4.2 编写配置

server:
  port: 9090
spring:
  application:
    name: spring-cloud-zuul
zuul:
  routes:
    user-provider: # 这里是路由id,自定义即可
      path: /user-provider/** # 这里是映射路径
      url: http://localhost:8090 # 映射路径对应的实际url地址

路由规则:符合path中定义的规则的请求,都会被代理到url中指定的地址。
比如,案例中的/user-provider/**开头的请求,均会被代理到http://localhost:8090

4.3 启动测试

首先启动Eureka注册中心服务,然后启动之前项目中的user-provider服务,具体这2个请参阅 Spring Cloud 学习 | - 01 - Eureka服务注册与发现,
最后启动spring-cloud-zuul服务(即当前创建服务)。
访问http://localhost:9090/user-provider/user/list
Spring Cloud 学习 | - 08 -Zuul路由网关(一)_第6张图片

你可能感兴趣的:(Spring,Cloud,Spring,Cloud,学习之路)