API网关的由来
- 微服务提供的 API 的粒度通常与客户端所需的粒度不同
- 不同的客户端需要不同的数据
- 微服务实例数量及其位置(主机+端口)动态变化
- 服务划分会随着时间的推移而变化
- 服务可能会使用多种协议,有些是非 web 友好协议
不同网关
对比项 | Spring Cloud Gateway | Kong | zuul |
---|---|---|---|
编程语言 | Java | C + Lua | java |
成熟度 | 低 | 高 | 高 |
使用成本 | 较低 | 低 | 低 |
IO模型 | netty | epoll | BIO/ Netty(epoll) |
适用场景 | 网关 | 网关 | 网关 |
Spring Cloud Gateway
SpringCloud官方,对SpringCloud Gateway 特征介绍如下:
(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
(2)集成 Hystrix 断路器
(3)集成 Spring Cloud DiscoveryClient
(4)Predicates 和 Filters 作用于特定路由,易于编写的 Predicates 和 Filters
(5)具备一些网关的高级功能:动态路由、限流、路径重写
Kong
Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。
Kong主要有三个组件:
- Kong Server :基于nginx的服务器,用来接收API请求。
- Apache Cassandra/PostgreSQL :用来存储操作数据,推荐使用PostgreSQL 。
- Kong dashboard:官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api。
zuul
Zuul网关是将一个业务系统内部的多个微服务进行封装,对外提供唯一访问入口,实现系统内高内聚,系统间通过网关交互达到松耦合的效果。它可以和Eureka、Ribbon、Hystrix等组件配合使用,实现身份认证与安全、审查与监控、动态路由、压力测试、负载均衡、流量控制等功能