9.Netflix Zuul(服务网关)

目录


Spring Cloud专栏目录(点击进入…)



Netflix Zuul(服务网关)

Spring Cloud Zuul是Netflix OSS开源的微服务网关,是一个基于JVM路由和服务端的负载均衡器。提供路由、监控、弹性、安全等方面的服务框架。可以和Eureka、Ribbon、Hystrix等组件配合使用,Spring Cloud对Zuul进行了整合与增强,Zuul默认使用的HTTP客户端是Apache HttpClient,也可以使用RestClient或okhttp、HttpClient。Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/demo/test转发到到demo服务。zuul默认和Ribbon结合实现了负载均衡的功能

主要功能:提供负载均衡、反向代理、权限认证、动态路由转发、监控、弹性、安全等的边缘服务。其主要作用是为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

主要功能就是过滤和路由转发
网关可以完成的功能:路由,反向代理,日志记录,权限控制,限流

为了方便客户端调用微服务,所以设计出了网关。在微服务实例地址发生改变的情况下,客户端调用服务要能够不受影响

路由常见的使用情况如下:
Zuul天然与服务注册中心(Eureka服务注册与发现)集成,通过Ribbon负载均衡到映射的服务


Zuul服务网关功能?

(1)通过服务网关统一向外系统提供REST API的过程中,具备服务路由、均衡负载功能、权限控制等功能。为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性
(2)自身也是一个微服务,跟其它服务单元一样,都注册在eureka server上,可以相互发现
(3)zuul能感知到哪些服务在线,同时通过配置路由规则,可以将请求自动转发到指定的后端微服务上,对于一些公用的预处理(比如:权限认证,token合法性校验,灰度验证时部分流量引导之类),可以放在所谓的过滤器(ZuulFilter)里处理,这样后端服务以后新增了服务,zuul层几乎不用修改

在这里插入图片描述
在Spring Cloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(Ngnix),再到达服务网关(Zuul集群),然后再到具体的服务。服务统一注册到高可用的服务注册中心集群(Eureka),服务的所有的配置文件由配置服务管理(Config),配置服务的配置文件放在GIT仓库,方便开发人员随时改配置


Feign、Zuul功能是否重复?

Spring Cloud Feign基于Netflix Feign实现的,是一个声明式的伪Http客户端,意味着在cloud服务中任何一个服务都可以是Feign的客户端(只要有通讯的需求)

功能相同的地方

Zuul采用的route加filter实现路由,采用hystrix、ribbon实现负载和熔断;feign也是采用hystrix、ribbon来实现负载和熔断

(1)Fegin专注于客户端通讯
Feign是将当前微服务的部分服务接口暴露出来,并且主要用于各个微服务之间的服务调用

(2)Zuul专注于实现路由功能
Zuul作为整个应用的流量入口,接收所有的请求;如app、网页等,并且将不同的请求转发至不同的处理微服务模块,其作用可视为Nginx

两者的应用层次以及原理均不相同

Feign主要作为客户端流控:Feign的负载均衡是基于Eureka实现的
Zuul主要作服务端流控:并且Zuul的负载均衡结合Eureka实现易用性较好,并且Zuul一般用在对第三方提供访问接口

Zuul也含有hystrix和ribbon,基于http通讯的,可以直接代理服务就行。在它和服务间增加feign只会增加通讯消耗,没有特别的意义。feign在服务互相调用的时候用就行了,可以仿rpc通讯

使用场景:Zuul做服务之间的通讯没有业务场景,做中间件的倒是很多


过滤器(核心),使用场景?

Zuul大部分功能都是通过过滤器来实现的。Zuul中定义了四种标准过滤器类型,这些过滤器类型对应于请求的典型生命周期

过滤器描述
PRE在请求被路由之前调用。可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等
ROUTING将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务
POST在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等
ERROR在其他阶段发生错误时执行该过滤器

(1)动态路由

动态将客户端的请求路由到后端不同的服务,做一些逻辑处理。比如:聚合多个服务的数据返回

(2)请求监控

可以对整个系统的请求进行监控,记录详细的请求响应日志,可以实时统计出当前系统的访问量以及监控状态

(3)认证鉴权

对每一个访问的请求做认证,拒绝非法请求,保护好后端的服务

(4)压力测试

压力测试是一项很重要的工作,像一些电商公司需要模拟更多真实的用户并发量来保证重大活动时系统的稳定。通过Zuul可以动态地将请求转发到后端服务的集群中,还可以识别测试流量和真实流量,从而做一些特殊处理

(5)灰度发布

灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度


Spring Cloud Zuul是如何映射路由?

Zuul的路由映射是使用Spring MVC功能,Spring MVC有两大核心组件
(1)HandlerMapping:映射器
(2)HandlerAdapter:适配器


网关(zuul)应用场景

(1)黑白名单
实现通过IP地址控制禁止访问网关功能,此功能是应用层面控制实现,再往前也可以通过网络传输方面进行控制访问

(2)日志
实现访问日志的记录,可用于分析访问、处理性能指标,同时将分析结果支持其他模块功能应用。
协议适配:实现通信协议校验、适配转换的功能

(3)身份认证
负责网关访问身份认证验证,此模块与“访问认证中心”通信,实际认证业务逻辑交移“访问认证中心”处理

(4)计流限流
实现微服务访问流量计算,基于流量计算分析进行限流,可以定义多种限流规则。

(5)路由
路由是API网关很核心的模块功能,此模块实现根据请求,锁定目标微服务并将请求进行转发。此模块需要与“服务发布管理中心”通信。“服务发布管理中心”实现微服务发布注册管理功能,与其通信获得目标微服务信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未禾

您的支持是我最宝贵的财富!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值