什么是网关?
访问一个系统的请求及系统的响应所要经过的网络关口。网关主要进行请求过滤,具体应提供请求转发、安全认证、流量控制、负载均衡、日志、监控等功能。
为什么要用网关?
在微服务架构中,一个系统被拆分成多个服务,但是像安全认证、流量控制、日志、监控等功能是每个服务都需要的,如果没有网关,我们就需要在每个服务中单独实现,冗余且不便于统一管理。而且多个微服务可能部署在不同的服务器上,传统方式访问增加了客户端的复杂度。
常见的网关系统有哪些?
Nginx+Lua 服务端网关方案,实现web服务器、反向代理、负载均衡、动静分离等功能。
Netflix Zuul2.x 基于Netty实现了异步IO,可自定义过滤器来处理请求,同时提供了动态路由、监控、弹性负载和安全功能。
SpringCloud Gateway 基于Spring WebFlux,提供统一的路由方式,并且基于Filter链的方式提供了网关的基本功能,如安全、限流、监控等。
Kong 基于OpenResty(Nginx的一个开源版本),是一款高性能、云原生、可扩展的网关系统。
APISIX 基于Nginx和etcd,同样是一款高性能、云原生、可扩展的网关系统。作为NGINX和Kong的替代项目,目前已经是Apache顶级开源项目,在功能、性能、架构全面优于Kong。
ShenYu是一款基于WebFlux的可扩展、高性能、响应式网关,同样是Apache顶级开源项目。插件是ShenYu的灵魂,通过插件扩展功能,自带了路由监控、转发、重定向、限流、熔断等插件。
注:Netflix Zuul和SpringCloud Gateway都是业务网关,用来聚合微服务。
微服务架构中,请求先经过服务器网关,再到达微服务聚合网关,再寻找具体的微服务。