如今,API 网关是设计具有多个 API 服务或微服务的分布式系统架构的重要组成部分。这篇文章帮助您了解什么是 API 网关、何时以及为何使用它,并指导您如何为您的应用程序选择最佳的 API 网关解决方案。
什么是 API 网关?
API 网关是一种服务,它是从外部世界进入应用程序的入口点。它负责请求路由、API 组合和其他功能,例如身份验证。与外观一样,API 网关封装了应用程序的内部架构并向其客户端提供 API。来自外部客户端的所有 API 请求首先进入 API 网关,API 网关将一些请求路由到适当的服务,无论是上游 API 服务器、第三方应用程序、数据库,甚至是无服务器。
API 网关的主要用例之一是它们引入了 API 即服务抽象,以允许 API 提供者抽象 API 实现并在不影响 API 消费者的情况下发展后端架构。
为什么要使用 API 网关?
在当今世界,我们通常为特定产品创建多个微服务,而客户端应用程序通常需要使用多个微服务的功能。对于这些服务中的每一个,我们将有不同的端点从外部世界访问这些服务暴露多个 URL 没有意义我们应该有一个单一的入口点到我们所有的服务,并且基于我们应该的不同路径正在做路由。
如上图所示,客户端可以通过单个请求从整体式在线示例购物 Web 应用程序中检索订单详细信息。但在微服务架构中,客户端必须发出多个请求来检索相同的信息。在此设计中,移动应用程序扮演着 API 编写器的角色。它调用多个服务并组合结果。尽管这种方法看起来很合理,但它存在几个严重的问题。
第一个问题是糟糕的用户体验,因为客户端发出多个请求来检索它想要显示给用户的数据。第二个问题是它要求移动开发人员编写可能很复杂的 API 组合代码。这项工作分散了他们创造出色用户体验的主要任务。直接调用服务的移动应用程序更具挑战性的是,某些服务可能使用客户端不容易使用的协议。还有一个缺点直接访问服务的移动应用程序的最大缺点是缺乏封装。随着应用程序的发展,服务的开发人员有时会以破坏现有客户端的方式更改 API。您还可以将其他类型客户端的 API 设计问题添加到此列表中。
如您所知,服务直接访问服务有很多缺点。客户端通过 Internet 执行 API 组合通常是不切实际的。因此,更好的方法是使用API 网关。
为什么不开发自己的 API 网关
如果您有足够的资源和无限的时间(这将花费比您预期更长的时间),那么您自己开发一个 API 网关并不是特别困难。它基本上是一个代理对其他服务的请求的网络应用程序。您可以使用您最喜欢的 Web 框架构建一个具有最重要功能的框架,例如实现一种定义路由规则的机制,以最大程度地减少复杂的编码或正确实现 HTTP 代理行为,包括如何处理 HTTP 标头等。但是,您需要解决许多设计、安全和维护问题。
您需要应用适当的安全问题(除非您手头有安全专家团队)、测试每个新功能、监控 API 网关性能、记录每个更改、扩展、维护和升级内部库作为开发的一部分工作量。
如果您没有特殊的定制需求,使用市场上可用的产品可能更容易(特别是如果您需要快速使用网关)。因此,开发 API 网关的更好起点是使用为此目的设计的现成解决方案。它的内置功能显着减少了您需要编写的代码量。
10 个顶级 API 网关和管理工具
由于有多种类型的网关可用,并且每种网关都提供了许多功能。
下面,我分享了10 个顶级 API 网关和 API 管理解决方案(包括开源和 SaaS),并注意它们没有按流行或使用的特定顺序排列。
- 孔网关。
- 阿帕奇 APISIX。
- 泰克。
- 克拉肯_
- Gravitee.io。
- 艾皮吉。
- 亚马逊 API 网关。
- Azure API 管理。
- 大使。
- 格鲁。
让我们在下一节中看看如何根据最佳实践选择合适的 API 网关。
如何选择您的 API 网关
在选择完全符合您需求的 API 网关或 API 管理解决方案时,需要考虑以下一些特征。请注意,以下属性列表未按优先级顺序组织:
- 主要边缘功能。
- 安全。
- 配置简单。
- 安装和部署选项。
- 自托管与云托管。
- 定制。
- 一体化。
- 表现。
- 特征。
- 社区。
- 价格。
现在我们可以分解每个属性并理解为什么我们应该考虑每个属性。
主要边缘功能。
尽管 API 网关的主要职责是 API 路由和组合,但它还应该实现所谓的边缘功能。顾名思义,边缘功能是在应用程序边缘实现的请求处理功能。应用程序可能实现的边缘功能示例包括:
- 身份验证——验证发出请求的客户端的身份。
- 授权——验证客户端是否有权执行该特定操作。
- 速率限制——限制每秒来自特定客户端和/或所有客户端的请求数。
- 缓存——缓存响应以减少对服务的请求数量。
- 指标收集——收集有关 API 使用情况的指标,用于计费分析。
- 请求记录——记录请求。
- 负载转换——API 网关应该能够提供修改请求/响应负载的能力。API 网关也可能执行协议转换。它可能会向外部客户端提供 RESTful API,即使应用程序服务在内部使用混合协议,包括 REST 和 gRPC。
您需要确保所选 API 网关开箱即用地支持上述基本横切关注点。
安全
API 网关是另一个必须开发、部署和管理的高可用组件。API 网关也有成为安全瓶颈的风险。在选择它之前,您需要确定它的安全性。它应该制定强制使用SSL(安全套接字层)并符合某些数据保护法规的政策。此外,您需要验证该工具在与管理配置交互时是否启用了强身份验证。
由于配置是一项非常关键的功能,我们需要通过 API 密钥或其他身份验证方法进行身份验证。例如,大多数 API 网关提供商(如Apache APISIX)启用了对Admin API的基于令牌的访问,他们强烈建议生成您自己的令牌并定期更改它。或者Azure API 管理依赖于Azure Active Directory (Azure AD),其中包括可选功能,例如多因素身份验证(MFA) 和Azure RBAC,以实现对 API 管理服务及其实体(包括 API 和策略)的细粒度访问。
配置简单
重要的是配置 API 网关的过程尽可能轻量级。否则,开发人员将被迫排队等候以配置网关。当微服务数量及其 API 范围增加时,路由所需的配置可能会变得复杂。当您添加/删除路由和上游服务时,请确保 API 网关配置的更新速度受到影响而不会造成任何停机。例如,APISIX 插件支持热重载,这意味着您不必通过调用特殊的 HTTP 接口来重启正在运行的服务。
检查选择的 API 网关支持的配置语言 ( JSON/Yaml
) 和样式 ( )。Declarative/Imperative
它不是那么重要,但有时您可能会问:它是否具有用户友好的 GUI 和易于拖放的配置选项?一些开源项目,如Tyk、Krakend.io和Apache APISIX ,具有内置的无代码可视化编辑仪表板。您甚至可以从JSON
.
安装和部署选项
另一点需要考虑的是,在进行更改时安装 API 网关或重新部署网关有多困难。检查提供了哪些安装选项。大多数现代 API 网关都可以在任何环境(Linux、Windows、macOS)中以多种不同的方式(基于包、Docker、Helm、RPM)安装。例如,Kong的最大优势之一是其广泛的安装选择,带有 Docker 和Vagrant等预制容器,因此您可以快速部署。
接下来,查看部署复杂性,例如无数据库与数据库支持的部署。例如,Kong确实需要运行Cassandra或Postgres。 Apigee需要 Cassandra、Zookeeper和 Postgres 才能运行,而Express Gateway和Tyk等其他解决方案只需要Redis。Apache APISIX使用etcd作为它的数据存储,它在Data Plane的 etcd 中存储和管理路由相关和插件相关的配置。
自托管与云托管
选择 API 网关时,您需要考虑 API 网关服务的托管选项,例如内部部署、SaaS(软件即服务)或混合网关部署。API 平台的所有 SaaS 产品都包含嵌入式 API 网关功能,大多数人只是那样使用它。因为他们获得了 SaaS 环境的好处(提供可用性保证、自动扩展和操作安全性)并且很容易与云提供商的其他服务集成。
以下是云中一些流行的 API 管理解决方案的列表:
- AWS API 网关
- 谷歌云 API 网关
- Azure API 管理
- IBM API 连接
但是,如果第三方服务在您使用的云提供商中运行,并且在本地运行 API Gateway 带来更好的控制,或者还有另一种选择部署特定的开放式服务,则与第三方服务集成可能会更加困难。源或企业 API 网关到运行其他应用程序(Web 或 API 服务)的云提供商。
例如,将 Kong 或 Apache APISIX 实例部署到您选择的任何云非常简单,因为您仍然可以托管它,比方说在Microsoft Azure或AWS上,并使用免费开源项目的功能,而不是花费额外的费用他们的内置 API 管理工具。另一方面,Tyk、APIGee或API7提供云托管 SaaS 和本地部署解决方案。
客制化
API网关除了部署需求外,还有定制需求。因此,另一个需要考虑的因素是,当您不能直接使用 API 网关来满足您的需求时,选择的 API 网关如何使定制开发变得更容易。如果内置插件当前不支持系统的技术要求,有时您需要实施新的自定义插件以使用附加功能扩展网关。
Kong 提供多种语言的开源插件开发工具包(或“PDK”)。您可以使用Go、Javascript、Python和Lua构建 Kong 插件。在 Apache APISIX 中,您可以使用不同的Plugin Runners来使用您熟悉的编程语言开发插件。他们还将Wasm嵌入到 APISIX 中,您可以利用 Wasm 编译 Wasm 字节码以在 APISIX 中运行。
一体化
一个好的 API 网关的下一个特征是与更多生态系统的轻松集成。您需要检查它是否与其他产品、工具、平台和服务集成。例如,您可以调查是否支持多种应用程序协议,是否与用于身份验证的第三方身份提供者兼容,以及它是否提供可以轻松与大多数可观察性平台(如Prometheus、Skywalking、ElasticSearch、Opentelemetry、等等)。
表现
速度——这是当今数字环境的关键,如果您的应用程序性能太慢,消费者可以轻松地转向竞争对手。API 网关是应用程序的前门,所有外部请求都必须首先通过网关,这意味着它应该足够快以快速响应来自外部世界的这些请求。但并非所有 API 网关都在同一级别执行。如果您的应用程序需要快速和实时响应,您需要查看每个 API 网关提供商的性能基准。
尽管大多数公司的运营规模不是每天处理数十亿个请求,但 API 网关的性能和可扩展性通常非常重要。例如,Apache APISIX Gateway 在底层使用基数树路由匹配和 etcd 来为您提供创建高速同步系统的能力。
除了可扩展性,API 网关还必须可靠。实现可靠性的一种方法是在负载均衡器后面运行多个网关实例。如果一个实例失败,负载均衡器会将请求路由到其他实例。云供应商的一些 API 管理解决方案提供开箱即用的自动缩放功能,无需与提供此功能的服务集成。
特征
每个 API 网关都有各种不同的功能,有时彼此不同。该功能可能会受到限制,具体取决于您选择的开源或企业版,并且一些插件/扩展是免费提供的。在调查过程中,你可能知道一些来自企业的付费插件或功能可以在最广泛的开源项目中免费找到。
IBM API Connect提供自动化的、模型驱动的工具来创建 API 和分析 API 使用情况,API 提供者和消费者都可以使用这些工具。Kong 开箱即用地提供了 API 管理的许多预期功能,包括企业插件、开发人员门户、分析平台、安全功能、增强性能、GUI、24/7 支持等。
社区
如果选择的 API 网关扩展了开源网关,你需要仔细分析它是否有许可证文件,他们是否有一个活跃的社区,寻找贡献者的数量,谁是社区用户,人们提交的频率以及他们发布新版本、编写良好的文档并在论坛上回答问题。
价格
最后但同样重要的是,重要的方面之一可能是 API 管理解决方案的使用成本。如果它是许多公司已经实践的 100% 生产就绪的开源版本,您可以选择它。如果是企业版,请在付款前检查他们是否有合适的免费套餐来试验功能,以及公司是否提供您需要的全面支持。一些开源 API 网关提供商(例如Tyk或构建在 Apache APISIX之上的 API7.ai)提供相同的功能集,无论您是社区版用户还是企业用户,您都可以获得相同的 API 网关。
结论
API 网关是现代云原生微服务 API 架构的重要组成部分。然而,选择合适的 API 网关解决方案并不是那么简单。您可以在市场上找到许多开源和企业工具,包括内部部署和 SaaS。没有万能的解决方案,正确的选择取决于上面列出的许多方面,以及每个组织的独特需求。
相关资源
➔ 14 适用于现代应用程序的开源和托管 API 网关。
推荐内容💁
➔ 观看视频版本:
- API 网关的 10 个最常见用例(视频)。
➔ 阅读博文:
- API 网关的 10 个最常见的用例。