• SpringCloud微服务项目实战


    上一篇介绍了服务的调用,这篇接着之前的话题,来说说SpringCloud中zuul的使用及搭建网关的那点事。

    首先,我们要知道什么是网关
    网关,是一个系统中前置的统一入口,介于客户端和服务器端之间的中间层,主要用来处理非业务功能,提供路由请求、鉴权、监控、缓存、限流等功能。客户端发起的请求首先通过网关,进行非业务功能处理,在根据路径的路由,定位到具体的服务节点上。

    同时系统使用服务路由的功能,可以在对外提供服务时,只暴露网关中配置的调用地址,而调用方就不需要了解后端具体的微服务主机。可以有效的保护真实的服务地址信息。Zuul是一个微服务网关,首先是一个微服务。也是会在Eureka注册中心中进行服务的注册和发现。也是一个网关,请求应该通过Zuul来进行路由。Zuul网关不是必要的。是推荐使用的。SpringCloud zuul的相关介绍

    1,为什么要使用微服务网关?

    不同的微服务一般会有不同的网络地址,而客户端可能需要调用多个服务接口才能完成一个业务需求,若让客户端直接与各个微服务通信,会有以下问题:

        1)客户端会多次请求不同微服务,增加了客户端复杂性;

        2)存在跨域请求,处理相对复杂;

        3)认证复杂,每个服务都需要独立认证;

        4)难以重构,多个服务可能将会合并成一个或拆分成多个;

    2,使用网关的优缺点?

    优点:

    1. 所有的外部请求先经过微服务网关进行交互,无需调用特定微服务接口,简化了开发;

    2. 服务网关=路由转发+过滤器

    • 路由转发:接收请求,转发到后端的微服务上;

    • 过滤器:可在服务网关中可以完成一系列的横切功能(权限校验)

    缺点:增加了网关,多了一层转发,服务性能会下降;

    3,使用zuul 的作用?Zuul可以通过加载动态过滤机制,从而实现以下各项功能:

    • 验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。
    • 审查与监控: 在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。
    • 动态路由: 以动态方式根据需要将请求路由至不同后端集群处。
    • 压力测试: 逐渐增加指向集群的负载流量,从而计算性能水平。
    • 负载分配: 为每一种负载类型分配对应容量,并弃用超出限定值的请求。
    • 静态响应处理: 在边缘位置直接建立部分响应,从而避免其流入内部集群。
    • 多区域弹性: 跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。

    4,zuul的工作原理?

    zuul的核心是一系列的filters, 其作用可以类比Servlet框架的Filter,或者AOP。zuul把Request route到 用户处理逻辑 的过程中,这些filter参与一些过滤处理,比如Authentication,Load Shedding等。 

    Zuul提供了一个框架,可以对过滤器进行动态的加载,编译,运行。

    Zuul的过滤器之间没有直接的相互通信,他们之间通过一个RequestContext的静态类来进行数据传递的。RequestContext类中有ThreadLocal变量来记录每个Request所需要传递的数据。

    Zuul的过滤器是由Groovy写成,这些过滤器文件被放在Zuul Server上的特定目录下面,Zuul会定期轮询这些目录,修改过的过滤器会动态的加载到Zuul Server中以便过滤请求使用。

    下面有几种标准的过滤器类型:

    Zuul大部分功能都是通过过滤器来实现的。Zuul中定义了四种标准过滤器类型,这些过滤器类型对应于请求的典型生命周期。

        1) PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。

        2) ROUTING 务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。

        3) POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。

        4) ERROR:在其他阶段发生错误时执行该过滤器。

    内置的特殊过滤器

    zuul还提供了一类特殊过滤器,分别为:StaticResponseFilter和SurgicalDebugFilter;

    • StaticResponseFilter:StaticResponseFilter允许从Zuul本身生成响应,而不是将请求转发到源。

    • SurgicalDebugFilter:SurgicalDebugFilter允许将特定请求路由到分隔的调试集群或主机。

    自定义的过滤器

    除了默认的过滤器类型,Zuul还允许我们创建自定义的过滤器类型。

    5,Zuul和Nginx的区别相同点:Zuul和Nginx都可以实现负载均衡、反向代理(隐藏真实ip地址),过滤请求,实现网关的效果不同点:

    • Nginx–c语言开发

    • Zuul–java语言开发

    • Zuul负载均衡实现:采用ribbon+eureka实现本地负载均衡

    • Nginx负载均衡实现:采用服务器实现负载均衡

    • Nginx相比zuul功能会更加强大,因为Nginx整合一些脚本语言(Nginx+lua)

    • Nginx适合于服务器端负载均衡

    • Zuul适合微服务中实现网关

    Zuul服务搭建

    我们先在父级项目里引入zuul的依赖服务

    再创建Zuul微服务模块,并添加pom依赖如下:

    添加yml配置:

    然后添加启动类:

    启动所有服务:

    测试:

    推荐阅读:SpringCloud微服务项目实战 - 微服务调用详解(附面试题)

    SpringCloud微服务项目实战,服务注册与发现(附面试题)

    Spring Cloud微服务项目实战--Eureka服务搭建

    扫码关注公众号,发送关键词获取相关资料:

    1. 发“Springboot”领取电商项目实战源码;

    2. 发“SpringCloud”领取学习实战资料;

    3. 发“SpringCloud实战”领取SpringCloud实战源码;

  • 相关阅读:
    I/O 请求数据包
    设备节点和设备堆栈
    观察者模式,即发布-订阅模式
    建造者模式,即生成器模式
    外观模式,即门面模式
    迪米特法则(LoD),即最少知识原则
    模板方法模式
    原型模式
    工厂方法模式
    代理模式
  • 原文地址:https://www.cnblogs.com/lyn20141231/p/12761503.html
Copyright © 2020-2023  润新知