API Gateway
文章目录
API 网关简介
随着移动互联网的兴起、开放合作思维的盛行,不同终端和第三方开发者都需要大量的接入企业核心业务能力,此时各业务系统将会面临同一系列的问题,例如:如何让调用方快速接入、如何让业务方安全地对外开放能力,如何应对和控制业务洪峰调用等等。于是就诞生了一个隔离企业内部业务系统和外部系统调用的屏障 - API网关,它负责在上层抽象出各业务系统需要的通用功能,例如:鉴权、限流、ACL、降级等。另外随着近年来微服务的流行,API网关已经成为一个微服务架构中的标配组件。
位于客户端和服务器之间,充当从客户端到服务器的反向代理路由请求。与面向对象设计的模式相似,它为封装底层系统架构的 API 提供了一个单一的入口,称为 API 网关。
API 网关功能
网关封装了底层系统并与客户端分离,为客户端提供了与微服务系统进行通信的单个入口点。
整合 API 网关整合了一些边缘的重复功能,无需让每个微服务都实现它们。它包括如下功能:
- 认证和授权
- 服务发现集成
- 缓存响应结果
- 重试策略、熔断器、QoS
- 限速和节流
- 负载均衡
- log 日志、链路追踪、关联
- Header、query 字符串 以及 claims 转义
- IP 白名单
- IAM
- 集中式日志管理(服务之间的 transaction ID、错误日志等)
- 身份的提供方,验证与授权
网关生态
网关生态主要包含控制台、网关核心、网关统计与监控
- 控制台主要对API生命周期进行管理,以及ACL、流量管控等功能;
- 网关核心主要处理API调用,包含鉴权、限流、路由、协议转换等功能;
- 统计与监控模块主要完成API调用的统计,同时提供监控功能和报警功能
接口限流方式
- 令牌桶限流
- 漏桶限流
熔断降级
由于我们经常遇到调用后端接口超时,或者异常的情况,后端服务无法立即恢复,这种情况下再将请求发到后端已没有意义。于是我们进行熔断降级处理。
API 网关实现的注意事项
- 可能产生的单点故障或者瓶颈
- 由于通过 API 网关进行了额外的网络跳转以及复杂性风险,响应时间增长了。
遇到的坑
- 接口跨域问题
网关层开启了 cors 处理,其他业务微服务则不需要开启 cors 处理,否则浏览器会报 cors error
项目中常见报错
-
Internal Server Error
- 业务逻辑代码中,代码有 bug 导致程序报 panic
- 如果项目部署在 K8S 上,可能是 gateway 服务的某个 Pod 挂了
-
Bad Gateway
- 请求路由不存在,没有在网关服务注册
-
remote http://127.0.0.1:8081 unreachable, could not forward: EOF
- 8081端口对应的服务挂了