API 网关简介

随着移动互联网的兴起、开放合作思维的盛行,不同终端和第三方开发者都需要大量的接入企业核心业务能力,此时各业务系统将会面临同一系列的问题,例如:如何让调用方快速接入、如何让业务方安全地对外开放能力,如何应对和控制业务洪峰调用等等。于是就诞生了一个隔离企业内部业务系统和外部系统调用的屏障 - API网关,它负责在上层抽象出各业务系统需要的通用功能,例如:鉴权、限流、ACL、降级等。另外随着近年来微服务的流行,API网关已经成为一个微服务架构中的标配组件。

位于客户端和服务器之间,充当从客户端到服务器的反向代理路由请求。与面向对象设计的模式相似,它为封装底层系统架构的 API 提供了一个单一的入口,称为 API 网关。

API 网关

API 网关功能

网关封装了底层系统并与客户端分离,为客户端提供了与微服务系统进行通信的单个入口点。

整合 API 网关整合了一些边缘的重复功能,无需让每个微服务都实现它们。它包括如下功能:

  • 认证和授权
  • 服务发现集成
  • 缓存响应结果
  • 重试策略、熔断器、QoS
  • 限速和节流
  • 负载均衡
  • log 日志、链路追踪、关联
  • Header、query 字符串 以及 claims 转义
  • IP 白名单
  • IAM
  • 集中式日志管理(服务之间的 transaction ID、错误日志等)
  • 身份的提供方,验证与授权

网关生态

网关生态主要包含控制台、网关核心、网关统计与监控

  • 控制台主要对API生命周期进行管理,以及ACL、流量管控等功能;
  • 网关核心主要处理API调用,包含鉴权、限流、路由、协议转换等功能;
  • 统计与监控模块主要完成API调用的统计,同时提供监控功能和报警功能

接口限流方式

  • 令牌桶限流
  • 漏桶限流

熔断降级

由于我们经常遇到调用后端接口超时,或者异常的情况,后端服务无法立即恢复,这种情况下再将请求发到后端已没有意义。于是我们进行熔断降级处理。

API 网关实现的注意事项

  • 可能产生的单点故障或者瓶颈
  • 由于通过 API 网关进行了额外的网络跳转以及复杂性风险,响应时间增长了。

遇到的坑

  1. 接口跨域问题

网关层开启了 cors 处理,其他业务微服务则不需要开启 cors 处理,否则浏览器会报 cors error

项目中常见报错

  1. Internal Server Error

    • 业务逻辑代码中,代码有 bug 导致程序报 panic
    • 如果项目部署在 K8S 上,可能是 gateway 服务的某个 Pod 挂了
  2. Bad Gateway

    • 请求路由不存在,没有在网关服务注册
  3. remote http://127.0.0.1:8081 unreachable, could not forward: EOF

    • 8081端口对应的服务挂了

学习文章

建设微服务API网关的一些实践