微服务看门神-Zuul

Zuul网关和基本应用场景构建微服务时,常见的问题是为系统的客户端应用程序提供唯一的网关。事实上,您的服务被拆分为小型微服务应用程序,这些应用程序应该对用户不可见,否则可能会导致大量的开发/维护工作。还有一些情况,整个生态系统网络流量可能会通过一个可能影响群集性能的点。为了解决这个问题,Netflix(微服务的一个主要采用者)创建并开源了它的Zuul,Zuul是Netflix的基于JVM的路由器和...

微服务看门神-Zuul

Zuul网关和基本应用场景

构建微服务时,常见的问题是为系统的客户端应用程序提供唯一的网关。

事实上,您的服务被拆分为小型微服务应用程序,这些应用程序应该对用户不可见,否则可能会导致大量的开发/维护工作。还有一些情况,整个生态系统网络流量可能会通过一个可能影响群集性能的点。

为了解决这个问题,Netflix(微服务的一个主要采用者)创建并开源了它的ZuulZuul是Netflix的基于JVM的路由器和服务器端负载均衡器。后来Spring在Pivotal下已经在其Spring Cloud中对其进行了调整,使我们能够通过简单的步骤轻松有效地使用zuul。

Zuul是一种边缘服务,它支持对多个服务请求的代理。它为您的生态系统提供统一的“前门”,允许任何浏览器,移动应用程序或其他用户界面使用来自多个主机的服务。您可以将Zuul与其他Netflix堆栈组件(如Hystrix)集成以实现容错,使用Eureka进行服务发现,或者使用它来管理整个系统中的路由规则,过滤器和负载平衡。

最重要的是,Spring框架通过Spring boot/cloud很好地适应了所有这些组件。

路由器和过滤器

路由是微服务架构不可或缺的一部分。例如,/可以映射到您的Web应用程序,/api/users映射到用户服务并/api/shop映射到商店服务。

Netflix使用Zuul进行以下操作:

  • 认证

  • 洞察

  • 压力测试

  • 金丝雀测试

  • 动态路由

  • 服务迁移

  • 负载脱落

  • 安全

  • 静态响应处理

  • 主动/主动流量管理

Zuul的规则引擎允许规则和过滤器基本上以任何JVM语言编写,内置支持Java和Groovy。

Zuul组件

Zuul主要有四种类型的过滤器,使我们能够在任何特定事务的请求处理的不同时间线中拦截流量。我们可以为特定的url模式添加任意数量的过滤器。

  • 前置过滤器 - 在路由请求之前调用。

  • 后置过滤器 - 在路由请求后调用。

  • 路由过滤器 - 用于路由请求。

  • 错误过滤器 - 在处理请求时发生错误时调用。

使用不同的过滤器在Zuul内部请求处理流程

过滤器关键概念

关键词备注
类型Type定义在路由过程中,过滤器被应用的阶段
执行顺序Execution Order在同一个Type中,定义过滤器执行的顺序
条件Criteria过滤器被执行必须满足的条件
动作Action如果条件满足,过滤器中将被执行的动作

标准过滤器类型

PRE

在请求被路由到源服务器前要执行的过滤器

适用业务场景

  • 认证

  • 选路由

  • 请求日志

ROUTING

处理将请求发送到源服务器的过滤器

POST

在响应从源服务器返回时要被执行的过滤器

  • 对响应增加HTTP 头

  • 收集统计和度量

  • 将响应以流的方式发送回客户端

ERROR

上述阶段中出现错误要执行的过滤器

过滤器样例

public class PreFilter extends ZuulFilter {

// 过滤器类型
@Override
public String filterType() {
return "pre";
}

// 过滤器顺序
@Override
https://www.guoxiongfei.cn/cntech/18421.html
0