为什么微服务要使用网关
微服务的架构,属于比较细粒度的拆分,会根据业务拆分成很多个微服务,那么有可能一个用户下单,就需要 先调 用户微服务->商品微服务->支付微服务->订单微服务,这样才能完成一次购买商品的操作。如图。

这样的话,让客户端直接与各个微服务进行通信的话,会存在很多问题:
- 客户端多次请求不同的微服务,增加客户端的复杂程度。
- 存在跨域现象。
- 认证复杂,每个微服务都需要单独认证。
- 可重用性较差。重构困难。有可能要拆分某些微服务,重构起来就很麻烦。
所以,微服务给出了网关的解决方案。如图

网关封装了应用程序的内部结构,客户端只需要跟网关做交互就行,就不需要调用各个微服务的接口了。这样,开发就得到了简化,不仅如此,网关还有以下优点:
- 易于监控。可在微服务网关收集并监控数据然后推送到外部系统进行分析。
- 易于认证。可在微服务网关做一次认证,就不需要在每个微服务进行认证了。
- 减少客户端和微服务交互次数。
Zuul 简介
Zuul是netflix开源的微服务网关,它具有以下功能:
- 身份认证和安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。
- 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
- 动态路由:动态的将请求路由到不同的后端集群。
- 压力测试:逐渐增加指向集群的流量以了解性能。
- 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求。
- 静态响应处理:在边缘位置直接建立部分响应,从而避免及转发到内部集群。
- 多区域弹性:跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。
Zuul原理
过滤器就是Zuul业务逻辑的核心所在,这是他的运行流程。

zuul的过滤器
- Inbound Filters:前置过滤器,在请求被路由之前调用。可以实现身份认证、记录调试信息等。
- Endpoint Filter:路由过滤器,这种过滤器将请求直接路由到微服务,用于构建发送到微服务的请求。
- Outbound Filters:路由到微服务之后执行。可以用来收集响应信息,将响应信息返给客户端。
实现自己的过滤器很简单,只要集成ZuulFilter,实现其中的一些方法即可。
Netty作为高性能异步网络通讯框架,如图zuul2.0使用netty server作为网关监听服务器监听客户端发来的请求,然后把请求转发到前置过滤器(inbound filters)进行处理,处理完毕后在把请求使用netty client代理到具体的后端服务器进行处理,处理完毕后在把结果交给后者过滤器(outbound filters)进行处理,然后把处理结果通过nettyServer写回客户端。
有兴趣的可以看看How-It-Works-2.0,也可以看看各种过滤器。
编写Zuul网关
首先新建一个服务 叫做 gateway-zuul。在pom文件中添加:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId

本文介绍了Spring Cloud中Zuul作为微服务网关的作用,包括减少客户端与微服务交互复杂性、统一认证、监控等优势。详细讲解了Zuul的过滤器机制,如Inbound、Endpoint和Outbound Filters,并展示了如何编写Zuul网关,配置路由以及忽略特定路径。同时,文章涵盖了Zuul的路由配置,如自定义路径、忽略微服务和设置路由前缀等。

1181

被折叠的 条评论
为什么被折叠?



