网关Gateway

齐雷:网关Gateway 应用实践
网关本质上要提供一个各种服务访问的入口,接收并转发所有内外部的客户端调用,还有就是权限认证,限流控制等等。
实践

小结

  • 什么是网关?
    服务访问(流量)的一个入口
  • 为什么使用网关?
    服务安全,统一服务入口管理,负载均衡,限流,鉴权)
  • Spring Cloud Gateway 应用的初始构建过程
    添加依赖(spring-cloud-starter-gateway),配置application.yml,启动项目进行测试
  • Gateway 服务的启动底层是通过谁去实现的?
    Netty网络编程框架-ServerSocket
  • Gateway 服务做请求转发时一定要在注册中心进行注册吗?
    不一定,可以直接通过远端url进行服务访问

负载均衡设计

网关是服务访问的入口,在访问服务时,要基于服务名查找对应服务,让请求在网关层进行均衡转发,实现负载均衡。

执行流程分析(重要)

在这里插入图片描述
在这里插入图片描述

客户端向Spring Cloud Gateway发出请求。 如果Gateway Handler Mapping 通过断言predicates(predicates)的集合确定请求与路由(Routers)匹配,则将其发送到Gateway Web Handler。 Gateway Web Handler 通过确定的路由中所配置的过滤器集合链式调用过滤器(也就是所谓的责任链模式)。 Filter由虚线分隔的原因是, Filter可以在发送代理请求之前和之后运行逻辑。处理的逻辑是 在处理请求时 排在前面的过滤器先执行,而处理返回相应的时候,排在后面的过滤器先执行。
(详见12月28日早上第三节视频)

小结:

  • 网关层面是如何实现负载均衡的?
    通过服务名去查找具体的服务实例
  • 网关层面是如何通过服务名查找服务实例的?
    Ribbon
  • 你了解Ribbon中的哪些负载均衡算法?
    轮询,权重,hash。可通过IRule接口进行查看分析
  • 网关进行请求转发的流程是怎样,有哪些关键对象
    XxxHandlerMapping,Handler,。。。
  • 网关层面服务的映射方式怎样的?
    谓词-path,…,服务名/服务实例
  • 网关层如何记录服务的映射?
    通过map,并要考虑读写锁的应用

断言(Predicate)增强分析(了解)

Predicate(断言)又称谓词,用来定义路由转发的条件,只有断言结果都为真,才会执行路由。
小结:

  • 何为谓词?(网关中封装了判断逻辑的一个对象)
  • 谓词逻辑的设计是怎样的?(谓词判断逻辑返回值为true则进行请求转发)
  • 你了解哪些谓词逻辑?(path,请求参数,请求方式,请求头,….)
  • 我们可以自己定义谓词工厂对象吗?(可以,详见老齐文件)

过滤器(Filter)增强分析(了解)

过滤器(Filter)就是在请求传递过程中,对请求和响应做一个处理。Gateway 的Filter从作用范围可分为两种:GatewayFilter与GlobalFilter。其中:

  1. GatewayFilter:应用到单个路由或者一个分组的路由上。
  2. GlobalFilter:应用到所有的路由上(例如负载均衡过滤器,请求转发过滤器等)。
    (详见老齐文件)

全局过滤器设计及实现

全局过滤器(GlobalFilter)作用于所有路由, 无需配置。(可以查看GlobalFilter源码的实现类,了解其它过滤器)(代码见实现文档,具体见老齐文档)

小结:

  • 网关过滤器的作用是什么?(对请求和响应数据做一个预处理)
  • 网关过滤器的类型有哪些?(局部过滤器,全局过滤器)
  • 如何理解局部过滤器?(针对具体链路的应用的过滤器,需要进行配置)
  • 你了解哪些局部过滤器?
  • 如何理解全局过滤器?(作用于所有请求链路)
  • 如何自己定义全局过滤器?(直接或间接实现GlobalFilter接口)
  • 假如现在让你进行平台的网关自研设计,你可以吗?(可以)

限流设计

  1. 基于请求属性限流
  2. 自定义API维度限流(重点)
    自定义API分组,是一种更细粒度的限流规则定义,它允许我们利用sentinel提供的API,将请求路径进行分组,然后在组上设置限流规则即可

定制流控网关返回值

定义配置类,设计流控返回值,代码见实现文档
网关流控的默认实现是DefaultBlockRequestHandler

  • Sentinel底层限流的算法有哪些?(滑动窗口,令牌桶,漏斗,。。。)

总结(Summay)

重难点分析

  • 网关(Gateway)诞生的背景?(第一:统一微服务访问的入口,第二:对系统服务进行保护,第三进行统一的认证,授权,限流)
  • 网关的选型?(Netifix Zuul,Spring Cloud Gateway,…)
  • Spring Cloud Gateway的入门实现(添加依赖,路由配置,启动类)
  • Spring Cloud Gateway中的负载均衡?(网关服务注册,服务的发现,基于uri:lb://服务id方式访问具体服务实例)
  • Spring Cloud Gateway中的断言配置?(掌握常用几个就可,用时可以通过搜索引擎去查)
  • Spring Cloud Gateway中的过滤器配置?(掌握过滤器中的两大类型-局部和全局)
  • Spring Cloud Gateway中的限流设计?(Sentinel)

FAQ 分析

  • Gateway在互联网架构中的位置?(nginx->gateway–>微服务–>微服务)
  • Gateway底层负载均衡的实现?(Ribbon)
  • Gateway应用过程中设计的主要概念?(路由id,路由uri,断言,过滤器)
  • Gateway中你做过哪些断言配置?(after,header,path,cookie,…)
  • Gateway中你用的过滤器有哪些?(添加前缀,去掉前缀,添加请求头,…,负载均衡,…)

BUG分析

  • 503 异常?(服务不可用,检查你调用的服务是否启动ok,路由uri写的是否正确)
    (service unavailable(服务不可用),服务未注册或未注册成功,需检查服务是否启动)
  • 启动时解析.yml配置文件异常(格式没有对齐,单词写错)

核心知识点

API 网关(Gateway)诞生背景

市场主流微服务网关(Spring Cloud Gateway,zuul,…)
spring cloud、zuul
API Gateway实现服务的保护和转发(重点)
API Gateway层面的负载均衡实现(重点,lb://sca-provider)
API Gateway请求处理原理分析(重点:官方图,了解关键代码,执行过程)
API Gateway中常用谓词(predicate)对象及实践。
API Gateway中过滤器(Filter)的类型及实践。
API Gateway中基于sentinel实现服务限流(API,路由id)。
API Gateway中基于自定义限流结果的处理(GatewayCallbackManager)。

常见问题分析

为什么要使用api网关?(服务保护,统一url访问,统一身份认证,统一跨域设计,。。。)
网关入门实践的步骤? (依赖,配置,启动,服务访问)
网关项目中的负载均衡是如何实现?(底层基于Ribbon实现,可以在RibbonLoadBalancerClient中加断点分析)
说说SpringCloud gateway处理请求的基本流程?(官方,断点)
网关中的谓词对象类型?(GatewayPredicate)
网关中的谓词对象是如何创建的?(谓词工厂)
你在网关中配置过哪些常用谓词?(Path,Method,Before,Query,Header,…)
网关中的过滤器是如何分类的?(GlobalFilter,GatewayFilter:需要手动配置)
我们是否可以自定义谓词,过滤器对象?(可以,参考官方默认的定义)
网关层面如何基于sentinel实现限流?(有关sentinel的两个依赖,配置,JVM参数)
网关层面的限流类型有哪些?(路由id,API分组)
我们是否可以对限流结果进行自定义处理?(可以,了解)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值