为什么我们的微服务中需要网关?

简介: 为什么我们的微服务中需要网关?

玩过微服务的小伙伴对 Spring Cloud 中的的 Spring Cloud Gateway 多多少少都有一些了解,松哥之前既写过相关的文章,也录过相关的视频跟小伙伴们介绍 Spring Cloud Gateway,不过在之前的介绍中,我可能更加侧重于跟小伙伴们介绍 Spring Cloud Gateway 的用法,对于我们在微服务中为什么要使用 Spring Cloud Gateway 可能没有和大家仔细分析过,最近年前得空,我们来一起探讨一下这个话题。

说起 Spring Cloud Gateway 的使用场景,我相信很多小伙伴都能够脱口而出认证二字,确实,在网关中完成认证操作,确实是 Gateway 的重要使用场景之一,然而并不是唯一的使用场景。在微服务中使用网关的好处可太多了,今天我们就来逐一分析一下。

1. 请求路由

首先,Gateway 的第一个重要特点就是对请求进行路由,根据不同的请求头、请求参数、请求路径等,将请求路由到不同的服务上。

从这个角度来说,Spring Cloud Gateway 所扮演的角色与 Nginx 这一类的反向代理服务器类似,之前就有小伙伴问我,Spring Cloud Gateway 和 Nginx 有啥区别?能不能用 Nginx 代替 Spring Cloud Gateway?其实,你要是单纯的只看请求路由这一个功能,那么确实可以用 Nginx 代替 Spring Cloud Gateway,然而在实际开发中,我们 Spring Cloud Gateway 所承担的责任可不仅仅是请求路由转发,还有其他方面的功能(后文有介绍),其他的功能用 Nginx 做起来就有一些吃力了。

如果用 Spring Cloud Gateway 做请求路由转发,我们可以画一张简单的架构图,如下:

364f8cbf639437a88b3a0531ae2b9e1e.png

2. API 组合

网关的另一个作用就是可以实现 API 的组合。当然这个一般来说需要一些代码开发,单纯的配置一般来说是无法实现需求的。

先来说说没有网关的时候我们可能会存在什么情况。

以松哥最近在录的 TienChin 项目视频为例,我有一个活动管理服务,也就是健身房定期会做一些促销活动,促销活动往往又分为线上或者线下,线上线下又继续细分为不同的渠道,如小红书推广、抖音推广、公众号推广、线下地推等等,所以,假设我现在要做一个修改活动的功能,那么当我选中一条记录,点击修改按钮,此时,客户端至少要发送两条请求:

  1. 首先根据我选中的记录的 ID,去服务端查询这条记录当前的值。
  2. 去查询活动渠道,因为活动记录中保存的是渠道 ID,我们得去查询所有的渠道信息,然后根据渠道信息才能显示出来具体的渠道。

画一张简单的架构图,类似下面这样:

5eebb2d817e081d2a1bf85a28e5b0645.png

如上图所示,如果你是一个微服务项目,但是却没有网关,那么前端用户一个点击事件你可能需要在后台发出 N 多个操作。并且,这 N 多个操作还都属于互联网请求,小伙伴们知道,互联网请求的一个特点就是低带宽和高延迟,连着发送两个甚至多个请求,用户体验肯定不佳。

像这样的场景,如果我们有网关,就可以在网关中提供一个粗粒度的 API,这样,前端只需要发送一个请求到网关,然后又网关去发送多个请求,从不同的微服务上把数据拿回来再统一返回给前端。如下图:

a371fba6322814a954317b5a85966d69.png

可能有小伙伴会说,你这个请求还是发送了两次,不一定省时间。其实不然!网关往往和微服务处于同一个局域网之中,相比于互联网,局域网的通信延迟就要小很多了。

这是网关的第二个作用。

3. 协议切换

通过网关我们还能实现请求协议的切换。

一般来说我们暴露给外部的服务都是 RESTful API,但是,有时候考虑到服务内部的执行效率问题,我们可以在服务内容实用其他更高效的协议,通过服务网关就可以实现这个切换。

当然,这并不是必须的,只是说,当我们在微服务中使用了网关之后,如果想做请求协议的切换,就会比较容易实现。

4. 限流

微服务中的限流操作,一个比较好的限流位置就是网关了,我们可以利用 Alibaba 的 Sentinel 结合 Spring Cloud Gateway 就可以非常方便的实现限流操作。

5. 请求分析

如果我们需要统计某一个请求的细节,如执行时间、参数等信息,那么这个操作也可以在网关上来做,在网关上对请求进行详细分析。

6. 缓存

对于一些不经常变化的数据,我们可以设置缓存时间,在网关上直接进行检查,如果缓存还没失效,直接响应 304,让从客户端读取即可。

7. 认证

这个是大家比较熟悉的了。

一般来说,我们可能会有单独的认证服务,当认证请求到达网关之后,网关将之转发到相应的认证服务上去完成认证。对于非认证请求,到达网关的时候需要校验这个请求是否有进行认证,这个校验就没必要转发了,可以直接在网关上进行校验。

松哥举个简单的例子,也是我自己之前在项目中的一个实践经验,就是用户登录请求到达网关之后,网关将之转发到专门的认证服务上去(由于认证的过程往往需要操作用户数据库,所以不要在网关上做认证,转发到专门的认证服务上去做认证操作),认证成功之后,返回 JWT 字符串给前端。下一次,请求带着 JWT 字符串来到网关,可以直接在网关上校验 JWT 字符串,这个校验本身比较容易,又不需要连接数据库,所以可以在网关上完成,校验成功之后,将校验得到的用户信息放到请求头中,然后再转发请求到不同的微服务上,这样在各个微服务上,就知道请求的用户到底是谁了。

8. 记录请求日志

如果需要记录请求日志,网关也是一个好地方。

网关能干这么多事,so,想要用 Nginx 代替 Spring Cloud Gateway 显然不太现实。


相关文章
|
11天前
|
API
阿里云微服务引擎及 API 网关 2024 年 2 月产品动态
阿里云微服务引擎及 API 网关 2024 年 2 月产品动态
|
11天前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
135 0
|
1天前
|
监控 负载均衡 安全
微服务架构下的API网关设计与实践
【5月更文挑战第25天】 在现代软件工程领域,微服务架构以其灵活性、可扩展性以及容错能力受到广泛关注。作为微服务架构中的关键组件,API网关承担着请求路由、负载均衡、安全认证等重要职责。本文将深入探讨在微服务架构下如何高效地设计并实现一个API网关,包括对API网关的功能需求分析、核心组件的选择与配置、以及性能优化等方面进行详细阐述。通过对具体案例的分析,旨在为开发者和企业提供一个清晰、高效的API网关构建指南。
|
1天前
|
运维 负载均衡 API
探索微服务架构中的API网关模式
在本文中,我们将深入探讨微服务架构的关键组成部分—API网关。通过分析其设计原则、实现机制以及在实际项目中的应用,揭示API网关如何作为系统的统一入口点,提升安全性、增强可扩展性并简化客户端与服务的交互。文章不仅阐述了API网关的概念和优势,还提供了实施策略和最佳实践,帮助开发者构建高效、可靠的微服务系统。
|
6天前
|
缓存 负载均衡 算法
构建高效微服务架构:API网关的设计与实践
【5月更文挑战第20天】 在微服务架构中,API网关作为系统入口,承担着请求路由、负载均衡、权限校验等关键职责。本文将深入探讨如何设计一个高性能且易于扩展的API网关,并分享在实际项目中的实践心得。通过分析API网关的核心组件和常见挑战,我们将讨论优化策略,包括但不限于缓存机制、限流算法以及服务熔断。文章最终旨在提供一套可行的解决方案,帮助开发者构建出既健壮又灵活的后端服务架构。
|
11天前
|
SpringCloudAlibaba 负载均衡 Java
【微服务 SpringCloudAlibaba】实用篇 · Gateway服务网关
【微服务 SpringCloudAlibaba】实用篇 · Gateway服务网关
34 0
|
11天前
|
人工智能 API
阿里云微服务引擎及 API 网关 2024 年 4 月产品动态
阿里云微服务引擎及 API 网关 2024 年 4 月产品动态。
|
11天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 04 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
11天前
|
缓存 负载均衡 API
微服务架构下的API网关性能优化实践
【5月更文挑战第10天】在微服务架构中,API网关作为前端和后端服务之间的关键枢纽,其性能直接影响到整个系统的响应速度和稳定性。本文将探讨在高并发场景下,如何通过缓存策略、负载均衡、异步处理等技术手段对API网关进行性能优化,以确保用户体验和服务的可靠性。
|
11天前
|
负载均衡 Java API
构建高效微服务架构:API网关与服务熔断策略
【5月更文挑战第2天】 在微服务架构中,确保系统的高可用性与灵活性是至关重要的。本文将深入探讨如何通过实施有效的API网关和设计合理的服务熔断机制来提升分布式系统的鲁棒性。我们将分析API网关的核心职责,包括请求路由、负载均衡、认证授权以及限流控制,并讨论如何利用熔断器模式防止故障传播,维护系统的整体稳定性。文章还将介绍一些实用的技术和工具,如Netflix Zuul、Spring Cloud Gateway以及Hystrix,以帮助开发者构建一个可靠且高效的微服务环境。