API网关介绍
网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。
API 网关负责请求路由、API组合和协议转换。来自外部客户端的所有API请求首先会先转到API网关,后者再将请求路由到相应的服务。API网关使用API组合模式处理其他请求,调用多个服务并聚合结果。同时他还可以在客户端友好的协议(例如HTTP)与客户端不友好的协议之间进行转换。
总结:网关就是所有项的一个统一入口。
网关 = 路由转发 + 过滤器。
路由转发:接收外界请求,通过网关的路由转发,转发到后端的服务上。
过滤器:分为Gateway FilIer和Global Filter。Filter可以对请求和响应进行处理。默认支持的过滤器有:AddRequestHeader请求头,AddRequestParameter请求参数、RequestRateLimiter限流、Hystrix熔断、Retry重试等20多种过滤器,也支持自定义过滤器。
gateway基本介绍
Spring Cloud Gateway是一个基于Spring Framework 5,Spring Boot 2和Project Reactor等技术构建的网关服务器,用于为微服务应用程序提供路由、负载均衡、安全性、限流、降级等功能。
SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 2.0之前的非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。
SpringCloudGateway : 微服务网关,事项微服务的统一路由,统一鉴权,跨域,限流等功能
Nginx基本介绍
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
Nginx相比其他Web服务器软件的优点如下:
- 高性能:Nginx采用异步、非阻塞的事件驱动模型,可以支持高并发请求,并且消耗较少的系统资源。
- 轻量级:Nginx的二进制文件很小,可以快速启动并占用较少的内存。
- 可靠性高:Nginx的代码被设计为高可靠性的,可以在长时间运行中保持稳定性。
- 可扩展性好:Nginx可以通过添加第三方模块或编写自定义模块来扩展其功能。
- 支持热部署:Nginx可以在不停止服务的情况下重新加载配置文件和动态模块。
Nginx与API gateway网关
本质上API网关也是做了请求的转发,那既然Nginx也可以做请求转发,那这两者有什么区别?
在具体架构设计时Nginx做负载均衡时,考虑到API网关在系统中不止一个(以集群的方式做高可用),通常可以将Nginx至于API网关前,负责对API网关的负载均衡,然后再由网关决定进入根据判定到哪个真实的web 服务器。 让两者的分工更加明确,也就是:API网关聚合服务,Nginx请求转发
业务网关(gateway):对于具体的后端业务应用或者是服务和业务有一定关联性的策略网关。业务网关针对具体的业务需要提供特定的流控策略、缓存策略、鉴权认证策略
流量网关(Nginx):与业务网关相反,定义全局性的、跟具体的后端业务应用和服务完全无关的策略网关。流量网关通常只专注于全局的Api管理策略,比如全局流量监控、日志记录、全局限流、黑白名单控制、接入请求到业务系统的负载均衡等
业务网关一般部署在流量网关之后、业务系统之前,比流量网关更靠近业务系统。通常API网指的是业务网关。 有时候我们也会模糊流量网关和业务网关,让一个网关承担所有的工作,所以这两者之间并没有严格的界线。
nginx与gateway的区别:
- nginx是用C语言写的,自定义扩展的话,要么写C要么写lua
- gateway是java语言的一个框架,可以在框架上进行代码的扩展与控制,例如:安全控制,统一异常处理,XXS,SQL注入等;权限控制,黑白名单,性能监控,日志打印等;
- gateway的主要功能有,路由,断言,过滤器,利用它的这些特性,可以做流控。
- nginx做网关,更多的是做总流量入口,反向代理,负载均衡等,还可以用来做web服务器。
Nginx在其中扮演的角色是什么?
- 反向代理
- 负载均衡
SpringGateway在其中扮演的角色是什么?
- 统一鉴权
- 负载均衡
- 服务发现