InfoQ|谈谈微服务设计中的 API 网关模式( 二 )
GraphQL 与 BFF GraphQL 是一种 API 的查询语言 。 PhilCal?ado 提出 BFF 和 GraphQL 的想法是相似的 , 但不是互斥的概念 。 他补充说 , BFF 与你端口的形状无关 , 而在于赋予客户端对应用程序的自治权 , 您可以在其中构建与许多 BFF 或 OSFA(one-size-fits-all)的 GraphQL API 。
著名的 API 网关 Netflix API 网关:Zuul Netflix 的流媒体服务可在 1000 多种不同类型的设备(电视、机顶盒、智能手机、游戏系统、平板电脑等)上使用 , 在高峰时段可以每秒处理 50,000 个请求 , 这种需求是 OSFA (one-size-fits-all)的 REST API 难以满足的 , 因此他们为每个设备量身定制了 API 网关 。
Netflix 的 Zuul 2 是所有进入 Netflix 云基础架构的请求的第一步 。 Zuul 2 大大改进了架构和功能 , 使我们的网关能够处理、路由和保护 Netflix 的云系统 , 并帮助为我们的 1.25 亿会员提供最佳体验 。
本文插图
亚马逊 API 网关 AWS 提供了完备的托管服务 , 用于创建、发布、维护、监视以及保护 REST、HTTP 和 WebSocket , 开发人员可以在其中创建用于访问 AWS 或其他 Web 服务的 API , 并将数据存储在 AWS 云上面 。
本文插图
Kong API 网关 Kong Gateway 是一个开源的 , 轻量级的微服务 API 网关 , 可提供无与伦比的延迟性能优化和可伸缩性 。 如果您只需要这些基础能力 , 那么它就是很合适的选项 。 只需要增加更多节点就可以轻松横向扩展 。 它以非常低的延迟来支持大量可变的工作负载 。
本文插图
其他 API 网关
- Apigee API Gateway
- MuleSoft
- Tyk.io
- Akana
- SwaggerHub
- Azure API Gateway
- Express API Gateway
- Karken D
API 组合与聚合 API 网关中的一些 API 请求直接映射到单个服务的 API 上 , 可以通过将请求路由到相应的微服务来提供服务 。 但是 , 在需要从多个微服务获得结果的复杂 API 操作的情况下 , 可以通过API 组合 / 聚合(分散 - 收集机制)来提供服务 。 在需要同步通信的情况下 , 如果服务彼此依赖 , 则必须遵循链式组合模式 。 组合层必须支持很大一部分的 ESB / 集成功能 , 例如转换、编排、弹性和稳定性模式 。
根容器的部署必须配备特殊的分发器和聚合器功能(或微服务) 。 分发者负责分解成细粒度的任务 , 并将这些任务分发给微服务实例 。 聚合器负责聚合业务工作流从组合微服务中得出的结果 。
API 网关和聚合 具备复杂功能的网关会增大测试和部署的难度 。 强烈建议大家避免在 API 网关中进行聚合和数据转换 。 领域专属的功能更应该遵循软件开发实践的定义 , 在应用程序的代码中完成 。 Netflix API Gateway Zuul 2 从他们在 Zuul 到原始系统的网关中 , 删除了许多业务逻辑 。
本文插图
Service Mesh 与 API 网关 微服务中的 Service Mesh 是处理进程间通信的可配置网络基础结构层 。 这和通常称为 Sidecar 代理或 Sidecar 网关的东西很像 。 它提供了许多功能 , 例如: