网关分类
开放网关
开放api(openApi) 企业需要将自身数据、能力等作为开发平台向外开放,通常会以rest的方式向外提供,最好的例子就是淘宝开放平台、腾讯公司的微信开放平台、蚂蚁金服开放平台。 Open API开放平台必然涉及到客户应用的接入、API权限的管理、调用次数管理等,必然会有一个统一的入口进行管理,这正是API网关可以发挥作用的时候。
微服务网关
微服务网关,微服务网关处理了负载均衡,缓存,路由,访问控制,服务代理,监控,日志等。API网关在微服务架构中正是以微服务网关的身份存在。主要应用于集群内部、局域网环境,不对外部应用提供服务
Zuul是NetFlix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用。Zuul的核心是一些列的过滤器,这些过滤器可以完成以下功能。Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能, 类似于nginx转发。
主要解决跨域问题,拦截请求
网关 接口权限、幂等性、安全性、防止篡改(验证签名),使用网关拦截接口实现黑名单、白名单,遵循http协议+json格式风格Rstfull
过滤器适合单个tomcat服务器进行拦截请求。
网关是拦截整个服务的所有请求。
作用:
1是类似于Nginx的网址重定向,但zuul的重定向的一般是整个spring cloud里在Eureka注册中心的模块.
2、zuul更重要的功能为过滤请求.
3、网关安全控制,统一异常处理,XXS、SQL注入
4、权限控制,黑名单和白名单、性能监控、日志打印、拦截客户端所有请求,对请求进行,负载均衡、接口调用监控等。
过滤类,继承于ZuulFilter,一般要实现上面四个方法.
filterType:过滤器的类型.
pre:可以在请求被路由之前调用
route:在路由请求时候被调用
post:在route和error过滤器之后被调用
error:处理请求时发生错误时被调用
Nginx与Zuul区别
相同点:
1)Zuul和Nginx都可以实现负载均衡、反向代理、过滤请求、实现网关效果。
不同点:
1)Nginx采用C语言编写,Zuul采用java语言编写;
2)Zuul负载均衡实现:采用ribbon+eureka实现本地负载均衡;
3)Nginx负载均衡实现:采用服务器端实现负载均衡;
4)Nginx比Zuul功能会更加强大,因为Nginx可以整合一些脚本语言(Nginx+Lua);
5)Nginx适合于服务器端负载均衡,也可以实现网关;
6)Zuul适合微服务中实现网关,而且使用技术是java语言;
7)最好建议nginx+zuul实现网关;
nginx用作实现反向代理,zuul对微服务实现网关拦截;
反向代理的目的是隐藏真实ip地址