11 KiB
使用这个开源 API 网关实现可伸缩 API
API 网关是一个单一节点,提供对 API 调用入口。网关聚集了被请求的服务,并相应传回合适的响应信息。为了令你的API 网关有效地工作,设计一个可靠、高效且简洁地API 至关重要。本文介绍一种设计风格,但只要你理解其中的重点内容,它就能解决你的相关问题。
由 API 主导的方法
API主导的方法将API置于应用程序和它们需要访问的业务能力之间通信的核心,从而在所有数字通道上一致地交付无缝功能。API主导的连接是指使用一种可重用且设计得当的API 来连接数据和应用程序的方法。
API 主导的架构
API主导的架构是一种架构方法,它着眼于实现重用 API 的最佳方式。它能解决以下问题:
- 保护 API ,使外界无法在未授权情况下访问API
- 确保应用程序能找到正确的API 节点
- 限制对 API 的请求次数,从而确保持续的可用性
- 支持连续性的集成、测试、生命周期管理、监控、运营等等
- 防止错误在栈间传播
- 对 API 的实时监测和分析
- 实现可伸缩和灵活的业务能力(例如支持微服务架构)
API 资源路由
实现一个 API 网关,把它作为与所有服务通信的单一节点,意味着使用者只需要知道 URL 就能使用 API。将请求路由到相应的服务端点并执行相应的功能是 API 网关的职责。
由于客户端应用程序不需要从多个HTTP端点调用功能,这个办法就减少了API 使用者的操作复杂度。对单个服务来说,也不需实现一个单独的层级去实现认证、授权、节流和速度限制。大多数API 网关,类似于Apache APISIX,已经包含了这些核心功能。
API 基于内容的路由
基于内容的路由机制也使用 API 网关根据请求的内容进行路由调用。例如,一个请求可能是基于 HTTP 请求的头部内容或消息体被路由,而不基只基于它的目标 URI。
考虑这样一个场景:为了将负载在多个数据库实例间均分,需要对数据库进行分区。当记录总数较大,单个数据库实例难以管理负载时,常常会用这个办法。
还有一个更好的办法,就是把记录在多个数据库实例间分散开来。你实现了多个服务,每个数据库都有一个服务,把一个API 网关作为访问所有服务的唯一入口。
在上面的图表中,一个 API 网关向多个服务暴露一个单一的 /customers
资源,每个服务对应的数据库却是不同的。
API 地理路由
API地理路由解决方案根据API调用的来源将其路由到最近的API网关。为了防止地理距离导致的延迟问题(例如一个位于亚洲的客户端调用了位于北美地区的API),你可以在多个地区部署同一个 API 网关。对于一个 API 网关,你可以在每个区域使用不同的子域名,让应用程序基于业务逻辑选择最近的网关。因此 API 网关就提供了内部负载均衡,确保进入的请求分布于可用的实例之间。
针对区域的负载均衡器,使用 DNS 流量管理服务和API 网关解析子域名,定位到距离最近的网关,这种做法很常见。
API 整合器
这项技术对多个服务执行操作(例如查询),并向客户端服务以单个 HTTP 响应的形式返回结果。API 整合器使用 API 网关来执行这项工作,而非让客户端程序多次调用 API。
.假定你有一款移动端 APP,对不同的 API发起多次调用。这增加了客户端代码的复杂性,导致网络资源的重复使用,而且由于延迟性,用户体验也不好。网关可以接收一切信息,可以请求认证,并理解来自每个API的数据结构。它也可以传递响应负载,因此它们也会作为一个用户需要的统一负载传回移动端。
以API 为中心的认证
在这种设计中, API 网关就是一个集中式认证网关。作为一个认证者,API 网关在 HTTP 请求头中查找访问凭据(例如不记名的令牌)。然后它借助于身份验证提供方执行验证凭据的业务逻辑。
使用 API 网关的集中式身份验证能解决很多问题。它完全取代了应用程序中的用户管理模块,通过对来自客户端应用程序的身份验证请求的快速响应来提高性能。Apache APISIX 提供了一系列插件,支持不同的API 网关认证方法。
API 格式转换
API 格式转换是通过相同的传输方式将有效载荷从一种格式转换为另一种格式的能力。例如,你可以通过 HTTPS 从XML/SOAP格式转换为JSON格式,反之亦然。API网关提供了支持REST API的功能,可以有效地进行负载和传输的转换。例如,它可以把消息队列遥测传输(MQTT)转换为 JSON 格式。
Apache APISIX能够接收HTTP请求,对其进行代码转换,然后将其转发给gRPC服务。它通过gRPC Transcode插件获取响应并将其以HTTP格式返回给客户端。
API 的可观察性
现在,你知道API 网关为进入各种目的地的流量提供了一个中心控制点。但它也可以是一个中心观察点,因为就监控客户端和服务器端的流量来说,它是唯一合格的。为了收集监测工具所需要的数据(结构化日志、度量和跟踪),你可以对 API 网关作出调整。
Apache APISIX提供预先构建的连接器,因此你可以跟外部监测工具结合使用。您可以利用这些连接器从您的API网关收集日志数据,进一步获得有用的指标,并获取完整可见的服务使用情况。
API 缓存
API 缓存通常在网关内部实现。它可以减少对端点的调用次数,同时通过缓存上游的响应,改进了请求延迟的情况。如果网关缓存对请求资源进行了备份,它会直接使用这个备份来响应这个请求,而不必对端点发出请求。如果缓存数据不存在,就将请求传到目标上游服务。
API 错误处理
由于各种原因,API 服务可能会出错。在这种情况下,API 服务需要有一定的弹性,来应对可预见的错误。你也希望确保弹性机制能正常工作。弹性机制包括错误处理代码、断路器、健壮性检查、备用程序、冗余等等。新式的API 网关支持一切错误处理功能,包括自动重试和超时设置。
API 网关也充当管弦乐演奏者的角色,它会根据各方面情况来决定如何管理流量、向忙碌的节点发送负载均衡器,还能快速停止运行。当有异常状况,它也会向你发出警示。API网关也保证路由和其他网络级组件能协同将请求传给API 进程。它能帮助你在早期检测出问题,并修复问题。网关的错误注入机制(类似于Apache APISIX使用的那种)用于测试应用程序或微服务在各种错误发生时的弹性。
API 版本管理
版本管理是指定义和运行多个同步的 API 版本的功能。这点也很重要,因为 API 是随着时间推移不断改进的。如果能对API 的同步版本进行管理,那么API 使用者就可以较快地切换到新地版本。这也意味着较老的版本将会被弃用。API 也跟其他应用程序类似,无论是开发新功能还是进行BUG 修复,都存在演变的过程。
你可以使用API 网关来实现 API 版本管理。版本管理可以是请求头,查询参数或路径。
APISIX 的网关
如果你需要令 API 服务可伸缩,就需要使用 API 网关。Apache APISIX 提供了必要的功能,可以实现健壮的入口,它的好处是显而易见的。它遵循API主导的架构,并且有可能改变客户端与托管服务交互的方式。
This article has been adapted and republished from the Apache APISIX blog with the author's permission.
via: https://opensource.com/article/23/1/api-gateway-apache-apisix
作者:Bobur Umurzokov 选题:lkxed 译者:cool-summer-021 校对:校对者ID