服务网关(Zuul)
1.技术背景
前面我们通过Ribbon或Feign实现了微服务之间的调用和负载均衡, 那我们的各种微服务又要如何提供给外部应用调用呢?
因为是REST API接口, 所以外部客户端直接调用各个微服务是没有问题的, 但是出于种种原因,这并不是一个好的选择。
让客户端直接与各个微服务通信,会有以下几个问题:
●客户端会多次请求不同的微服务,增加客户端的复杂性.
●存在跨域请求,在一定场景下处理会变得相对比较复杂.
●实现认证复杂,每个微服务都需要独立认证,
●难以重构,项目迭代可能导致微服务重新划分.如果客户端直接与微服务通信,那么重构将会很难实施。
●如果某些微服务使用了防火墙/浏览器不友好的协议,直接访问会有一定困难。
●面对类似上面的问题,我们要如何解决呢?答案就是:服务网关!
使用服务网关具有以下几个优点:
●易于监控,可在微服务网关收集监控数据并将其推送到外部系统进行分析.
●易于认证.可在服务网关上进行认证,然后转发请求到微服务,无须在每个微服务中进行认证。
●客户端只跟服务网关打交道,减少了客户端与各个微服务之间的交互次数.
●多渠道支持, 可以根据不同客户端(Web端、移动端、桌面端等) 提供不同的API服务网关.
2.Spring Cloud Zuul
服务网关是微服务架构中一个不可或缺的部分。在通过服务网关统一向外系统提供RESTAPI的过程中, 除了具备服务路由、均衡负载功能之外, 它还具备了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色, 为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。
在Spring Cloud体系中,Spring Cloud Zuul封装了Zuul组件, 作为一个API网关, 负责提供负载均衡、反向代理和权限认证。