Zuul

本文从开发和测试角度出发,分析了服务网关的需求。介绍了开源微服务网关Zuul,它可与多种组件配合,具备限流、负载均衡等功能,其功能通过过滤实现。还阐述了用Zuul实现限流、负载均衡、安全控制和动态路由的方法。

Zuul
(1)需求分析:
从具体开发和测试的角度来说,在工作中除了要考虑实际的业务逻辑之外,还需要额外考虑对接口访问的
控制处理。
当我们需要对一个即有的集群内访问接口,实现外部服务访问时,我们不得不通过在原有接口上增加校验
逻辑,或增加一个代理调用来实现权限控制,无法直接复用原有的接口。
通过服务网关,由服务网关统一向外系统提供RestApi,提供了服务路由,均衡负载,权限控制等功能。为微服务架构提供了前门保护的作用,将权限控制这一较重的业务逻辑抽取到网关,提高的主服务的性能,使主服务具有更高的可复用性和测试性。
(2)Zuul网关是什么?
开源的微服务网关,可以和eureka,rabbion,Hystix等配合使用。主要可以实现以下的功能:
(1)限流:当并发量过高时,会限定请求量。
(2)负载均衡:为每一种负载类型分配相应的容量,并弃用超过限定值的请求。(集成了Rabbion)
(3)动态路由:动态的将请求路由到不同的后端集群。
(4)安全控制:识别每个资源的验证要求,并拒绝那些与要求不符的请求。
不论是内部服务还是外部服务,一切服务的请求都会经过zuul网关。
Zuul网关所有的功能都是通过过滤来实现的,ZuulFilter网关的过滤器:
shouldFilter :返回一个 Boolean 值,判断该过滤器是否需要执行。返回true执行,返回false不执行。
run :过滤器的具体业务逻辑。
filterType :返回字符串,代表过滤器的类型。包含以下4种:
pre :请求在被路由之前执行(前置过滤,一般用来去权限控制和流量控制)
routing :在路由请求时调用
post :在routing和errror过滤器之后调用
error :处理请求时发生错误调用
filterOrder :通过返回的int值来定义过滤器的执行顺序,数字越小优先级越高。
正常流程:
请求到达首先会经过pre类型过滤器,而后到达routing类型,进行路由,请求就到达真正的服务提供者,
执行请求,返回结果后,会到达post过滤器。而后返回响应。
异常流程:
整个过程中,pre或者routing过滤器出现异常,都会直接进入error过滤器,再error处理完毕后,会将请求交给POST过滤器,最后返回给用户。
如果是error过滤器自己出现异常,最终也会进入POST过滤器,而后返回。
如果是POST过滤器出现异常,会跳转到error过滤器,但是与pre和routing不同的时,请求不会再到达
POST过滤器了。
3.怎么用zuul实现限流?
GoogleGuava 为我们提供了限流工具类 RateLimiter,可以在配置文件中进行配置限流,如果希望自己控制key的策略,可以通过自定义RateLimitKeyGenerator的实现来增加自己的策略逻辑
在这里插入图片描述

server:
  port: 8080
spring:
  application:
    name: zuul-ratelimit
  redis:
    host: localhost
    password: 
zuul:
  # 配置路由
  routes:
    demo:
      path: /demo/**
      serviceId: demo
  # 配置限流
  ratelimit:
    enabled: true
    # 对应存储类型(用来统计存储统计信息)
    repository: redis
    # 配置路由的策略
    policy-list:
      demo:
        # 每秒允许多少个请求
        - limit: 2
          # 刷新时间(单位秒)
          refresh-interval: 1
          # 根据什么统计
          type:
            - url

在这里插入图片描述
也可以利用zuul提供的拦截器zuulFilter来拦截,从而实现限流。

4.zuul怎么实现负载均衡?
当一个服务有多个实例的时候(一个serviceId对应多个端口号的时候),zuul结合eurekia会自动实现负载均衡(轮询算法)。
其实zuul实现负载均衡很简单,使用serviceId进行绑定后,如果有多个相同的serviceid,则会进行轮询的方式进行访问。

5.zuul怎么实现安全控制?

6.zuul怎么实现动态路由?
自动实现动态路由,所有的微服务访问其他服务时都要经过zuul,由zuul来实现动态路由。其实zuul网关的目的不是路由,而是权限控制,负载均衡和限流。但是眼达到这些目的所有的服务都得经过zuul网关,因此zuul得将访问动态路由到不同的服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值