API网关是位于客户端和后端服务集合之间的 API 管理工具。它是系统的单一入口点,封装了内部系统架构,并提供了针对每个客户端定制的 API。它还具有身份验证、监视、负载平衡、缓存、节流、日志记录等职责。
为什么我们需要API网关?
微服务提供的API的粒度通常与客户端所需的不同。微服务通常提供细粒度API,这意味着客户端需要与多个服务交互。因此,API网关可以为所有客户端提供单一入口点,并提供一些附加功能和更好的管理。
功能
以下是 API 网关所需的一些功能:
- 认证和授权
- 服务发现
- 反向代理
- 缓存
- 安全
- 重试和熔断
- 负载均衡
- 日志、跟踪
- API组合
- 流量控制和节流
- 版本管理
- 路由
- IP白名单或黑名单
优点
让我们看看使用API网关的一些优点:
- 封装API的内部结构。
- 提供API的集中视图。
- 简化了客户端代码。
- 监控、分析、跟踪和其他此类功能。
缺点
以下是API网关的一些可能的缺点:
- 可能的单点故障。
- 可能会影响性能。
- 如果没有适当扩展,可能会成为瓶颈。
- 配置可能具有挑战性。
服务于前端的后端(BFF)模式
在服务于前端的后端(Backend For Frontend,BFF)模式中,我们创建单独的后端服务,以供特定前端应用程序或接口使用。当我们希望避免为多个接口定制单个后端时,此模式非常有用。Sam Newman首先提出这种模式。
此外,有时微服务返回到前端的数据输出不是前端所需的精确格式或根据后端的需求进行了过滤。为了解决这个问题,前端应该有一些逻辑来重新格式化数据,因此,我们可以使用BFF将一些逻辑转移到中间层。
服务于前端的后端的主要功能是从适当的服务获取所需的数据,格式化数据,并将其发送到前端。
GraphQL作为服务于前端的后端(BFF)的性能非常好。
何时使用此模式?
在以下情况下,我们应考虑使用服务于前端的后端(BFF)模式:
- 共享或通用的后端服务必须以显著的开发开销进行维护。
- 我们希望优化后端以满足特定客户的需求。
- 对通用后端进行定制,以适应多个接口。
例子
以下是一些广泛使用的网关技术: