KarthikKrishnaswamy
职位:NGINX产品营销总监
公司:F5
前言在之前的博文中,我们介绍了实时API在我们日常生活中的重要作用。随着企业寻求提升在数字时代的竞争力,API成为了重要的IT和业务资源。构建正确的底层基础架构不仅可以确保API稳定安全,而且还可以确保这些API满足实时API标准,即能够在30毫秒(ms)内端到端处理API调用。
API架构大体上可分为两个部分:数据平面(即API网关)和控制平面(包括策略和开发人员门户服务器)。实时API架构主要取决于API网关。作为处理API流量的代理,API网关是性能链中的关键一环。
API网关可执行各种功能,包括验证API调用、将请求路由到正确的后端、应用速率限制以防止系统超载,以及处理错误和异常。决定实施实时API后,您是否考虑过API网关架构的主要特征?以及您如何部署API网关?
本文将为您解答这些问题,并提供一个我们从与NGINX的几家大型高需求客户的合作经验中提炼出来的实时API参考架构。我们将对API管理解决方案进行全面描述,并深入介绍负责确保满足实时性能阈值的API网关。
实时API参考架构我们的实时API参考架构主要包含六个组件:
API网关
一个快速的轻量级数据平面组件,用于处理API流量。这是实时架构中最关键的一个组件。
API策略服务器
一个解耦的服务器,用于配置API网关以及提供API生命周期管理策略。
API开发人员门户
一个解耦的Web服务器,为使用API的开发人员提供快速入门文档。
API安全服务
一个独立的Web应用防火墙(WAF)和欺诈检测组件,在API网关内置的基本安全机制之上增添了一层防护。
API身份服务
一项独立的服务,为身份和访问管理设置身份验证和授权策略,并与API网关和策略服务器相集成。
DevOps工具
一个独立的工具集,用于将API管理集成到CI/CD和开发人员流水线中。
当然,实时API参考架构还可能包含API用户、API端点以及路由器、交换机、虚拟机和容器等各种基础架构组件。这些都按需包含在参考架构中,作为企业中的常见基础架构,本文对它们不再赘述。我们将重点介绍对创建全面实时API架构来说必不可少的上述六个组件。
图1.解耦架构将数据平面(API网关)与控制平面隔离开来,消除了API调用处理产生的管理开销
图2.运行时实时API参考架构:API网关集群,在前端部署了一个负载均衡器,由WAF提供安全保护。
01API网关当部署在微服务架构中时,API网关的功能包括请求路由、身份验证、TLS终止、速率限制和服务发现。为确保高可用性,需要部署API网关集群来管理每个开放API的应用的流量。为有效分配API流量,需要在集群的前端部署一个负载均衡器。负载均衡器根据位置(接近客户端应用)或处理API的能力来选择API网关。API网关会将请求转发给后端。为了获得最佳性能,请遵循下方“实时API网关特征和架构指南”一节中详细介绍的最佳实践。
02API策略服务器这是控制平面,允许开发人员和DevOps团队定义、发布和保护API,并允许IT运营团队监控和分析API。API策略服务器可用于配置到后端服务的请求路由,并配置细粒度的访问控制策略,以指定用户对已发布API的访问权限(例如只读和读写)以及允许使用资源的用户或客户端应用类型。
此外,API策略服务器还可用于配置API网关以及所有需要被暴露出来使用的API。为了获得实时性能,该组件必须与处理API流量的API网关数据平面完全分离(请参见图2)。如果数据平面依赖策略服务器进行身份验证、速率限制以及将每个API调用路由到相应的后端,那么由API用户发起的API调用将需要经过此控制平面(在某些情况下还会经过相关的数据库),这会因额外开销而导致延迟增加。
03API开发人员门户该组件可帮助使用您API的开发人员快速入门。开发人员门户(或“开发门户”)提供了所有已发布的API的目录、每个API的文档以及示例代码。为了提高性能和可用性,开发人员门户与控制平面分离开来,并分别托管在各自的Web服务器上。分布式开发人员门户允许多个实例跨不同云、地理位置或可用区域分布。这可以提高开发人员的访问能力,而且由于它已与数据平面解耦,因此不会影响API调用的处理效率。
04API安全服务API的安全通常需要使用高级Web应用防火墙(WAF)来检测各种攻击。它必须提供高可信签名,并且能够避免由于JSON格式错误、空请求或不符合gRPC协议的请求而出现的漏洞。它需要支持高级API安全防护,包括路径执行、方法执行、数据类型验证和完整模式验证。该组件需要为网关集群和负载均衡器提供保护。
许多组织还部署了API欺诈检测组件,以更深入地了解API调用的逻辑,从而确定其是否为恶意或异常调用。欺诈检测通常是一项独立功能,但也可以绑定到API网关或WAF层中进行实施。
请务必注意,API安全防护会难以避免地引入延迟,这可能会导致API处理用时超过实时API性能阈值30毫秒。在API的安全性与绝对性能之间,我们建议组织评估哪个更为重要。我们之所以在该参考架构中引入API安全防护,是为了提供边缘或外围安全设备可能无法提供的API特定防护。
05API身份服务该组件提供访问和授权策略来保护API和后端资源。我们建议的最佳实践是集成领先的身份管理提供商(例如Okta和PingIdentity)的产品,以确保对API的安全访问。这些解决方案支持您创建和管理访问策略,根据最终用户和客户端应用属性来决定开放或阻断访问。
就本参考架构而言,我们的假设是此类身份服务已经被部署好了,这里只是为了全面介绍API架构才提及它们。
06DevOps工具必须提供声明式API接口以实现全面的API生命周期管理,包括创建、发布、网关配置和监控。这支持自动创建API和更改网关配置。通过与自动化平台(例如Ansible)和CI/CD工具箱(例如Jenkins)无缝集成,可以加快API的发布速度。
尽管这种形式的自动化本身不会影响API调用的处理性能,但对于确保变更的快速以及变更成为开发过程中的一部分至关重要。如果发生会影响性能的问题,例如DDoS攻击或API客户端配置错误,CI/CD集成可确保您快速解决问题并重新配置API网关,以将性能恢复到可接受的水平。
实时API网关特征和架构指南NGINX已经与来自金融服务、零售、娱乐和软件行业的一些大型组织合作并为其构建了API架构。这些客户的架构规模已扩展到了每月需要处理数千亿次API调用,并且所有调用的延迟均不到30毫秒。通过与这些客户的合作,我们总结了以下六个API网关最佳实践,它们是我们实时API参考架构的基础。
01部署高可用性API网关为了确保快速响应,首先必须保证API网关能够正常运行。您必须使用API网关集群来提高可用性。一个包含两个或多个API网关的集群可提高API的可靠性和弹性。必须提供一种机制在所有网关之间共享运行状态(例如速率限制),以便能够实施一致有效的控制。
02对于API网关进行身份验证但不授权身份验证是指验证用户或调用实体是否是其声称的身份。授权是指确定授予用户哪些特权或访问级别。
授权需要进行额外处理(通常使用JSONWebToken(JWT)),以确定客户端是否有权访问特定资源。例如,一款电子商务应用可能向所有客户授予对产品和价格信息的只读权限,但仅向部分用户授予读写权限。考虑到这种细粒度的访问控制,最好由处理API调用本身的后端服务执行授权,因为它具有关于请求的必要上下文。API网关将授权委派给后端业务逻辑层后,无需再执行查找操作,因此可缩短响应时间。API网关仍然可以执行此功能,但可能会影响实时性能。
03支持动态身份验证在网关中预配置身份验证信息(无论使用API密钥还是JWT)可以极大地减少运行时的额外查找。因此,身份验证几乎瞬间即可完成。
04带熔断器的快速失败(FailFast)机制实施熔断器可防止级联故障。我们来举例说明一下——假设某个API调用由包含多个微服务的后端处理。其中一个微服务,我们称之为微服务A,用于执行数据库查找。当数据库查找失败时,微服务A需要很长时间才能返回错误。这会严重影响当前API调用以及后续API调用时的API响应时间。
熔断器可有效解决这个问题。设置指定时间内可以发生的故障次数限制。当超过该阈值时,电路跳闸,后续所有调用都会立即出错。任何客户端应用或用户都不会因资源耗尽而被挂起。
05不要在API网关层执行转换数据转换(例如将XML格式的请求有效负载转换为JSON)往往需要大量的计算。我们可将此工作分配给另一个服务。在API网关执行转换会大幅增加API调用的延迟。
06尽可能使用gRPCgRPC是Google推出的一个现代开源远程程序调用框架,因其广泛的语言支持和简单的设计受到越来越多用户的欢迎。gRPC依赖于ProtocolBuffer,Google称之为“用于序列化结构化数据的语言中立且平台中立的可扩展机制”。由于gRPC使用HTTP/2作为传输协议,因此它自动继承了HTTP/2的所有优点,例如数据压缩和TCP连接上的多路复用请求。多路复用技术允许客户端和服务器通过单个TCP连接并行发送多个请求和响应。HTTP/2还支持服务器推送,它允许服务器抢先将资源推送到客户端,并预期客户端可能很快会请求这些资源。在客户端请求资源之前进行推送有助于减少往返的延迟。这些特性可加快对客户端应用的响应速度并提高网络利用率。
NGINX可提供哪些帮助?NGINXPlus专为实时交付API而设计。它支持:
高可用性集群,允许共享状态信息,例如集群中所有实例的速率限制。使用API密钥和JWT进行身份验证。NGINXPlus键值存储中的内存SSL/TLS证书存储。此技术可用于预配置授权信息,例如API密钥或JWT。gRPC。高性能也是NGINXAPI管理解决方案的一个基本特性。与传统API管理解决方案不同,NGINXAPI管理解决方案的数据平面(NGINXPlus作为API网关)对控制平面(NGINXControllerAPI管理模块)无运行时依赖性。由于API调用必须跨数据库、模块和脚本,因此紧密耦合的控制和数据平面会显著增加延迟。通过将数据平面和控制平面相分离,可以缩短对API调用的平均响应时间,从而降低复杂性并最大限度提高性能。
NGINXAppProtect是一种可提供企业级安全性的DevOps友好型WAF,可以为API网关和负载均衡器提供安全防护。NGINXPlus作为多合一负载均衡器、反向代理和API网关,可确保高可用性和高性能,同时降低复杂性和工具蔓延。
图3.NGINXAPI管理部署图示。在此情景下,NGINXController部署在公有云中。NGINXAPI网关和开发人员门户部署在本地。NGINX控制器和NGINXPlus作为API网关的可移植性能够最大程度地提高灵活性。请参见图2,了解运行时如何处理API调用。
您能否提供实时API?您可以通过向本