Zuul 是一个 L7 应用网关,提供动态路由、监控、弹性、安全等功能。
Zuul 是从设备和网站到应用程序后端的所有请求的前门。作为边缘服务应用程序,Zuul 旨在实现动态路由,监视,弹性和安全性。Zuul 包含了对请求的路由和过滤两个最主要的功能。如下图:
上图中,来自 APP 应用的所有请求均通过 Zuul 网关进行路由、过滤。
Netflix API 流量的规模和多样性有时会导致生产问题迅速出现且毫无征兆。我们需要一个系统,使我们能够快速改变行为以应对这些情况。
Zuul 是 Netflix 开源的微服务网关,它可以和 Eureka、Ribbon、Hystrix 等组件配合使用。
Zuul 使用了一系列不同类型的过滤器,使我们能够快速灵活地将功能应用于我们的边缘服务。这些过滤器帮助我们执行以下功能:
身份验证:可以检查请求中的用户凭证,如用户名和密码、令牌(如 JWT - JSON Web Tokens)等。
授权:确定用户是否有访问特定资源或服务的权限。假设在一个包含多个微服务的系统中,有一个管理用户权限的微服务,Zuul 过滤器可以与这个微服务通信,查询用户是否有权限访问目标微服务。比如,对于一个只允许管理员访问的系统配置微服务,过滤器会检查用户的角色是否为 “管理员”,如果不是,就返回 403 Forbidden(禁止访问)的响应。
日志记录:记录请求的关键信息,如请求的 URL、HTTP 方法、请求头、请求参数和请求时间等。这些日志对于故障排查和性能分析非常有用。
监控指标收集:收集请求相关的性能指标,如响应时间、吞吐量等。这些指标可以用于监控系统的健康状况。
请求转换:可以修改请求的内容,如添加、删除或修改请求头和请求参数。在一个需要跨多个不同微服务的系统中,可能需要在请求中添加一些公共的信息,以便后端微服务能够更好地处理请求。
响应转换:对后端微服务返回的响应进行转换,如改变响应的数据格式(从 XML 转换为 JSON)、添加或删除响应头。
流量控制:根据系统的负载情况和配置的策略,控制请求的流量。例如,在流量高峰期,可以通过过滤器限制每秒进入系统的请求数量。
限流:对特定用户、IP 地址或微服务的请求进行限制。可以根据用户的等级(如普通用户和 VIP 用户)分配不同的请求配额。
Zuul 2.x 组件:
zuul-core - Zuul 2.0 的核心功能
zuul-sample - Zuul 2.0 的示例驱动程序应用程序
Zuul 1.x 组件:👈
zuul-core - 包含编译和执行过滤器核心功能的库。
zuul-simple-webapp - 一个展示如何使用 zuul-core 构建应用程序的简单示例的 web 应用程序。
zuul-netflix - 为 Zuul 添加其他 NetflixOSS 组件的库——例如使用 Ribbon 进行请求路由。
zuul-netflix-webapp - 将 zuul-core 和 zuul-netflix 打包在一起形成一个易于使用的软件包的 web 应用程序。
注意:本教程我们将介绍组件。
点击下载/查看本教程相关资料或者源代码。