随着云继续成为现代企业的主要特征,人们重新开始关注确定您的工作负载以及整个组织是否已准备好在云原生环境中运行。由于其中涉及各种考虑因素,组织需要仔细分析从供应商到编排工具的所有内容。在这里,我们将深入研究其中一个考虑因素的细节:云原生 API 网关。由于我们已经在“DevOps 云原生工具格局的完整概述”中介绍了 API 网关,本文将更深入地研究它们的工作原理。
什么是 API 网关?
API 网关的确切定义很难确定;人们使用各种术语来定义其影响,例如单点入口、接口和反向代理。尽管如此,这个想法仍然是一样的——API 网关作为一个层将您的客户端和服务分开。虽然传统方法意味着客户端将他们的请求直接定向到微服务,但现在请求由网关处理,然后网关将请求传递到适当的服务。API网关作为事实上的客户端请求协调器和编排器,简化了分布式系统的实现。它对于试图从单片系统架构转向微服务的组织特别有用。
API网关有什么用?
API 网关越来越受欢迎的主要原因之一是微服务软件的使用同时增加。与独立的整体设计相反,微服务将整个应用程序划分为各种松散连接的服务。这些微服务中的每一个都是自给自足的,并且具有独特的功能。然而,正是这一重要特性激发了对 API 网关的需求。
不要误会我们的意思——微服务提供了大量的好处,因为它们使开发、部署和维护变得异常容易。但是当涉及到请求处理时,拥有多个微服务会使客户端很难快速访问特定服务。
这就是 API 网关的用武之地;通过充当反向代理,它解决了客户端问题并允许轻松访问各种微服务。使用 API 服务器,客户端只需发送一个单独的请求。
它还包含一个 HTTP 服务器,该服务器具有与每个微服务关联的路由。收到请求后,网关立即映射整个请求并识别传递请求所需的相关服务。
事实上,它甚至可以将请求参数映射到特定微服务所需的输入参数。其中一些要求输入参数验证作为处理请求的必要先决条件,API 网关可以确保此步骤不需要人工干预。
路由到此结束——API 网关的主要功能。
API 网关还可以执行哪些其他功能?
尽管 API 对现代组织应用程序的重要性怎么强调都不为过,但太多会证明是管理上的一个难题。API 网关为用户提供了大量管理功能,有助于完成安全等核心任务。这是一个广泛的功能列表:
验证
API 身份验证是一项重要的安全检查,通常在访问每个单独的微服务时都需要进行。有了 API 网关,就可以在网关本身对调用进行身份验证。
这样,即使客户端请求多个微服务访问,网关也会保证 API 调用只认证一次。这大大减少了延迟问题,并在整个应用程序中提供了一致的身份验证检查。
指标收集
开发人员长期以来一直希望在请求汇集的地方收集分析,因为这提供了处理所有请求的完美位置。有了 API 网关,您将获得一个全面的“网关”,所有流程都将不可避免地通过该网关。
利用这种分析能力可以为用户提供更深入的洞察力,并最终实现更多的控制。例如,您可以分析特定用户转发的请求数或通过网关中继到各个微服务的请求数。作为回报,您可以使用此信息来实施速率限制。这使您可以拒绝发出过多请求的用户,以免使微服务负担过重。
响应转换
访问现代应用程序的设备多种多样,从功能强大的计算机到智能手机和平板电脑——因此,每个用户都需要访问不同的信息并满足不同的要求。例如,移动用户需要的数据少于来自桌面系统的客户端请求。由于 API 网关是唯一的入口来源,它知道哪个客户端需要什么。此信息随后可用于进行内部调用,并根据不同客户的要求将数据提供给他们。
输入验证
API 网关还具备处理简单逻辑的能力。以输入验证为例,网关在将请求发送到微服务之前验证请求是否包含所有必要的数据。此外,它还会检查请求的格式和代码是否正确,以便它以准备执行状态到达服务。
负载均衡
您需要确保没有节点因请求而负担过重,以便您的应用程序继续平稳运行。API 网关可以被编程为足够智能,以平衡特定微服务中存在的不同节点之间的负载。通过监控整个负载,它可以作为一个高效的负载平衡器。
服务发现和请求调度
这是另一个特性,源于 API 网关充当客户端访问微服务的反向代理。在一个典型的过程中,它会收到一个请求并将其传递给所有需要的微服务。一旦他们用答案做出回应,网关就会在结果到达客户端之前组合这些结果。
在此过程中,网关会记录特定微服务的每个节点所用的基本响应时间——这在根据优先级对 API 调用进行分段时会派上用场。对于高优先级调用,请求可以路由到响应最快的节点。
断路器
就像传统的断路器一样,这个隐喻断路器也会关闭受影响的电路,直到问题得到解决。这是您需要知道的;在应用程序中,数据加载或由于任何其他问题导致的组件故障并不罕见。为了处理这种情况,API 网关使用“断路器”方法。
一旦达到特定的请求阈值,发生故障的组件将停止从网关接收更多数据。这不仅为分析日志和通过更新推送修复赢得了时间,还有效地关闭了整个电路,直到核心问题得到解决。
API 网关有什么好处?
如果 API 网关提供的附加功能不足以让您信服,那么让我们告诉您它们还具有其他各种好处。从长远来看,这些功能允许您将松散耦合的微服务打包到一个简洁的应用程序中。以下是 API 网关提供的好处:
更简洁的客户端代码
随着客户端和后端服务的分离,客户端不需要知道每个微服务是如何组成的。通过 API 网关处理所有请求,代码维护变得更加简单。这也不需要单独的微服务来跟踪端点或处理请求失败。这节省了时间,因为开发人员不需要在他们的应用程序中编写“逻辑”代码,从而增强消费者体验。
减少延迟
即使来自客户端应用程序的单个请求也可能需要同时调用多个微服务的 API。以亚马逊为例;一个简单的搜索可能会返回各种产品的列表、它们的库存情况和评论。如果不是 API 网关,客户端请求将多次访问每个微服务。结果是延迟显着增加,从而导致用户体验不佳。
增强的应用程序安全性
如果开发人员选择不包含 API 网关,那么他们必须让每个微服务能够对他们遇到的客户端请求进行自己的安全相关分析。对于开发人员而言,这意味着需要花费数小时的额外编码时间才能将这种复杂的决策制定技能添加到代码中。这是必要的,因为在没有单一入口点的情况下,每个微服务都必须回答以下问题:
- 请求是否被授权?
- 沟通渠道安全吗?
- 请求是否包含所有必需的参数?
- 客户端是否发出了太多请求?
回答所有这些问题不可避免地会使代码更加复杂。因此,它越复杂,出现“错误”的可能性就越大。从操作员的角度来看,复杂的代码需要增加维护和停机时间。这不仅会严重影响用户体验,还会增加不良行为者可用的总体攻击面。所有这些问题都可以通过集中的入口点来避免。API 网关确保所有身份验证和安全检查都在一个地方处理,使后端微服务不受影响,从而提供流畅的用户体验并提高安全性。
流行的 API 网关
市场上有各种开源 API 网关。以下是全球数以千计的开发人员正在使用的最受欢迎的列表:
Kong
作为最早的云原生 API 网关之一,Kong是该领域的热门平台。网关主要用 Lua 编写,由开源和专有插件增强。与列表中的其他工具类似,Kong 带有一个集成的、同一供应商的 API 管理服务——Kong 服务控制平台。
Tyk
Tyk是一个开源 API 网关,它是用 Go 开发的,允许它与用不同编码语言编写的插件兼容。Tyk 的不同之处在于他们的管理服务;该公司以两种不同的方式提供其专有的 API 管理平台——本地安装或收费的托管服务。
Ambassador
又一个 API 网关,Ambassador是 Kubernetes 原生的。它建立在充当入口控制器的 Envoy 服务器之上。如果您的微服务结构是基于 Kubernetes 集群的,那么使用 Ambassador 是一个明智的选择,因为它具有固有的集成性和高效运行 YAML 配置文件的能力。
快速网关
Express Gateway基于 Node.js,完全构建在 Express 和 Express 中间件平台上。其简单的配置过程和支持 JavaScript 插件的能力是它区别于其他网关的独特之处之一。它还可以重用现有的 Express 中间件功能以获得更大的效果。
结论
总而言之,API 网关是一个反向代理,允许将微服务作为 API 提供。这样做的最大优势在于,它通过将后端微服务暴露给客户的请求,有助于消除安全漏洞的可能性。
作为中央接口,它不仅可以让开发人员保持代码相对简单,还可以减少延迟问题。借助更具凝聚力和安全性的微服务结构,您能够为客户端提供增强的用户体验。有了广泛的可用选项,最好的 API 网关平台最终取决于您的系统架构和工作负载的性质。