【中间件】—一篇说明白API网关&常用API网关推荐

【中间件】- API网关简介

⭐⭐⭐⭐⭐⭐

Github主页👉https://github.com/A-BigTree

笔记仓库👉https://github.com/A-BigTree/tree-learning-notes

个人主页👉https://www.abigtree.top

⭐⭐⭐⭐⭐⭐

文章目录

  • [【中间件】- API网关简介](#【中间件】- API网关简介)
    • [1 计算机中的网关](#1 计算机中的网关)
    • [2 微服务环境中的API网关](#2 微服务环境中的API网关)
    • [3 常见的API网关](#3 常见的API网关)
      • [3.1 Nginx](#3.1 Nginx)
      • [3.2 Zuul](#3.2 Zuul)
      • [3.3 Spring Cloud Gateway](#3.3 Spring Cloud Gateway)
      • [3.4 Kong](#3.4 Kong)
      • [3.5 Traefic](#3.5 Traefic)
      • [3.6 Tengine](#3.6 Tengine)

1 计算机中的网关

计算机网络中,网关(Gateway) 又称网间连接器、协议转化器。网间连接器,顾名思义,也就是连接网络的机器,它能解析处理网络通信请求,将请求转发到对应的目标主机。

例如下图中网络A和网络B,网络A中的主机A1想和网络B的主机B1通信,那么A1必须先将数据发到网络A的网关A,网关A再发到网络B的网关B,接着网关B再将数据发到主机B1。

2 微服务环境中的API网关

2.1 背景

随着软件架构由传统的单体架构逐渐拆分为微服务架构,一个单体应用的业务系统被拆为多个服务,每个服务进行独立维护和部署。这样做降低了服务的耦合度,但是同时也带来了一些新的问题。

(1)服务通用功能冗余:鉴权、限流、日志、监控等通用功能在每个服务内单独实现,系统维护者没有全局视图管理这类通用功能。

(2)服务使用多种协议:例如公司中最常见的两种协议HTTP,GRPC。

(3)服务实例动态变化:服务独立部署后,部署的实例Ip、端口在每次部署前后会发生动态变化。

为了解决上述问题,出现了Api网关。

2.2 API网关是什么

(1) 流量入口

类比计算机网络中的网关来说,在微服务环境中,Api网关是所有服务的流量入口,网关在接收到请求后进行处理,再转发到对应的服务;服务处理请求并返回给网关数据后,网关再将数据返回给原始请求方。

从设计模式上来说,Api网关的设计理念类似于外观模式。Api网关封装了系统内部架构,为调用方提供一个定制的Api,提供了如鉴权、监控、负载均衡、协议转化等非业务功能的服务。

使用Api网关前,流量直接访问各个Web应用,每个应用都需要进行鉴权、限流等操作。在使用Api网关后,流量统一从网关进入,由Api网关转发到各个服务,Api网关拦截请求集中处理,进行如鉴权、协议转化、监控等功能,再转发到不同服务上。

2.3 API网关的主要功能

1、路由转发

通过路由功能将请求转发到目标服务。在微服务架构中,网关结合服务注册中心,调用方只需要知道网关对外暴露的Api即可访问到后端服务。

2、负载均衡

当服务有多个实例时,根据调度策略选择调用哪个实例。

3、稳定性保障
  • 限流熔断:控制客户端的访问次数和访问频率,在网关上配置一个流量阈值,当流量到达阈值后,网关能直接拦截请求。
  • 可灰度可回滚可监控:网关可以对Api变更进行稳定性控制,实现Api变更发布的可灰度可回滚可监控。
4、安全管控
  • 统一鉴权: 无论是内网接口还是外网接口,都需要进行用户身份认证。网关可以实现身份认证鉴权逻辑,统一管理用户安全认证。
  • 数据安全:网关可进行数据加解密,实现敏感数据的脱敏处理。
5、协议转换

Api网关作为流量入口,通过协议转换可以整合基于不同风格不同技术实现的微服务,对外部客户端提供统一服务。

6、Api配置管理

对不同业务的Api和服务进行配置和管理,提供基本信息配置和Api文档生成等后台管理能力。

3 常见的API网关

市面上常见Api网关有以下这些:

3.1 Nginx

Nginx是一个高性能的HTTP和反向代理服务器。Nginx一方面可以做反向代理,另外一方面可以做静态资源服务器,接口使用Lua动态语言可以完成灵活的定制功能。并且Nginx采用异步非阻塞方式来处理请求,这样的机制使得Nginx能够轻松应对百万级的并发请求。

3.2 Zuul

Zuul 是 Netflix 开源的一个API网关组件,它可以和 Eureka、Ribbon、Hystrix 等组件配合使用。社区活跃,融合于 SpringCloud 完整生态,是构建微服务体系前置网关服务的最佳选型之一。

Zuul 的核心是一系列的过滤器,这些过滤器可以完成以下功能:

  • 统一鉴权 + 动态路由 + 负载均衡 + 压力测试
  • 审查与监控:与边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
  • 多区域弹性:跨越 AWS Region 进行请求路由,旨在实现 ELB(Elastic Load Balancing,弹性负载均衡)使用的多样化,以及让系统的边缘更贴近系统的使用者。

Zuul 目前有两个大的版本:Zuul1 和 Zuul2

Zuul1 :基于 Servlet 框架构建,采用的是阻塞和多线程方式,即一个线程处理一次连接请求,这种方式在内部延迟严重、设备故障较多情况下会引起存活的连接增多和线程增加的情况发生。

Zuul2:运行在异步和无阻塞框架上,每个 CPU 核一个线程,处理所有的请求和响应,请求和响应的生命周期是通过事件和回调来处理的,这种方式减少了线程数量,因此开销较小。

3.3 Spring Cloud Gateway

Spring Cloud Gateway 是Spring Cloud的一个全新的API网关项目,目的是为了替换掉Zuul1,它基于Spring5.0 + SpringBoot2.0 + WebFlux(基于⾼性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模型)等技术开发,性能⾼于Zuul。官⽅测试,Spring Cloud GateWay是Zuul的1.6倍,旨在为微服务架构提供⼀种简单有效的统⼀的API路由管理⽅式。

Spring Cloud Gateway可以与Spring Cloud Discovery Client(如Eureka)、Ribbon、Hystrix等组件配合使用,实现路由转发、负载均衡、熔断、鉴权、路径重写、⽇志监控等,并且Gateway还内置了限流过滤器,实现了限流的功能。

3.4 Kong

Kong是一款基于OpenResty(OpenResty 是Nginx的衍生版本,是一个基于 Nginx 的可伸缩的 Web 平台)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

Kong主要有三个组件:

  • Kong Server :基于Nginx的服务器,用来接收API请求。
  • Apache Cassandra/PostgreSQL :用来存储操作数据。
  • Kong dashboard:官方推荐UI管理工具,也可以使用 restfull 方式管理admin api。

Kong采用插件机制进行功能定制,插件集(可以是0或N个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,目前已有几个基础功能:HTTP基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及Nginx监控。

Kong网关具有以下的特性:

  • 可扩展性: 通过简单地添加更多的服务器,可以轻松地进行横向扩展,这意味着您的平台可以在一个较低负载的情况下处理任何请求;
  • 模块化: 可以通过添加新的插件进行扩展,这些插件可以通过RESTful Admin API轻松配置;
  • 在任何基础架构上运行: Kong网关可以在任何地方都能运行。您可以在云或内部网络环境中部署Kong,包括单个或多个数据中心设置,以及public,private 或invite-only APIs。

3.5 Traefic

Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file...) 来自动化、动态的应用它的配置文件设置。

重要特性:

  • 它非常快,无需安装其他依赖,通过Go语言编写的单一可执行文件;
  • 多种后台支持:Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd;
  • 支持支持Rest API、Websocket、HTTP/2、Docker镜像;
  • 监听后台变化进而自动化应用新的配置文件设置;
  • 配置文件热更新,无需重启进程;
  • 后端断路器、负载均衡、容错机制;
  • 清爽的前端页面,可监控服务指标。

3.6 Tengine

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

Tengine特性

  • 继承Nginx-1.18.0的所有特性,兼容Nginx的配置;
  • 支持HTTP的CONNECT方法,可用于正向代理场景;
  • 支持异步OpenSSL,可使用硬件如:QAT进行HTTPS的加速与卸载;
  • 增强相关运维、监控能力,比如异步打印日志及回滚,本地DNS缓存,内存监控等;
  • Stream模块支持server_name指令;
  • 更加强大的负载均衡能力,包括一致性hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;
相关推荐
清风19815 分钟前
kafka消息可靠性传输语义
数据库·分布式·kafka
小诸葛的博客8 分钟前
Kafka、RocketMQ、Pulsar对比
分布式·kafka·rocketmq
数据智能老司机2 小时前
CockroachDB权威指南——SQL调优
数据库·分布式·架构
数据智能老司机2 小时前
CockroachDB权威指南——应用设计与实现
数据库·分布式·架构
数据智能老司机3 小时前
CockroachDB权威指南——CockroachDB 模式设计
数据库·分布式·架构
数据智能老司机21 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机1 天前
CockroachDB权威指南——开始使用
数据库·分布式·架构
数据智能老司机1 天前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
IT成长日记1 天前
【Kafka基础】Kafka工作原理解析
分布式·kafka
州周1 天前
kafka副本同步时HW和LEO
分布式·kafka