谈一谈网关

前言

日常测试工作中,开发提到的网关到底什么意思?本篇文章就分享一下所谓的网关究竟是什么技术、有什么好处,以及常见的网关组件有那些。

1为什么需要网关?

举例一种常见case
电商系统,常常遇到大量刷接口、大量爬虫请求(用户和商品),需要在用户和商品等服务加上限流策略(设备、ip等),这个时候要么每个服务都实现一遍限流功能,而且不同语言都需要实现一套,这样代码冗余效率低;通常我们会选择引入API网关层,对外统一入口,解耦客户端与内部服务。

网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,架构图如图所示,
没有网关的时候
会有以下的问题:

  • 客户端会多次请求不同的微服务,增加了客户端的复杂性。
    存在跨域请求,在一定场景下处理相对复杂。
  • 认证复杂,每个服务都需要独立认证。
  • 难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施。
  • 某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难。

以上这些问题可以借助 API 网关解决。API 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 API 网关这一层。也就是说,API 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由 API 网关来做,这样既提高业务灵活性又不缺安全性,典型的架构图如图所示:
有网关的时候

2什么是网关?

API Gateway是一种微服务架构中的网关组件,它可以作为服务的入口,接收和处理客户端的请求,并将请求转发到不同的服务实例中。

3网关的分类

API 网关分为入口网关和出口网关两类。

入口网关作用很多,可以隔离客户端和微服务,从中提供协议转换、安全策略、认证、限流、熔断等功能。
在这里插入图片描述

出口网关主要是为调用第三方服务提供统一的出口,在其中可以对调用外部的 API 做统一的认证、授权、审计以及访问控制;

在这里插入图片描述

4网关能提供哪些能力?

负载均衡:API Gateway可以将请求分发到多个服务实例中,从而实现负载均衡和故障转移。可以基于不同的算法对服务实例进行负载均衡,例如轮询、随机、最少连接数等。
API路由:API Gateway可以根据请求的URL、HTTP方法、请求头等信息,将请求路由到不同的服务实例中。可以根据不同的规则和策略来进行路由,例如路径匹配、正则表达式匹配、权重路由等。定义协议规则
在这里插入图片描述

安全认证:API Gateway可以提供身份认证和访问授权等安全功能,例如基于API Key、OAuth、JWT等机制进行身份验证和访问授权。可以根据不同的策略和规则来控制访问权限和访问频率等。

在这里插入图片描述
在这里插入图片描述

流量控制:API Gateway可以根据不同的规则和策略来控制请求的流量和速率,例如限制每秒的请求数、限制每个用户的请求频率等。可以根据不同的业务需求和服务能力来进行流量控制。

比如:10s之内最多请求5次,10s可以定义为redis的过期时间
在这里插入图片描述
在这里插入图片描述

日志和监控:API Gateway可以记录请求和响应的日志,并提供监控和统计功能,例如实时监控服务的健康状态、性能指标、错误率等。可以根据不同的需求和场景来进行监控和统计。

在这里插入图片描述

缓存:API Gateway可以提供缓存功能,将经常请求的数据缓存起来,从而减少服务的响应时间和减轻服务的负载。
聚合和转换:API Gateway可以将多个服务的请求聚合在一起,并将不同服务的数据进行转换和组合,从而减少客户端的请求次数和提高服务的效率。
总之,API Gateway是一个非常重要的组件,它可以提供多种功能和能力,从而帮助开发人员更加方便地管理和维护微服务系统,并提高系统的可用性、安全性和性能。

5网关的开源实现

现在的一些常见的网关技术:Nginx、OpenResty、Zuul、Spring Cloud Gateway 等。

Nginx

Nginx 是⼀款轻量级的 Web 服务器、反向代理服务器,由于它的内存占⽤少,启动极快,⾼并发能⼒强,在互联⽹项⽬中⼴泛应⽤。一般 Nginx 的上层还有一个负载均衡器,如 LVS,对 Nginx 做负载均衡。

特点:

1、Nginx 以事件驱动的⽅式编写,所以有⾮常好的性能;

2、在性能上,Nginx 占⽤很少的系统资源,能⽀持更多的并发连接,达到更⾼的访问效率;

3、在功能上,Nginx 是优秀的代理服务器和负载均衡服务器;

4、在安装配置上,Nginx 安装简单、配置灵活;

5、Nginx 支持热部署,启动速度特别快,可以在不间断服务的情况下对软件版本或配置进行升级;nginx -s reload。

在微服务的体系之下,Nginx 被越来越多的项目所采用,作为网关来使用,配合 Lua 做限流、熔断等控制。

此外,Nginx 可以用来做正向代理、反向代理;

正向代理:

1、正向代理 “代理” 的是客户端,客户端知道⽬标,⽽⽬标不知道客户端是通过 VPN 访问的;

2、由于防⽕墙的原因,我们并不能直接访问⾕歌,那么我们可以借助 VPN 来实现。

反向代理:

1、反向代理 “代理” 的是服务器端,这⼀个过程对于客户端⽽⾔是透明的;

2、当我们在外⽹访问 google 的时候,google 会进⾏⼀个转发,代理到他们内⽹去,这就是所谓的反向代理;

OpenResty

OpenResty 是⼀个基于 Nginx 与 Lua 的⾼性能 Web 平台,其内部集成了⼤量的 Lua 库、第三⽅模块。⽤于⽅便地搭建能够处理超⾼并发、扩展性极⾼的动态 Web 应⽤、Web 服务和动态⽹关;快速构造出⾜以胜任 10K 乃⾄ 1000K 以上单机并发连接的⾼性能 Web 应⽤系统。

OpenResty 的⽬标是让我们的 Web 服务直接跑在 Nginx 服务内部,充分利⽤ Nginx 的⾮阻塞 I/O 模型;不仅仅对 HTTP 客户端请求,甚⾄于对远程后端(诸如 MySQL、PostgreSQL、Memcached、Redis 等)都能进⾏⼀致的⾼性能响应。

本质上就是将 Lua 脚本嵌入到 Nginx 中,在每个 nginx 的进程中都嵌入一个 LuaJIT 虚拟机来执行 Lua 脚本;

在接收客户端请求时,通过在不同的阶段挂载不同的 Lua 脚本,实现拦截请求进行前置/后置处理;

OpenResty 实现网关功能的核心就是在 11 个步骤中挂载不同的 Lua 脚本实现功能的扩展。

特点:

轻、非常轻,Lua 脚本和 Nginx 耦合度非常低。

Zuul

Zuul 作为微服务系统的⽹关组件,是从设备和⽹站到 Netflix 流应⽤程序后端的所有请求的前⻔,其旨在实现动态路由,监控,弹性和安全性。

Zuul 的核心是由一些列的过滤器 Filter 组成,它定义了四种标准类型的过滤器,对应于请求的整个生命周期:

zuul 有两个版本:zuul1 和 zuul2,⽬前 spring cloud 只集成了 zuul1。zuul2 是 Netflix 在 2018 年 5 ⽉推出,它最⼤的特点就是⽀持异步调⽤(而 zuul1 仅⽀持同步) ,不过可惜 springcloud 并没有计划集成 zuul2,⽽且还推出 springcloud gateway 来替代 zuul1。这也标志着 zuul 已经渐渐被 Spring Cloud 抛弃,不建议使用了。

Spring Cloud Gateway

SpringCloudGateway 是由 WebFlux+Netty+Reactor 实现的响应式的 API ⽹关。

Spring Cloud Gateway 旨在为微服务架构提供⼀种简单且有效的 API 路由管理⽅式,并基于 Filter 的⽅式提供⽹关的基本功能,例如说安全认证、监控、限流等等;

Spring Cloud Gateway 定位于取代 Netflix Zuul,成为 SpringCloud ⽣态系统的新⼀代⽹关;相⽐ Zuul 来说,SpringCloudGateway 提供更优秀的性能,更强⼤的有功能。

Spring Cloud Gateway 的几个核心概念:
  1. 路由:路由是⽹关最基础的部分,路由信息由⼀个 ID、⼀个⽬的 URL、⼀组断⾔和⼀组 Filter 组成。如果断⾔路由为真,则说明请求的URL 和配置匹配。
  2. 断⾔:作为路由的匹配条件。
  3. 过滤器:过滤器 Filter 将会对请求和响应进⾏修改处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值