微服务006网关Gateway应用

1.网关Gateway

1.1什么是网关Gateway ?

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

路由转发:接收一切外界请求,转发到后端的微服务上去。

过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流、监控等,都能通过过滤器完成。(其实路由转发也是通过过滤器完成的)

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

微服务006网关Gateway应用_第1张图片

 1.2为什么要使用网关?

将权限校验的逻辑写在网关的过滤器中,后端服务不需要关注权限校验的代码,所以服务的jar包中也不会引入权限校验的逻辑,不会增加jar包大小。如果想修改权限校验的逻辑,只需要修改网关中的权限校验过滤器即可,而不需要升级所有已存在的微服务。 或者这样理解:

我们知道,一个大型系统在设计时,经常会被拆分为很多个微服务。那么作为客户端要如何去调用 这么多的微服务呢?客户端可以直接向微服务发送请求,每个微服务都有一个公开的URL,该URL可以直接映射到具体的微服务,如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的架构,会存在着诸多的问题,例如,客户端请求不同的微服务可能会增加客户端代码或配置的复杂性。还有就是每个服务,在调用时都需要独立认证。并且存在跨域请求,也在一定程度上提高了代码的复杂度。基于微服务架构中的设计及实现上的问题,为了在项目中简化前端的调用逻辑,同时也简化内部服务之间互相调用的复杂度,更好保护内部服务,提出了网关的概念。
————————————————

总结:统一后端权限校验。减少了代码的复杂度,方便了服务的升级与维护。简化前端的调用逻辑,同时也简化内部服务之间互相调用的复杂度,更好保护内部服务。

 2.网关入门案例

 2.1 业务:

通过网关作为服务访问入口,对系统中的服务进行访问,例如通过网关服务去访问sca-provider服务.

2.2 业务实现

第一步:创建网关sca-getaway项目,并添加依赖

微服务006网关Gateway应用_第2张图片

 第二步:创建Application.yml文件并添加

微服务006网关Gateway应用_第3张图片

lb为LoadBalancer(负载平衡器--负载均衡)的简写  为服务前缀,不能随意写。

 第三步:创建启动类

 微服务006网关Gateway应用_第4张图片

 第四步:负载均衡测试

router01:

微服务006网关Gateway应用_第5张图片

 router02:

小节面试分析?
1.什么是网关?服务访问(流量)的一个入口,类似生活中的“海关“
2.为什么使用网关?(服务安全,统一服务入口管理,负载均衡,限流,鉴权)
3.Spring Cloud Gateway 应用的初始构建过程(添加依赖,配置)
4.Gateway 服务的启动底层是通过谁去实现的?(Netty网络编程框架-ServerSocket)
5.Gateway 服务做请求转发时一定要在注册中心进行注册吗?(不一定,可以直接通过远端url进行服务访问)

6.为什么要使用负载均衡?网关才是服务访问的入口,所有服务都会在网关层面进行底层映射,所以在访问服务时,要基于服务serivce id(服务名)去查找对应的服务,让请求从网关层进行均衡转发,以平衡服务实例的处理能力。

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

3.执行流程分析

微服务006网关Gateway应用_第6张图片

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

微服务006网关Gateway应用_第7张图片

 断言工程

4.断言(Predicate)增强

Predicate(断言)又称谓词 ,用于条件判断,只有断言结果都为真,才会真正的执行路由。断言其本质就是定义路由转发的条件(请求逻辑设计)。

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

5.过滤器(Filter)增强

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

GatewayFilter:应用到单个路由或者一个分组的路由上。
GlobalFilter:应用到所有的路由上。

你可能感兴趣的:(微服务,微服务,微服务架构)