网关:微服务背景下,一个系统被拆分为多个服务,但是像安全认证,流量控制,日志,监控等功能是每个服务都需要的,没有网关的话,我们就需要在每个服务中单独实现,这使得我们做了很多重复的事情并且没有一个全局的视图来统一管理这些功能。
网关提供的功能
请求转发:将请求转发到目标微服务。
负载均衡:根据各个微服务实例的负载情况或者具体的负载均衡策略配置对请求实现动态的负载均衡。
安全认证:对用户请求进行身份验证并仅允许可信客户端访问 API,并且还能够使用类似 RBAC 等方式来授权。
参数校验:支持参数映射与校验逻辑。
日志记录:记录所有请求的行为日志供后续使用。
监控告警:从业务指标、机器指标、JVM 指标等方面进行监控并提供配套的告警机制。
流量控制:对请求的流量进行控制,也就是限制某一时刻内的请求数。
熔断降级:实时监控请求的统计信息,达到配置的失败阈值后,自动熔断,返回默认值。
响应缓存:当用户请求获取的是一些静态的或更新不频繁的数据时,一段时间内多次请求获取到的数据很可能是一样的。
响应聚合:某些情况下用户请求要获取的响应内容可能会来自于多个业务服务。
灰度发布:将请求动态分流到不同的服务版本。
异常处理:对于业务服务返回的异常响应,可以在网关层在返回给用户之前做转换处理。
网关系统 Netflix Zuul
是一个API网关服务器,由Netflix开源,是Spring Cloud Netflix子项目的核心组件之一。它主要用于微服务架构中,提供动态路由、请求过滤、负载均衡和安全验证等功能。
主要功能
- 统一入口:Zuul为微服务系统提供了一个统一的入口,简化了服务间的交互,并保障了后台服务的安全性。
- 动态路由:根据需要将请求动态路由到不同的后端集群,实现了请求的灵活调度。
- 请求过滤:通过过滤器机制对请求进行过滤,实现身份验证、权限校验、限流等功能。
- 负载均衡:与Ribbon结合使用,实现了客户端的负载均衡,提高了系统的可用性和稳定性。
- 安全验证:识别每个请求的权限,拒绝不符合要求的请求,确保数据和服务的安全。
过滤器类型
Zuul的过滤器机制是其核心功能之一,它定义了多种类型的过滤器,用于处理请求的不同阶段:
- 前置过滤器(Pre):在请求被路由到目标服务之前执行,用于身份验证、参数校验、限流等。
- 路由过滤器(Routing):负责将请求路由到具体的微服务实例,构建并发送请求。
- 后置过滤器(Post):在微服务返回响应之后执行,用于记录日志、修改响应内容、添加HTTP头等。
- 错误过滤器(Error):在处理请求时发生错误时执行,用于处理异常并返回错误信息。
此外,Zuul还允许创建自定义的过滤器类型,以满足特定的业务需求。