什么是网关
网关是提供单一访问点,并充当多项服务的代理,网关可以做到统一接入、路由转发、过滤、流量管控、安全防护、业务隔离等功能。
Zuul网关
Zuul网关是Spring Cloud提供路由方案,它会根据不同的请求路径,定位到指定的微服务,并代理请求到不同的微服务接口,对外屏蔽微服务的真正接口地址。
Zuul中有3个重要概念:
- 动态路由表:Zuul支持Eureka路由和手动配置路由。
- 路由定位:根据请求路径,Zuul使用规则及路由表达式匹配。
- 反向代理:客户端请求到网关,网关对目标服务发送请求,拿到响应后再个客户端。
Zuul和Nginx
- Nginx使用C语言开发,Zuul使用Java开发容易与Spring集成。
- Nginx负载均衡采用服务端实现,Zuul使用Ribbon和Eureka本地实现。
- Nginx适合服务器的负载均衡,Zuul适合微服务中实现网关。
过滤器
- PreFilter(前置过滤器):请求在路由转发到后端服务器之前执行前置过滤器,比如鉴权过滤器,日志过滤器,路由选择过滤器。
- Route Filter(路由过滤器):路由过滤器将请求转发到后端服务器上,一般通过Apache HttpClient或者Ribbon把请求转发到具体的后端服务上。
- 后置过滤器:把请求路由到后端服务器之后执行,例如添加标准的HTTP响应头,收集统计数据、写入请求到客服端。
- 错误过滤器:当上面任何一个过滤器执行出错时执行该过滤器。