说说什么是 API 网关?它有什么作用?

Sherwin.Wei Lv7

说说什么是 API 网关?它有什么作用?

回答重点

API 网关是位于客户端与后端服务之间的一层,充当所有客户端请求的统一入口,负责路由请求到正确的服务,并提供认证与授权、负载均衡、限流、缓存、日志记录等功能。

API 网关的作用

简化客户端调用

  • 统一入口:API 网关提供了单一入口,客户端只需与网关交互,而不需要了解后端服务的具体部署位置和接口细节,从而简化了客户端的调用逻辑。
  • 请求聚合:在需要调用多个后端服务时,API 网关可以将多个请求合并为一个请求,从而减少客户端的请求次数,提高性能。

增强系统安全性

  • 认证与授权:API 网关可以对所有进入的请求进行身份验证权限控制,如验证 OAuth2 令牌、JWT 等,确保只有授权用户才能访问特定的服务。
  • 隐藏内部结构:通过 API 网关,后端服务的内部结构对外部不可见,从而降低了被攻击的风险,增加了系统的安全性。

流量管理与优化

  • 负载均衡:API 网关可以对不同服务实例之间的请求进行负载均衡,均匀分配流量,确保服务的高可用性。
  • 限流与熔断:API 网关可以实现限流、熔断和降级,在流量激增时保护后端服务,避免因某个服务不可用而影响整个系统。
  • 缓存:通过 API 网关,可以缓存一些高频访问的接口响应结果,减少后端服务的压力。

扩展知识

为什么需要 API 网关

API 网关是因为微服务架构的出现而出现的,因为微服务都是单独部署的,有各自的访问地址,对客户端而言一个页面的渲染可能需要调用多个服务的接口才能完成。

比如现在一个电商商品页面,可能需要涉及以下这么多功能:

image.png

如果让客户端直接与各个微服务通信会有以下几个问题:

1)客户端代码复杂。一些大公司一个页面的渲染可能涉及到几十上百个服务,客户端需要知晓这么多细节,大大增加客户端代码实现的复杂度。

2)性能不好。客户端与后端服务之间只能通过公网通信,大量的请求通信十分低效。

3)协议不友好。部分服务使用的并不是 web 友好的协议,可能是自定义的 RPC 协议或者 AMQP 协议等等。

4)难以重构。当后端需要进行服务拆分或者合并时,由于接口直接对客户端暴露,使得重构难以推进实施。

所以需要一个 API 网关,它作为系统的一个统一入口,负责服务请求路由、组合及协议转换。

客户端的所有请求都需要经过 API 网关,然后由它将请求路由到合适的微服务。并且 API 网关还可以调用多个微服务合并结果来处理一个请求。它可以在 Web 协议(如 HTTP 与 WebSocket)与内部使用的非 Web 友好协议(RPC 等)之间转换。

image.png

还能为不同的客户端定制 API,例如浏览器需要的信息多一些,手机需要更精简的信息等。

API 网关还可以实现一些非功能性需求:

  • 日志和监控:记录请求日志,提供监控和报警功能,帮助开发人员及时发现和解决问题。
  • 安全管理:可以在网关上进行身份验证、授权、令牌验证、IP 白名单等安全功能,而无须在每个微服务中进行认证。
  • 限流量控制:统一进行限流、熔断、降级,保护后端服务不被过载。
  • 负载均衡:将请求均匀分配到后端多个服务实例上,提高系统的可用性和性能

常见的 API 网关实现

开源实现:

  • Kong:基于 NGINX 的高性能 API 网关,支持插件扩展。
  • Zuul:Netflix 开源的 API 网关,集成了丰富的微服务架构功能。
  • Spring Cloud Gateway:Spring Cloud 生态系统中的 API 网关,适合与 Spring Cloud 微服务框架一起使用。

商业实现:

  • Amazon API Gateway:AWS 提供的托管 API 网关服务,集成了 AWS 的其他服务。
  • Google Cloud Endpoints:Google Cloud 提供的托管 API 网关服务。

API 网关的常见功能

路由与动态路由:路由是指将请求根据路径、方法、请求头等条件转发到相应的服务。动态路由则可以根据服务的注册情况自动调整路由配置。

  • 应用场景:如 api/v1/orders 请求被路由到订单服务,api/v1/products 请求被路由到产品服务,确保请求能到达正确的服务实例。

身份认证与授权:API 网关可以对所有客户端请求进行身份认证(如 OAuth2、JWT)和权限验证,确保只有授权的请求能访问特定的服务。

  • 应用场景:在企业内部系统中,API 网关可以对每个请求进行用户身份验证,确保只有授权的用户能够访问敏感信息。

协议转换:API 网关可以在客户端和后端服务之间进行协议转换,如将 REST 请求转为 gRPC,或将 JSON 转为 XML,提升系统的兼容性。

  • 应用场景:适用于客户端与服务之间使用不同协议的情况,通过协议转换确保不同技术栈的系统可以互相通信。

请求过滤与响应加工:API 网关可以对请求和响应进行过滤和修改,如添加请求头、修改请求路径、对响应数据进行加工等。

  • 应用场景:如在所有请求中添加认证信息、记录请求日志、重写路径以隐藏内部服务的实际接口路径。
Comments