首页 > 其他分享 >博学谷学习记录 自我总结 用心分享 | Alibaba- GateWay

博学谷学习记录 自我总结 用心分享 | Alibaba- GateWay

时间:2023-05-24 15:00:10浏览次数:53  
标签:服务 请求 Spring 博学 Alibaba Cloud 过滤器 GateWay 路由

  Spring Cloud Netflix 项目进入维护模式,Spring Cloud Netflix 将不再开发新的组件,我们知道 Spring Cloud 版本迭代算是比较快的,因而出现了很多中岛的 ISSUE 都来不及 Fix 就又推另一个 Release 了 。进入维护模式意思就是目前已知以后一段时间 Spring Cloud Netflix 提供的服务和功能就这么多了, 不再开发性的组件和功能了。 以后将以维护和 Merge 分支 Full Requset 为主。换句话说:就是 SpringCloud 的技术栈不再完整了!此时,我们就有必要寻找一个新的完整的技术栈。

  服务限流降级:默认支持 Servlet、Feign\

  RestTemplate、Dubbo、和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级骨子额,还支持查看限流降级 Metrics 控制。
  服务注册于发现:适配 Spring Cloud 服务注册于发现标准,默认集成 Ribbon 支持
  分布式配置管理:支持分布式系统中的外部话配置,配置更改时自动刷新。
  消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
  阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用,任何时间、任何低调存储和访问任意类型的数据。
  分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务,网格任务支持海量任务均匀分配到所有 Worker (schedulerx-client) 执行。

在微服务架构中,通常一个系统会被拆分为多个微服务,面对这么多微服务客户端应该如何去调用呢?如果没有其他更优方法,我们只能记录每个微服务对应的地址,分别去调用,但是这样会有很多的问题和潜在因素。

  1. 客户端多次请求不同的微服务,会增加客户端代码和配置的复杂性,维护成本比价高。

  2. 认证复杂,每个微服务可能存在不同的认证方式,客户端去调用,要去适配不同的认证,

  3. 存在跨域的请求,调用链有一定的相对复杂性(防火墙 / 浏览器不友好的协议)。

  4. 难以重构,随着项目的迭代,可能需要重新划分微服务

为了解决上面的问题,微服务引入了 网关 的概念,网关为微服务架构的系统提供简单、有效且统一的API路由管理,作为系统的统一入口,提供内部服务的路由中转,给客户端提供统一的服务,可以实现一些和业务没有耦合的公用逻辑,主要功能包含认证、鉴权、路由转发、安全策略、防刷、流量控制、监控日志等。

 

  • GateWay : 是Spring Cloud的一个全新的API网关项目,替换Zuul开发的网关服务,基于Spring5.0 + SpringBoot2.0 + WebFlux(基于性能的Reactor模式响应式通信框架Netty,异步阻塞模型)等技术开发,性能高于Zuul

  • 核心流程 : 

 

核心概念:

  1. Gateway Client 向 Spring Cloud Gateway 发送请求

  2. 请求首先会被 HttpWebHandlerAdapter 进行提取组装成网关上下文

  3. 然后网关的上下文会传递到 DispatcherHandler ,它负责将请求分发给 RoutePredicateHandlerMapping

  4. RoutePredicateHandlerMapping 负责路由查找,并根据路由断言判断路由是否可用

  5. 如果过断言成功,由FilteringWebHandler 创建过滤器链并调用

  6. 通过特定于请求的 Fliter 链运行请求,Filter 被虚线分隔的原因是Filter可以在发送代理请求之前(pre)和之后(post)运行逻辑

  7. 执行所有pre过滤器逻辑。然后进行代理请求。发出代理请求后,将运行“post”过滤器逻辑。

  8. 处理完毕之后将 Response 返回到 Gateway 客户端

Filter过滤器:

  • Filter在pre类型的过滤器可以做参数效验、权限效验、流量监控、日志输出、协议转换等。

  • Filter在post类型的过滤器可以做响应内容、响应头的修改、日志输出、流量监控等

核心思想

当用户发出请求达到 GateWay 之后,会通过一些匹配条件,定位到真正的服务节点,并且在这个转发过程前后,进行一些细粒度的控制,其中 Predicate(断言) 是我们的匹配条件,Filter 是一个拦截器,有了这两点,再加上URL,就可以实现一个具体的路由,核心思想:路由转发+执行过滤器链

这个过程就好比考试,我们考试首先要找到对应的考场,我们需要知道考场的地址和名称(id和url),然后我们进入考场之前会有考官查看我们的准考证是否匹配(断言),如果匹配才会进入考场,我们进入考场之后,(路由之前)会进行身份的登记和考试的科目,填写考试信息,当我们考试完成之后(路由之后)会进行签字交卷,走出考场,这个就类似我们的过滤器

Route(路由) :构建网关的基础模块,由ID、目标URL、过滤器等组成

Predicate(断言) :开发人员可以匹配HTTP请求中的内容(请求头和请求参数),如果请求断言匹配贼进行路由

Filter(过滤) :GateWayFilter的实例,使用过滤器,可以在请求被路由之前或者之后对请求进行修改

标签:服务,请求,Spring,博学,Alibaba,Cloud,过滤器,GateWay,路由
From: https://www.cnblogs.com/LiuLance/p/17428285.html

相关文章

  • cloud alibaba 学习 之 rocketmq
    rocketmq有三种消息发送模式:1.同步发送需要等待broker回应/***同步消息发送*/@TestpublicvoidtestSyncSend(){//param1:topic;若添加tag:topic:tag//param2:消息内容SendResultsendResult=rocketMQTemplate......
  • 网关服务——Spring Cloud Gateway
    为什么要用网关?1.请求路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当路由的目标服务有多个时,还需要做负载均衡。2.权限控制:网关作为微服务的入口,需要校验用户是否具有请求资格,如果没有资格就要进行拦截......
  • NACOS 2.2.2 com.alibaba.nacos.api.exception.NacosException: user not found!
    因服务端设置了鉴权,nacos.core.auth.enabled=true(参照官方文档https://nacos.io/zh-cn/docs/auth.html)客户端需增加相关配置(username和password)spring:application:name:xxxxxcloud:nacos:server-addr:xxxxxxconfig:file-extensio......
  • springCloud Alibaba服务的注册与发现之eureka客户端注册
    1、在客户端maven项目中添加eureka客户端依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>2、在工程application.yml文件中......
  • 四、SpringCloud Alibaba搭建Nacos集群
    Nacos定义为一个IDC内部应用组件,并非面向公网环境的产品,建议在内部隔离网络环境中部署,强烈不建议部署在公共网络环境。Nacos支持三种部署模式单机模式-用于测试和单机试用。集群模式-用于生产环境,确保高可用。多集群模式-用于多数据中心场景。单机模式下运行NacosLi......
  • 博学谷学习记录 自我总结 用心分享 | 学习分享
    我的分布式学习之旅:我从事Java开发(ERP二次开发)已经有三年了,但是对于分布式系统的学习却是最近一个月开始的。这个领域对我而言既新颖又富有挑战性,让我充满好奇感,以及带有一丝焦虑害怕学习过程中的不理解,以及自己能不能学会。希望通过这一篇日记分享一下目前再学习分布式......
  • 博学谷学习记录 自我总结 用心分享 | Dubbo SPI机制
    SPI简介SPI全称为ServiceProviderInterface,是一种服务发现机制,刚好与javajdk的类加载机制进行了一个互补。SPI的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易......
  • 博学谷学习记录 自我总结 用心分享 | Netty框架使用
    Netty框架的作用1.Netty是一款用于快速开发高性能的网络应用程序的Java框架。它封装了网络编程的复杂性,定义了一种架构模型和一套丰富的设计模式。通过Netty框架,可以编写更高效的、可复用的、可维护的代码。有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,WebSo......
  • 二、SpringCloud Alibaba使用RestTemplate
    新建模块Producer,pom.xml如下:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http......
  • 一、SpringCloud Alibaba之Nacos作为注册中心
    一、简介SpringCloud阿里巴巴旨在为微服务开发提供一站式解决方案。该项目包括开发分布式应用程序和服务所需的组件,以便开发人员可以使用SpringCloud编程模型轻松地开发分布式应用。使用SpringCloudAlibaba,只需要添加一些注释和配置,就可以将阿里巴巴的分布式解决方案用于您的......