服务网关
- 1. 什么是网关
- 2. 常用主流网关
1. 什么是网关
网关:就是服务的统一入口;比如说一个城池, 城门相当于网关;
那么我们为什么使用网关?:在微服务架构下单体应用被切割成多个微服务,如果讲所有的微服务直接对外暴露,势必会出现安全方面的各种问题,另外内外耦合严重。
服务网关分为 流量网关 、 业务网关。

流量网关: 顾名思义就是可控制流程进入集群的网关,有很多工作需要在这里做,对于一个服务集群,势必会有很多非法请求、无效请求,这个时候就可以在流量网关这里讲这些请求拒之门外,降低集群的请求压力。流量网关是定义全局性的跟具体的后台业务无关的策略网关。流量网关通常只专注于全局的api 管理策略,比如全局流量监控、日志记录、全局限流、黑名单控制、接入请求到业务系统的负载均衡等。
业务网关: 当一个单体应用被拆分成多个为微服务应用后,也会出现很多问题,比如说 权限控制、日志输出、数据加密、熔断限流等这些功能大部分服务都需要这些功能都是重复的,会出现大量冗余代码,增加维护成本,无法集中管理,就出现了业务网关来解决这些问题。
业务网关作为微服务体系中的核心基础功能一般需要具备接口管理、协议适配、熔断降级、安全防护等功能。
2. 常用主流网关
流量网关: OpenResty、Kong
业务网关: Zuul/Zuul2、Spring Cloud Gateway
OpenResty: OpenResty基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
也就是说 Nginx 不再是一个简单的静态网页服务器,也不再是一个简单的反向代理了。第二代的 openresty 致力于通过一系列 nginx 模块,把nginx扩展为全功能的 web 应用服务器。
Kong: Kong基于OpenResty开发,也是流量层网关, 是一个云原生、快速、可扩展、分布式的Api 网关。继承了OpenResty的高性能、易扩展性等特点。Kong通过简单的增加机器节点,可以很容易的水平扩展。同时功能插件化,可通过插件来扩展其能力。而且在任何基础架构上都可以运行。具有以下特性:
- 提供了多样化的认证层来保护Api。
- 可对出入流量进行管制。
- 提供了可视化的流量检查、监视分析Api。
- 能够及时地转换请求和相应。
- 提供log解决方案
- 可通过api调用Serverless 函数。
Zuul(同步阻塞架构):Zuul是Spring Cloud全家桶中的微服务API网关。
所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。Zuul底层利用各种filter实现如下功能:
- 认证和安全 识别每个需要认证的资源,拒绝不符合要求的请求。
- 性能监测 在服务边界追踪并统计数据,提供精确的生产视图。
- 动态路由 根据需要将请求动态路由到后端集群。
- 压力测试 逐渐增加对集群的流量以了解其性能。
- 负载卸载 预先为每种类型的请求分配容量,当请求超过容量时自动丢弃。
- 静态资源处理 直接在边界返回某些响应。
Zuul2(异步非阻塞架构):Zuul2的设计相对比较复杂,代码也不太容易读懂,它采用了Netty实现异步非阻塞编程模型
Zuul原本采用同步阻塞架构,转型后叫作Zuul2,采用异步非阻塞架构。
Netflix给出了一个比较模糊的数据,大致Zuul2的性能比Zuul1好20%左右

Spring Cloud Gateway(异步非阻塞架构):Spring Cloud GateWay天⽣就是异步⾮阻塞的,基于Reactor模型;

网关对比
网关 | 限流 | 鉴权 | 监控 | 易用性 | 维护性 | 成熟性 |
Zuul/Zuul2 | 可以通过配置文件配置集群限流和单服务器限流也可以通过filter实现限流扩展 | filter中实现 | filter中实现 | 参考资料较少 | 可维护性较差 | 资料少 |
Spring Cloud Gateway | 可以通过IP、用户、集群限流、提供的相应的接口进行扩展 | 普通鉴权、auth2.0 | Gate way Metrics Filter | 简单易用 | spring系列可扩展,已配置 可维护性好 | spring社区成熟但是gateway资源较少 |
OpenResty | 需要lua开发 | 需要lua开发 | 需要开发 | 简单易用,但需要进行lua开发的很多 | 可维护性较差,将来需要维护大量的lua脚本 | 很成熟,资料很多 |
Kong | 根据 秒、分、时、天、月、年,用户进行限流,可在源码的基础上进行开发 | 普通鉴权,keyAuth鉴权,HmacAuth2.0 | 上报的 datalog,记录请求数量,数据量 ,应答数据量,接受发送时间,状态码数量,kong内运行时间 | 简单易用 | 可维护性较差,将来需要维护大量的lua脚本 | 相对成熟 |
















