点赞
评论
收藏
分享
举报
实时API的参考架构
发表于2020-08-25 14:52

浏览 1.3k

原文地址:https://www.nginx.com/blog/reference-architecture-real-time-apis/

在之前的博客中,我们展示了实时API如何在我们的生活中发挥关键作用随着公司寻求在数字时代竞争,API成为关键的IT和业务资源。设计正确的基础架构不仅可以确保您的API稳定和安全,还可以确保它们符合实时API的要求,能够在30毫秒内端到端处理API调用

API体系结构大致分为两个部分:数据平面或API网关,以及控制平面,其中包括策略和开发人员门户服务器。实时API体系结构主要取决于API网关,该网关充当处理API流量的代理。这是性能链中的关键环节。

API网关执行各种功能,包括验证API调用,将请求路由到正确的后端,应用速率限制以防止系统负担过重以及处理错误和异常。一旦决定实现实时API,API网关体系结构的主要特征是什么?您如何部署API网关?

该博客解决了这些问题,并基于我们与NGINX最大,最苛刻的客户的合作提供了实时API参考架构。我们涵盖了API管理解决方案的所有方面,但更深入地介绍了API网关,该网关负责确保满足实时性能阈值。

实时API参考架构

我们的实时API参考架构包含六个组件:

  1. API网关一种快速,轻量级的数据平面组件,用于处理API流量。这是实时体系结构中最关键的组件。
  2. API策略服务器分离的服务器,用于配置API网关,并提供API生命周期管理策略。
  3. API开发人员门户一个分离的Web服务器,它为使用API的开发人员提供了快速入门的文档。
  4. API安全服务一个单独的Web应用程序防火墙(WAF)和欺诈检测组件,提供了超出API网关内置的基本安全性机制之外的安全性。
  5. API身份服务设置身份和访问管理身份验证和授权策略并与API网关和策略服务器集成的单独服务。
  6. DevOps工具一组单独的工具,用于将API管理集成到CI / CD和开发人员管道中。

当然,有一些元素,例如API使用者,API端点以及各种基础结构组件,例如路由器,交换机,VM,容器等。这些都包含在需要的参考体系结构中,但是我们不对其进行详细讨论,因为它们被认为是企业中的通用基础结构。相反,我们将重点放在创建全面的实时API体系结构所需的这六个组件上。

图1.解耦的架构将数据平面(API网关)与控制平面隔离,从而消除了API调用处理的管理开销
图2.运行时实时API的参考体系结构:负载均衡器前面并受WAF保护的API网关集群

API网关

当部署在微服务架构中时,API网关的功能包括请求路由,身份验证,TLS终止,速率限制和服务发现。为了确保高可用性,需要部署API网关集群来管理每个公开API的应用程序的流量。为了有效分配API流量,在群集的前面部署了一个负载平衡器。负载平衡器根据位置(客户端应用程序附近)或处理API的能力来选择网关。然后,网关将请求转发到后端。为了获得最佳性能,请实施下面的Real-Time API网关特征和体系结构指南详细介绍的最佳做法

API策略服务器

这是控制平面,允许开发人员和DevOps团队定义,发布和保护API,并允许IT Operations监视和分析API。在这里,您可以配置到后端服务的请求路由,以及细粒度的访问控制策略,这些策略指定已发布的API所允许的内容(例如,只读与读写)以及允许使用的用户或客户端应用的种类资源。

策略服务器还使用需要公开使用的所有API配置API网关。为了实现实时性能,必须将该组件与中介API流量的API网关数据平面完全分离(请参见图2)。如果数据平面依赖于策略服务器进行身份验证,速率限制并将每个API调用路由到适当的后端,则由API使用者发起的API调用会遍历此控制平面(在某些情况下是关联数据库),从而导致额外延迟由于额外的开销。

API开发人员门户

该组件使使用您的API的开发人员能够高效地使用。开发人员门户(或dev门户)提供所有已发布API的目录,每个API的文档以及示例代码。为了提高性能和可用性,开发人员门户与控制平面分离,并分别托管在其自己的Web服务器上。分布式开发人员门户使多个实例可以位于不同的云,地理区域或可用性区域中。这可以提高开发人员访问它的性能,但是由于它已与数据平面分离,因此不会影响API调用处理的效率。

API安全服务

API安全通常需要使用高级Web应用程序防火墙(WAF)来检测各种攻击。它必须提供高度可信的签名,并能够防止由于JSON格式错误,空请求或不符合gRPC协议的请求而导致的破坏。它需要支持高级API保护,包括路径强制,方法强制,数据类型验证和完整模式验证。该组件需要同时保护网关群集和负载平衡器。

许多组织还部署了API欺诈检测,这需要更深入地了解API调用的逻辑,以查看它是否是恶意的或异常的。欺诈检测通常是一个单独的功能,但可以绑定到API网关或WAF层中以进行实施。

重要的是要注意,API安全性几乎不可避免地会引入延迟,这可能导致API处理超过30ms实时API性能阈值。我们鼓励组织确定API安全性或绝对性能是否更为重要。我们在参考体系结构中包括了API安全性,以说明它与可能不提供特定于API的保护的边缘或外围安全性有何不同。

API身份服务

该组件提供访问和授权策略,以保护API并保护后端资源。建议的最佳做法是与领先的身份提供商(例如OktaPing Identity)集成,以确保对API的安全访问。这些解决方案使您能够创建和管理访问策略,以区别于最终用户和客户端应用程序属性。

就本参考体系结构而言,我们假设此类身份服务已经到位,并且仅出于整体API体系结构的完整性而提及它们。

DevOps工具

必须提供声明性的API接口以完成API生命周期管理的所有方面–创建,发布,网关配置和监视。这可以实现API创建和网关配置更改的自动化。通过与自动化平台(如Ansible)和CI / CD工具箱(如Jenkins)无缝集成,可以加快API的发布速度。

尽管这种自动化形式本身不会影响API调用处理性能,但对于确保可以在开发过程中快速进行更改至关重要。如果发生会影响性能的问题(例如DDoS攻击或API客户端配置错误),则CI / CD集成可确保您可以快速解决问题并重新配置API网关,以将性能恢复到可接受的水平。

实时API网关特征和体系结构准则

NGINX与金融服务,零售,娱乐和软件行业中的一些最大的组织合作,以构建其API架构。这些客户已扩展到每月处理数千亿次API调用,所有这些调用的延迟都少于30ms。通过与这些客户的合作,我们总结了以下六个API网关最佳实践,这些最佳实践是我们实时API参考体系结构的基础。

部署高可用性API网关

为了确保快速响应,最重要的是API网关必须处于运行状态。您必须使用一组API网关来提高可用性。两个或多个API网关的集群可提高API的可靠性和弹性。必须有一种机制在所有网关之间共享操作状态(例如速率限制),以便可以以一致的方式应用有效的控制。

在API网关进行身份验证但未授权

身份验证是验证用户或呼叫实体是否是其声称的身份的过程。授权是确定授予用户哪些特权或访问级别的过程。

授权需要额外的处理(通常使用JSON Web令牌(JWT)),以确定客户端是否有权访问特定资源。例如,一个电子商务应用程序可能向所有客户授予对产品和价格信息的只读访问权,但仅允许对某些用户进行读写访问。由于这种粒度,授权最好由处理API调用本身的后端服务执行,因为它具有有关请求的必要上下文。通过将授权委派给后端的业务逻辑层,网关不必执行查找,因此响应时间非常快。API网关当然可以执行此功能,但是您可能会牺牲实时性能。

启用动态身份验证

网关中的预配置身份验证信息(无论使用API密钥还是JWT),可以最大程度地减少运行时的额外查找。因此,认证几乎是瞬时的。

使用断路器快速失败

实施断路器可防止级联故障。让我举例说明。假设一个API调用是由包含几个微服务的后端处理的。微服务之一,微服务A,执行数据库查找。当数据库查找失败时,微服务A需要很长时间才能返回错误。这不仅会影响当前API调用的API响应时间,还会影响后续API调用的时间。

断路器解决了这个问题。您设置了在指定时间内可能发生的故障数量的限制。当超过阈值时,电路跳闸,所有其他呼叫立即导致错误。没有客户端应用程序或用户由于资源耗尽而挂起。

不要在API网关层进行转换

数据转换,例如将XML格式的请求有效载荷转换为JSON,往往需要大量的计算。将此工作分配给另一个服务。在网关执行转换会大大增加API调用的延迟。

如果可能,使用gRPC

gRPC是Google推出的现代开源远程过程调用框架。由于其广泛的语言支持和简单的设计,它越来越受欢迎gRPC依赖协议缓冲区根据Google的说法,它是“语言中立,平台中立,可扩展的用于序列化结构化数据的机制”。由于gRPC使用HTTP / 2作为其传输协议,因此它会自动继承HTTP / 2的所有优点,例如数据压缩和TCP连接上的多路复用请求。复用允许客户端和服务器通过单个TCP连接并行发送多个请求和响应。HTTP / 2还支持服务器推送,它允许服务器抢先将资源推送到客户端,并预期客户端可能很快会请求它们。这样可以减少往返延迟,因为即使在请求资源之前也可以发送资源。所有这些功能可加快对客户端应用程序的响应速度并提高网络利用率。

NGINX如何提供帮助?

NGINX Plus专为实时交付API而设计。它支持:

高性能的精神也是NGINX API管理解决方案的一项定义功能。与传统的API管理解决方案不同,数据平面(NGINX Plus作为API网关)对控制平面(NGINX Controller API管理模块没有运行时依赖性紧密耦合的控制和数据平面会增加大量延迟,因为API调用必须遍历数据库,模块和脚本。将数据和控制平面分离,通过减少服务API调用的平均响应时间,可以降低复杂性并最大化性能。

API网关和负载平衡器可以通过NGINX App Protect保护  ,这是一种DevOps友好的WAF,可提供企业级安全性。NGINX Plus是一个多合一的负载平衡器,反向代理和API网关,可确保高可用性和高性能,同时降低复杂性和工具蔓延。

图3. NGINX API管理部署的示意图。在这种情况下,NGINX Controller部署在公共云中。NGINX API网关和开发人员门户部署在内部。NGINX控制器和NGINX Plus作为API网关的可移植性最大程度地提高了灵活性。请参考图2以了解在运行时如何处理API调用。


已修改于2023-03-09 02:07
创作不易,留下一份鼓励
阿尔巴

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
阿尔巴
这家伙很懒还未留下介绍~
12
文章
10
问答
11
粉丝
相关文章