当前位置: 首页 > news >正文

什么是API网关(API Gateway)?

1. 什么是API网关(API Gateway)?

         在微服务体系结构中,客户端可能与多个前端服务进行交互。 

        API 网关位于客户端与服务之间。 它充当反向代理,将来自客户端的请求路由到服务。 它还可以执行各种横切任务,例如身份验证、SSL 终止和速率限制。 如果未部署网关,则客户端必须直接向前端服务发送请求。 但是,直接向客户端公开服务会造成一些潜在问题:

  • 可能需要编写复杂的客户端代码。 客户端必须跟踪多个终结点,并以弹性方式处理故障。
  • 会在客户端与后端之间造成耦合。 客户端需要知道如何分解各个服务。 因此,客户端维护和服务重构会变得更困难。
  • 单个操作可能需要调用多个服务。 这可能导致客户端和服务器之间的多次网络往返,从而显著增加了延迟时间。
  • 每个面向公众的服务必须处理身份验证、SSL 和客户端速率限制等问题。
  • 服务必须公开客户端友好的协议,例如 HTTP 或 WebSocket。 这就限制了通信协议的选择。
  • 包含公共终结点的服务是潜在的受攻击面,必须得到强化。

        网关可以通过将客户端与服务分开,来帮助解决这些问题。 网关可以执行许多不同的功能,但我们不一定需要所有这些功能。 这些功能可划分到以下设计模式:

  • 网关路由: 使用网关作为反向代理,通过第 7 层路由将请求路由到一个或多个后端服务。 网关为客户端提供单一终结点,可帮助将客户端与服务分开。
  • 网关聚合:使用网关可将多个单独请求聚合成一个请求。 当单个操作需要调用多个后端服务时,可以应用此模式。 客户端将一个请求发送到网关。 网关会将请求分派到不同的后端系统,然后聚合结果并将其发回给客户端。 这有助于减少客户端与后端之间的通信频率。
  • 网关卸载:使用网关可将单个服务的功能卸载到网关,尤其适合用于解决横切问题。 可能有效的做法是将这些功能整合到一个位置,而不是让每个服务负责实现这些功能。 对于需要专业技能才能正确实现的功能(例如身份验证和授权),这种做法尤其有效。

        下面是可卸载到网关的一些功能示例:

  • SSL 终止
  • Authentication
  • IP 允许列表或阻止列表
  • 客户端速率限制(限制)
  • 日志记录和监视
  • 响应缓存
  • Web 应用程序防火墙
  • GZIP 压缩
  • 为静态内容提供服务

2.选择网关技术

        现在的一些网关技术:traefix、Nginx、OpenResty、Kong、Zuul、Spring Cloud Gateway等。下面主要介绍traefix、Nginx、OpenResty三种网关技术。

2.1traefix

        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镜像;
  • 监听后台变化进而自动化应用新的配置文件设置;
  • 配置文件热更新,无需重启进程;
  • 后端断路器、负载均衡、容错机制;
  • 清爽的前端页面,可监控服务指标。

 2.2Nginx

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

        重要特性:

  1. Nginx以事件驱动的⽅式编写,所以有⾮常好的性能;
  2. 在性能上,Nginx占⽤很少的系统资源,能⽀持更多的并发连接,达到更⾼的访问效率;
  3. 在功能上,Nginx是优秀的代理服务器和负载均衡服务器;
  4. 在安装配置上,Nginx安装简单、配置灵活;
  5. Nginx支持热部署,启动速度特别快,可以在不间断服务的情况下对软件版本或配置进行升级;nginx -s reload。

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

 2.3OpenResty

        OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

        OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

        OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

相关文章:

什么是API网关(API Gateway)?

1. 什么是API网关(API Gateway)? 在微服务体系结构中,客户端可能与多个前端服务进行交互。 API 网关位于客户端与服务之间。 它充当反向代理,将来自客户端的请求路由到服务。 它还可以执行各种横切任务,例…...

对话:LLC磁集成能否成为充电桩模块电源常态产品?

编者按:在终端需求疲软的影响下,前两年火热的新能源汽车、光伏、储能等新能源领域也掀起了价格战,储能已正式进入0.5元时代,新能源汽车领域价格战更是一轮接一轮,成本管控成为2024年企业绕不开的话题。 接下来我们将围…...

基于SSM的二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的二手物品交易管理系统7拥有两种角色 管理员:用户管理、分类管理、商品管理、订单管理、系统管理等 用户:登录注册、充值、收货、评价、收藏、购物车、订…...

视觉语言模型中的人脸社会感知

本文研究了视觉语言模型CLIP在处理人脸图像时的社会感知能力及其潜在偏见。研究者们构建了一个名为CausalFace的合成人脸数据集,通过系统地独立变化年龄、性别、人种、面部表情、照明和姿势等六个维度来评估模型的社会感知。他们发现,尽管CLIP是在多样化…...

JAVA学习-练习试用Java实现“最小覆盖子串”

问题: 给定一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。 示例 1&…...

关于axios同步获取数据的问题

axios同步获取数据 Axios介绍问题代码修改 总结 Axios介绍 Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 X…...

java-在ANTLR中,如何从java文件中提取类名和方法名0.1.8

java-在ANTLR中,如何从java文件中提取类名和方法名0.1.0 目标java源文件java的g4文件生成antlr代码最终代码调测结果阶段性总结 2024年9月12日11:16:01----0.1.8 目标 从一个java文件中提取出类名和方法名 java源文件 文件名是main.java,具体内容如下…...

十大护眼灯钢琴灯品牌是智商税吗?十大钢琴灯品牌排行榜

十大护眼灯钢琴灯品牌是智商税吗?不良的光线不仅会使得孩子在读写用眼时眼睛不舒服,还会引起视觉疲劳伤眼视力健康,这个时候要能有一台可靠的护眼灯钢琴灯,那真是再好不过了。但是市面上护眼灯钢琴灯的种类太多,盲目挑…...

搜维尔科技:CyberGlove将实时捕捉运动信号和触觉反馈,将其重新定位到人形机器人进行驱动

CyberGlove将实时捕捉运动信号和触觉反馈,然后将其重新定位到人形机器人上。 这款18个传感器(有18节点和22节点两个型号,22节点早期用于美国军事方面,支持无线通信、蓝牙、WiFi、射频)数据手套的每个手指上有两个弯曲…...

数据结构:堆的算法

目录 一堆的向上调整算法二堆的向下调整算法三堆的应用:堆排序四TOPK问题 一堆的向上调整算法 我们在堆中插入一个数据一般实在堆的最后插入然后可以一步一步与上层结点(父结点进行比较),继而进行交换,完成二叉树的结构&#xff0…...

python画图|3D直方图基础教程

前述已经完成了直方图和3D图的基本学习,链接如下: 直方图:python画图|水平直方图绘制-CSDN博客 3D图:python画图|水平直方图绘制-CSDN博客 现在我们尝试把二者结合,画3D直方图。 【1】官网教程 首先,依…...

C语言中的函数,实参,形参,递归

1:什么是函数 2:定义带形式参数的函数和带实际参数的函数 3:递归 --------------------------------------------------------------------------------------------------------------------------------- 1:在 C 语言中&…...

ICM20948 DMP代码详解(15)

接前一篇文章:ICM20948 DMP代码详解(14) 上一回开始对icm20948_sensor_setup函数中第3段代码即inv_icm20948_initialize函数进行解析。为了便于理解和回顾,再次贴出其源码,在EMD-Core\sources\Invn\Devices\Drivers\IC…...

NC 和为K的连续子数组

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 给定一个无序…...

JS设计模式之装饰者模式:优雅的给对象增添“魔法”

引言 在前端开发中,我们经常会遇到需要在不修改已有代码的基础上给对象添加新的行为或功能的情况。而传统的继承方式并不适合这种需求,因为继承会导致类的数量急剧增加,且每一个子类都会固定地实现一种特定的功能扩展。 装饰者模式则提供了…...

准备好了吗?JAVA从业AI开发的学习路线详解

作为一个拥有扎实 Java 基础的人,想要涉足人工智能(AI)应用开发,你已经在编程能力方面打下了很好的基础。Java 是一种通用的、强类型的语言,非常适合于开发高性能的应用程序,尤其是在后端服务和大规模分布式…...

神经网络通俗理解学习笔记(1)

神经网络通俗理解学习笔记(1) 神经网络原理激活函数前向传播和反向传播多层感知机代码实现加载数据网络结构损失函数优化器训练测试保存 回归问题一元线性回归多元线性回归多项式回归 线性回归代码实现数据生成设置超参数初始化参数可视化Pytorch模型实现…...

有n个人,他们需要分配m元钱(m>n),每个人至少分到1元钱,且每个人分到的钱数必须是整数。请问有多少种分配方案?

分配方案 描述 有n个人,他们需要分配m元钱(m>n),每个人至少分到1元钱,且每个人分到的钱数必须是整数。请问有多少种分配方案? 输入 一行,两个整数,分别是人数n与钱数m,用一个空格隔开。 输出 一行&am…...

光耦——创新引擎 助推中国经济高质量发展

近年来,中国经济正处于转型升级的关键时期,高质量发展成为经济发展的重要目标。在这一伟大征程中,光耦作为一种关键性的电子元器件,正在发挥着重要的作用,助力中国经济迈向更加光明的未来。 光耦概念及工作原理 ▲光耦…...

Go 中 RPC 的使用教程

前言 RPC(Remote Procedure Call)是一种允许程序调用远程服务器上函数的方法,调用过程对于开发者来说像是调用本地函数一样方便。Go 语言自带了强大的 net/rpc 库,能够让开发者轻松实现基于 Go 的 RPC 服务。本文将介绍 Go 中 RP…...

vscode里如何用git

打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

EtherNet/IP转DeviceNet协议网关详解

一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则&#xf…...