您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

什么是API网关?

时间:2023-07-30 14:06:02  来源:微信公众号  作者:猿java

API 网关是什么?它有什么作用?为什么我们需要它?今天我们就来一起聊一聊。

一、定义 

在维基百科中,网关的定义是这样的:

在计算机网络中,网关(英语:Gateway)是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。

从定义可以看出,网关也是一组服务器,它位于客户端和服务器之间,是客户端请求进入服务器的唯一入口,如下图,API 网关提供 几个重要的功能:

  • 身份验证和安全策略实施;

  • 负载均衡和断路;

  • 协议转换和服务发现;

  • 监控、日志记录、分析和计费;

  • 缓存;

二、典型流程分析

下面我们通过客户端向服务器发起一个HTTP请求这个经典的流程来讲解API网关及其重要的功能。

第一步:客户端向 API 网关发送请求

客户端向服务器发起一个请求,该请求通常是基于 HTTP协议,它可以是 REST、GraphQL 或其他一些更高级别的抽象。如下图:

 

第二步:API 网关验证 HTTP 请求

API网关收到客户端的请求后,会对 HTTP请求中的参数等进行校验,如下图:

 

第三步:IP 黑白名单校验

为了安全,可以在API网关设置IP黑白单,标志允许和不允许访问服务器的IP,API 网关根据 IP黑白列表来允许和拒绝调用者的IP地址。如下图:

同时,API网关还可以针对IP 地址和 HTTP标头等属性执行基本的速率限制检查。例如,它可以拒绝来自超过一定速率的 IP地址的请求。如下图:

 

第四步:身份验证和授权

API 网关将 HTTP请求传递给身份提供商以进行身份验证和授权。API 网关从提供商处接收经过身份验证的会话,其中包含允许请求执行的操作范围。如下图:

认证是验证用户或客户端身份的过程,用于确认一个实体是否为其所声称的那个实体。在API的上下文中,这意味着确保请求方是合法的用户或客户端,并且有权访问所请求的资源或服务。

常见的认证方式包括:

  • 基本认证(Basic Authentication):客户端在请求头中使用Base64编码的用户名和密码进行认证。虽然简单易用,但不是最安全的认证方法,因为凭据会以明文形式在请求中传输,容易被拦截和解码。

  • 令牌认证(Token Authentication):客户端在请求头中使用特定的令牌(Token)进行认证。令牌通常由身份验证后的服务颁发给客户端,有效期有限,并且在每次请求中传递。相对于基本认证,令牌认证更安全,因为令牌通常不包含敏感信息,且可以通过HTTPS加密进行传输。

  • OAuth认证:OAuth是一种用于授权的开放标准。它允许用户授权第三方应用访问他们存储在另一个服务提供者上的资源,而无需提供他们的登录凭据。OAuth通常用于允许用户通过第三方身份验证进行访问。

授权是在认证成功后,决定用户或客户端是否有权访问特定资源或执行特定操作的过程。它定义了用户在系统中的权限和角色,并根据这些权限来限制对资源的访问。

常见的授权方式包括:

  • 角色-Based授权(Role-Based Authorization):在角色-Based授权中,用户被分配到不同的角色,每个角色有不同的权限。例如,管理员角色可能有权访问所有资源,而普通用户角色可能只有限制的权限。

  • 资源-Based授权(Resource-Based Authorization):在资源-Based授权中,访问权限是直接授予特定资源的,而不是基于角色。每个资源都可以定义其自己的权限规则,决定哪些用户或角色可以访问它。

  • 访问令牌(Access Token):在OAuth认证中,访问令牌是用于授权的重要组成部分。访问令牌包含有关用户或客户端的授权信息,以及所被授权访问的资源和权限。

综合来说,认证用于确认用户或客户端的身份,而授权用于确定用户或客户端是否有权访问特定资源或执行特定操作。这两个步骤共同确保只有合法且有权访问的用户或客户端可以使用API,并保护系统免受未经授权的访问。在API网关中,认证和授权是非常重要的功能,因为它们直接影响到整个系统的安全性和数据的保护。

第五步:流量控制和限流

客户端请求的身份验证通过后,API网关可以做更高级别的流量控制和限流。如下图:

 

流量控制和限流是在API网关中用于管理和控制请求流量的重要概念。它们有助于维护后端服务的稳定性,防止过载,并提供更好的性能和可靠性。下面详细解释这两个概念:

流量控制(Rate Limiting)是指对请求的速率进行控制,以限制客户端对API的请求频率。这个过程可以确保后端服务不会受到过多请求的压力,避免服务器资源过度消耗,导致系统崩溃或响应缓慢。常见的流量控制方法包括:

  • 固定窗口计数器(Fixed Window Counter):在固定时间窗口内(例如每分钟),对每个客户端或API密钥的请求计数。超过预设的请求数量限制时,拒绝额外的请求或延迟响应。

  • 滑动窗口计数器(Sliding Window Counter):类似于固定窗口计数器,但窗口是滑动的,允许更灵活地控制请求速率。

  • 令牌桶算法(Token Bucket Algorithm):通过将令牌存放在桶中来控制请求速率。每个令牌代表一个请求,桶有一个固定容量。每当有请求时,一个令牌将被消耗,当桶中没有令牌时,则限制进一步的请求。

限流(Rate Limiting)是指在特定时间段内,对请求的数量或速率进行限制,防止请求超出系统的处理能力。与流量控制不同,限流不会拒绝额外的请求,而是将多余的请求暂时放置在队列中,等待后续处理。常见的限流方法包括:

  • 漏桶算法(Leaky Bucket Algorithm):漏桶算法维护一个固定容量的桶,所有的请求都被放入这个桶中。然后,请求按照固定的速率从桶中流出。如果请求过多,超过桶的容量,那么多余的请求将会被缓存或丢弃。

  • 令牌桶算法(Token Bucket Algorithm):除了作为流量控制的方法,令牌桶算法也可以用于限流。与流量控制类似,多余的请求将被放置在桶中等待处理。

流量控制和限流是保护后端服务免受过多请求的有效手段。通过合理设置请求速率限制,可以平衡客户端和服务端的交互,确保服务的可用性和稳定性。在API网关中,流量控制和限流通常与认证、授权和其他安全措施一起使用,共同构成了一个安全、高效的API管理解决方案。

第六步:匹配后端服务器

当HTTP验证通过之后,API 网关通过路径匹配找到适当的后端服务来处理请求。如下图:

第七步:动态路由

匹配到对应到服务器之后,则需要将请求动态路由到任意一台匹配到的服务器。如下图:

第8步:协议转换

因为有些公司在使用微服务,微服务间使用了 RPC协议,所以在API网关,需要把HTTP协议转换成对应的RPC协议。如下图:

当后端服务处理完请求后会将响应返回给 API网关,网关会将响应转换回HTTP协议,并将响应返回给客户端。API网关还 提供其他关键服务。例如,API网关应跟踪错误,提供断路功能以防止服务过载。API 网关还应该提供日志记录、监控和分析服务,以实现操作可观察性。

监视(Monitoring)和日志记录(Logging)是在API网关和系统中实现可观察性和故障排查的关键组成部分。它们帮助开发人员和系统管理员实时跟踪API的使用情况、性能指标和错误信息,从而更好地了解系统的健康状况,快速发现并解决问题。下面详细解释这两个概念:

监视(Monitoring)是指对API网关和系统中的各种指标和性能数据进行实时收集、分析和展示的过程。通过监视,我们可以了解系统的运行状况、负载情况以及资源使用情况,以便及时采取措施预防或解决潜在的问题。常见的监视指标包括:

  • 请求量和响应时间:跟踪API网关收到的请求数量以及处理请求所花费的时间。

  • 错误率:记录API网关处理请求时发生错误的次数,包括HTTP错误码和自定义错误。

  • 系统资源使用率:监控CPU、内存、磁盘和网络的使用情况,以确保系统资源充足且没有资源瓶颈。

  • 请求队列长度:跟踪等待处理的请求队列的长度,以防止请求堆积导致性能下降。

  • 流量趋势:了解API的请求流量趋势,帮助预测系统的负载情况。

监视可以通过各种监控工具和服务实现,例如Prometheus、Grafana、DataDog等。监视的结果可以以图表、仪表板或警报的形式展示,让开发人员和运维团队能够实时了解系统的状态,做出相应的优化和调整。

日志记录(Logging)是指在API网关和系统中记录关键事件、状态和错误信息的过程。日志记录是一种用于跟踪和调试的重要工具,可以在出现问题时提供有价值的信息,帮助开发人员快速定位问题并进行故障排查。常见的日志记录内容包括:

  • 请求和响应日志:记录API网关收到的每个请求以及对应的响应,包括请求头、请求体、响应码、响应内容等。

  • 错误日志:记录API网关处理请求时发生的错误,包括异常、HTTP错误码等。

  • 安全日志:记录与安全相关的事件,如认证失败、授权拒绝等。

  • 性能日志:记录请求的处理时间、资源使用情况等性能指标。

  • 跟踪日志:在多个微服务或后端服务之间,记录请求的追踪信息,帮助跟踪请求的路径和处理过程。

日志可以存储在本地文件系统、数据库中,也可以通过日志聚合工具(如ELK Stack:Elasticsearch、Logstash、Kibana)进行集中管理和分析。日志记录不仅在故障排查时有用,还可以帮助分析用户行为、监控安全风险等。

综合来说,监视和日志记录是在API网关和系统中实现可观察性和故障排查的重要手段。通过监视和日志记录,我们可以及时发现潜在的问题,优化系统性能,并提供更好的用户体验。

三、总结 

本文通过分析客户端向服务器发送一个HTTP请求的经典流程,讲解了网关及其主要作用,因为每个公司的业务不一样,所以上述过程也会有差异,另外,因为每个公司基础服务的完善程度不一样,所以对网关的实现不一样。

比如:有些小公司因为业务流量小,直接使用了Nginx充当了网关,然后购买了一些云安全服务,而有些业务体量大的公司,需要单独开发API网关然后集群部署。

总之,网关就是后端服务器的一座保护伞,它对于来自客户端的请求,起到了屏障作用。



Tags:API网关   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
什么是API网关?
API 网关是什么?它有什么作用?为什么我们需要它?今天我们就来一起聊一聊。一、定义 在维基百科中,网关的定义是这样的:在计算机网络中,网关(英语:Gateway)是转发其他服务器通信数据的...【详细内容】
2023-07-30  Search: API网关  点击:(110)  评论:(0)  加入收藏
微服务为什么要用到API网关?
什么是微服务微服务架构(通常简称为微服务)是指开发应用所用的一种架构形式。通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。在处理一个用户请...【详细内容】
2023-04-13  Search: API网关  点击:(155)  评论:(0)  加入收藏
10大亮点!带你多角度了解云原生API网关Apache APISIX 3.0预览版
API 网关作为一个存在时间比较长的基础组件,一直致力于提供业务层面的限流限速、身份认证、可观测性等多方面的功能。随着服务端系统的迭代,越来越多的服务开始从裸金属迁移到...【详细内容】
2022-09-29  Search: API网关  点击:(713)  评论:(0)  加入收藏
Java原生API网关ShenYu
微服务网关 数据交互示意图 数据同步 admin与网关进行数据同步。数据同步是指在 shenyu-admin 后台操作数据以后,使用何种策略将数据同步到 Apache ShenYu 网关。Apache Shen...【详细内容】
2022-09-09  Search: API网关  点击:(862)  评论:(0)  加入收藏
API网关的权限验证实践
概述公司、个人开发的系统上线后,系统中 API 暴露到网络上会存在一定的安全风险,比如:爬虫、恶意访问、错误访问等。API没有安全性,用户可以任意注册即可无限次访问和调用API,且...【详细内容】
2022-04-26  Search: API网关  点击:(291)  评论:(0)  加入收藏
这样讲API网关,你应该能明白了吧
随着互联网技术的飞速发展,各类线上业务蓬勃发展,软件系统如雨后春笋般呈现在我们面前。 图片来自 Pexels为了提高系统的性能和可靠性,将应用服务进行拆分微服务化。作为系统入...【详细内容】
2021-04-07  Search: API网关  点击:(356)  评论:(0)  加入收藏
对API网关注册和接入的接口安全管理总结
今天谈下对API网关接入的接口服务进行安全管理方面的内容。在原来谈Kong网关的时候,曾经谈到Kong网关和安全相关的插件能力,其中包括了身份认证插件:Kong提供了Basic Authenti...【详细内容】
2020-12-30  Search: API网关  点击:(271)  评论:(0)  加入收藏
通过API网关实现微服务管控-限流,熔断和降级
今天准备谈下基于API网关来实现微服务治理管控中的服务限流,熔断和降级方面的内容。在前面谈微服务架构的时候也谈到过类似通过Hystrix,Sentinel来是服务限流熔断。包括也不...【详细内容】
2020-11-19  Search: API网关  点击:(444)  评论:(0)  加入收藏
给大家分享一款高性能api网关
在当前的互联网环境下,尤其是移动互联网的时代,用户通过手机APP可访问很多应用,作为应用的服务部分面对日益增多的客户,为了保证用户功能和体验,必然需要采用分布式等架构,以确保...【详细内容】
2020-11-06  Search: API网关  点击:(323)  评论:(0)  加入收藏
基于Apache APISIX的全流量API网关统筹集群流量
本文将从云原生时代的机遇和挑战说起,介绍一个全新的开源高性能云原生 API 网关——Apache APISIX,探讨如何解决云原生时代 API 网关所面临的一些痛点,最后介绍该开...【详细内容】
2020-10-13  Search: API网关  点击:(588)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条