1 背景
- 由于后端的微服务拆分,客户端通常需要请求多个服务获取所需数据。
- 不同客户端所需要的数据不一样。例如,PC需要的数据通常比移动端更加详细。
- 不同客户端网络环境差异大。例如,WAN vs LAN,移动网络 vs 非移动网络。
- 服务端实例的地址信息(IP + port)会动态更新。
- 微服务的拆分逻辑会变化,这种变化应该应该对客户端透明。
- 不同的服务可能采用不同的协议,有些协议是非web的。
2 什么是API网关?
API网关接收客户端的所有请求,并将请求路由到相应的后端服务,并提供接口聚合和协议转换。通常来说,API网关通过调用多个后端服务,并聚合结果的方式处理请求。它可将web协议转化为非web的内部后台协议。
核心功能:
- 服务发现:
- 负载均衡:以某种算法分摊系统压力。
- 服务熔断:直接返回失败或者执行降价逻辑,防止雪崩。
- 流量控制:防止短时间内大量请求转发到后台压垮服务器。
- 认证鉴权:验证客户端的请求是否被授权。
- 灰度发布:
其他功能:
- 协议转换:web协议转非Web协议。
- 参数校验:对入参设置校验规则,由网关根据规则对无效请求进行过滤。
- API管理:包括 API 的创建、测试、发布、下线、版本切换等。
- 监控告警:监控API请求次数、API调用延迟和API错误信息。
- SDK生成:
3 实现方式
将API网关作为客户端的唯一接入点。API网关主要有两种类型:
- one-size-fits-all网关
- Backends for frontends网关
3.1 One-size-fits-all网关
简单地将请求路由到相应服务。将请求扇出到多个后端服务。
3.2 Backends for fronts网关
为每种客户端暴露不同的API。为每种客户端设计一个API网关,每个API网关为其客户端提供一种API。
4 优点
- 使后端的微服务拆分对客户端透明。
- 客户端无需关心后端服务的实例地址(IP + port)。
- 可为每个客户端提供最优API。
- 减少请求次数。
- 简化客户端的逻辑(由调用多个后台服务变为只调用API网关)。
- 可将标准的Web API协议转化为任意的后端协议。
5 缺点
- 增加复杂性。增加了API网关模块,带来了额外的开发、部署、管理成本。
- 增加响应时间。调用链路多了一跳(API网关)。
Issues:
How implement the API gateway?
event-driven/reactive approach is the best if it must scale to handle high loads.
参考来源:
[1] https://microservices.io/patterns/apigateway.html
[2] https://www.nginx.com/learn/api-gateway/
[3] https://aws.amazon.com/cn/api-gateway/features/
[4] https://cloud.tencent.com/document/product/628/11755
转载:https://blog.csdn.net/u011331383/article/details/102531749
查看评论