学科分类
目录
Spring Cloud

Zuul概述

我们通过学习前面章节,已经可以搭建简单的微服务架构系统并实现各服务之间的调用,但是不同的微服务一般会有不同的网络地址,而外部客户端(例如手机APP)可能需要调用多个服务的接口才能完成一个业务需求。例如一个电商的手机APP,可能会调用多个微服务的接口,才能完成一次购票的业务流程,如图1所示。

图1 客户端请求多个微服务调度过程图

如图1所示,客户端直接与各个微服务通信,这样会有许多问题出现,例如:

1.客户端会多次请求不同的微服务,使客户端变得更为复杂。

2.存在跨域请求,在一定场景下处理相对复杂。例如,在重定向或js发起的ajax请求时,会因为域名不同、二级域名不同、子域名不同或端口号不同等因素,处理变得相对复杂。

3.难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个,这种情况下,如果是客户端与微服务直接通信的架构,那么用户访问每一个接口的请求路径都需要改变,这就使得重构变得难以实现。

4.某些微服务可能会设置防火墙等不友好的协议,难以做到直接访问。

针对上述问题,可以使用服务网关解决。服务网关相当于介于客户端和服务端之间的中间层,所有的外部请求都会先经过服务网关进行调度和过滤。服务网关除了要实现请求路由、负载均衡、过滤等功能之外,还要实现更多功能,例如与服务相关框架整合、服务请求的熔断等。图2描述了加入服务网关的微服务调度过程。

图2 使用服务网关后客户端请求多个微服务调度过程图

Zuul是Netflix的一个开源组件,它是通过Servlet实现的。Zuul作为Spring Cloud中的服务网关组件,它能够通过与Spring Cloud Eureka进行整合,将自身注册到 Eureka Server中,与Eureka、Ribbon、Hystrix等整合,同时从Eureka中获得其他微服务实例信息。这样的设计通过把网关和服务治理整合到一起,Spring Cloud Zuul可以获取到服务注册信息,结合Ribbon,Hystrix等更好地实现路由转发、负载均衡等功能。

点击此处
隐藏目录