首页 > 编程知识 正文

gateway与zuul区别,router的原理

时间:2023-05-06 01:16:05 阅读:136113 作者:2134

一、什么是zuul? zuul是netflix开源API网关服务器,本质上是web servlet APP应用程序。

Zuul在云平台上提供动态路由、监控、灵活性、安全性等边缘服务框架。 Zuul是设备和Netflix流式APP应用程序网站后端的所有请求的前门。

可以参考Netflix github上的simple webapp,并按照Netflix github wiki上文档中的说明使用zul示例。

二、zuul的工作原理1、过滤器机制zuul的核心是一系列filters,其作用类似于servlet框架的Filter,或AOP。

在zul将请求路由合并到用户处理逻辑的过程中,这些过滤器参与验证、加载等过滤处理。

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

zul的过滤器之间没有直接的相互通信,他们之间通过RequestContext的静态类进行数据传输。 RequestContext类包含一个ThreadLocal变量,用于记录每个Request必须传递的数据。

Zuul的过滤器由Groovy编写,这些过滤器文件位于Zuul Server上的特定目录下,Zuul定期轮询这些目录,修改后的过滤器被动态加载到zulserver中进行请求

有以下标准过滤器类型:

Zuul的大部分功能都是通过滤波器实现的。 zul定义了四种标准过滤器类型,用于请求的典型生命周期。

(1) PRE :这样的过滤器在请求被路由之前被调用。 可以利用这样的过滤器实现认证,选择集群内要求的微服务器,记录调试信息。

)2) ROUTING )该过滤器将请求路由到微服务。 此过滤器用于生成发送到微服务的请求,并使用Apachehttp客户端或Netfilx Ribbon请求微服务。

3 ) POST )在路由到微服务之后执行该过滤器。 使用此过滤器可以将标准HTTP Header添加到响应中,收集统计信息和指标,以及将响应从微服务器发送到客户端。

(4) ERROR )如果在其他阶段发生错误,则执行该过滤器。

内置的特殊过滤器

zul还提供了一个特殊的过滤器: StaticResponseFilter和SurgicalDebugFilter

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

surgicaldebugfilter :使用surgicaldebugfilter可以将特定请求路由到划分的调试群集或主机。

自定义的过滤器

除了默认筛选器类型外,Zuul还允许您创建自定义筛选器类型。

例如,可以定制静态类型过滤器,以便在Zuul中直接生成响应,而不将请求转发到后端微服务器。

2 .过滤器生命周期Zuul请求的生命周期图。 此图详细说明了各种过滤器的执行顺序。

3、过滤器调度流程

4、动态负载滤波器

三、zuul能做什么? zul可以通过加载动态过滤机制来实现以下功能:

认证和安全保障:识别针对各种资源的认证请求,拒绝与请求不一致的请求。 审查和监测:在边缘位置跟踪有意义的数据和统计结果,从而得出准确的生产状态结论。 动态路由:根据需要而动态地将请求路由到不同的后端集群。 压力测试:逐渐增加集群的负荷流量,计算性能水平。 负载分担器:分配每个负载类型的容量,并且丢弃超过该限制的请求。 静态响应处理:直接在边缘位置处建立部分响应,以便避免流入内部集群。 多区域灵活性:旨在跨AWS区域进行请求路由,使ELB的使用多样化,使边缘位置尽可能接近用户。 此外,Netflix利用Zuul的功能在加那利版本中提供了准确的路由和压力测试。

四. zuul与APP集成方式1、zulservlet-处理请求(不同阶段的文件调度、异常处理等) zulservlet类似于SpringMvc的分布式服务器

三种核心方式用于前向路由(,路由)、后向路由(,zuul )请求的处理逻辑在于这三种方式

ZuulServlet交给ZuulRunner执行。

因为ZuulServlet是一个例子,所以ZuulRunner也只有一个实现

例。

ZuulRunner直接将执行逻辑交由FilterProcessor处理,FilterProcessor也是单例,其功能就是依据filterType执行filter的处理逻辑

FilterProcessor对filter的处理逻辑。

首先根据Type获取所有输入该Type的filter,List<ZuulFilter> list。遍历该list,执行每个filter的处理逻辑,processZuulFilter(ZuulFilter filter)RequestContext对每个filter的执行状况进行记录,应该留意,此处的执行状态主要包括其执行时间、以及执行成功或者失败,如果执行失败则对异常封装后抛出。 到目前为止,zuul框架对每个filter的执行结果都没有太多的处理,它没有把上一filter的执行结果交由下一个将要执行的filter,仅仅是记录执行状态,如果执行失败抛出异常并终止执行。

2、ContextLifeCycleFilter - RequestContext 的生命周期管理 

ContextLifecycleFilter的核心功能是为了清除RequestContext; 请求上下文RequestContext通过ThreadLocal存储,需要在请求完成后删除该对象。 

RequestContext提供了执行filter Pipeline所需要的Context,因为Servlet是单例多线程,这就要求RequestContext即要线程安全又要Request安全

context使用ThreadLocal保存,这样每个worker线程都有一个与其绑定的RequestContext,因为worker仅能同时处理一个Request,这就保证了Request Context 即是线程安全的由是Request安全的。

3、GuiceFilter - GOOLE-IOC(Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。) 

4、StartServer - 初始化 zuul 各个组件 (ioc、插件、filters、数据库等)

5、FilterScriptManagerServlet -  uploading/downloading/managing scripts, 实现热部署

Filter源码文件放在zuul 服务特定的目录, zuul server会定期扫描目录下的文件的变化,动态的读取编译运行这些filter,

如果有Filter文件更新,源文件会被动态的读取,编译加载进入服务,接下来的Request处理就由这些新加入的filter处理。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。