微服务中 API 网关和负载均衡技术的差异?

原文链接(请科学上网):https://medium.com/javarevisited/difference-between-api-gateway-and-load-balancer-in-microservices-8c8b552a024

朋友们大家好,API 网关和负载均衡技术之间的差异对比是非常流行的微服务面试问题之一,面试官经常会在电话或现场面试中用这个问题来考察经验丰富的 Java 开发人员。过去,我分享了基本的微服务设计原则和最佳实践以及流行的微服务设计模式等文章;在本文中,我将回答这个问题,并告诉大家它们之间的关键区别。

虽然 API 网关和负载均衡都是微服务架构中的重要组件,但它们的用途却不相同。

API 网关充当所有 API 请求的单一入口点,提供请求路由请求限流身份认证API 版本控制等功能,并且还向客户端应用程序隐藏底层微服务的复杂性。

另一方面,负载均衡负责在微服务的多个实例之间分发传入请求,以提升服务可用性、性能和可扩展性。它有助于在多个实例之间均匀分配工作负载,并确保每个服务实例都得到充分利用。

换句话说,API 网关提供与 API 管理相关的更高层级的能力,而负载均衡提供与跨微服务的多个实例的流量分发相关的较低层级的能力

微服务中的 API 网关模式是什么?

API 网关是微服务架构中使用的基本模式之一,它在整个系统中充当反向代理角色,将客户端的请求路由到多个内部服务。它还为所有客户端提供与系统交互的单一入口点,从而实现更好的可扩展性、安全性和对 API 的控制。

API 网关通常用于实现身份认证、请求限流和缓存等常见功能,同时还屏蔽了底层服务的复杂性。当我们体验过使用 API 网关的实际场景时,系统整体架构会变得更加清晰,所以我们需要这样做。

假设我们有一个基于微服务的电子商务应用程序,允许用户浏览和购买产品,并且该应用程序由多个微服务组成,包括商品分类服务、购物车服务、订单服务和用户服务。

为了简化客户端与这些微服务之间的交互,我们可以使用 API 网关API 网关充当所有客户端请求的单一入口点,并将它们路由到正确的微服务系统。

例如,当用户想要查看产品分类时,他们向 API 网关发出请求,API 网关将请求转发到商品分类服务。同样,当用户想要购买下单时,他们同样会向 API 网关发出请求,API 网关会将请求转发到订单服务。

通过使用 API 网关,我们可以简化客户端代码,减少需要发出的请求数量,并为客户端与微服务交互提供统一的入口。

什么时候使用 API 网关?

现在我们知道什么是 API 网关以及它提供哪些能力,就很容易理解何时使用它了。API 网关可用于多种场景,例如:

  1. 为多个微服务提供统一的入口API 网关可以作为多个微服务的单一入口点,为客户端提供统一的入口;
  2. 建立安全机制API 网关可以为所有微服务实施安全策略,例如身份认证和授权;
  3. 提高性能API 网关可以缓存微服务的响应并减少访问后端服务的请求数量;
  4. 简化客户端API 网关可以抽象底层微服务的复杂性,为客户端交互提供更简单的接口;
  5. 版本控制和路由API 网关可以根据请求参数将请求路由到同一微服务的不同版本或者是不同的微服务。

因此,我们可以看到 API 网关所做的不仅仅是将请求转发到微服务实例,这可能是 API 网关和负载均衡技术之间的主要区别。

什么是负载均衡?它能够解决什么问题?

负载均衡是一个在服务器集群中的多个服务器或节点之间分发网络流量的组件,不仅在微服务架构中,在其它任何系统架构中都有相似的作用。

它通过在服务器之间均匀分配工作负载,有助于提高应用程序和服务的性能、可扩展性和可用性。

通过这种方式,负载均衡可以确保不会出现某一台服务器流量过载,而其他服务器还处于空闲状态,通过这种方式可以提高资源利用率并提升整个系统的可靠性。

这里有一张很好的图表,显示了负载均衡的工作原理以及如何在硬件和软件中使用负载均衡:

何时需要在微服务中使用负载均衡?

正如前面所说,负载均衡主要用于微服务架构中,以便在同一服务的多个实例之间分发请求的网络流量。

负载均衡可以帮助提高应用程序的可用性和可扩展性,这就是为什么在微服务架构出现之前负载均衡技术就已经存在很久了。

当应用程序的流量过高并且单个服务实例无法处理负载时,也会使用负载均衡技术。当应用程序跨多个服务器或数据中心部署时,也会使用到负载均衡技术。


微服务中负载均衡的优缺点

现在我们来分析一下微服务架构中使用负载均衡的优缺点:

优点

  • 提高性能和可扩展性:负载均衡在多个服务器之间均匀分配流量,减少每个服务器上的负载并确保服务器不会出现流量过载;
  • 提高可用性和容错能力:如果一台服务器出现故障,负载均衡可以自动将流量重定向到其它健康的服务器节点,确保即使某些服务器出现故障,整个服务仍然可用;
  • 灵活性和可定制化:负载均衡可以使用不同的算法和规则进行定制,以最适合系统需要的方式处理流量。

缺点

  • 复杂性和成本:负载均衡会增加系统的复杂性和成本,因为需要额外的硬件或软件来管理和维护负载均衡;
  • 单点故障:如果负载均衡自身发生故障,则整个系统可能会出现不可用;
  • 延迟增加:根据配置需要,负载均衡需要在客户端和服务器之间添加额外的节点,这会导致系统延迟增加。

微服务架构中负载均衡和 API 网关的区别

以下是 API 网关和负载均衡之间的 10 个差异点:

1. 目标

API 网关的主要目的是为微服务提供统一的请求访问入口,而负载均衡的主要目的是在多个服务器之间均匀分发流量。

2. 功能性

API 网关可以提供多种能力,例如路由、安全、负载均衡和 API 管理,而负载均衡仅处理流量的分发。

3. 路由

API 网关根据一组预定义的规则路由请求,而负载均衡根据预定义的算法(例如轮询算法最少连接算法)路由请求。

4. 协议支持

API 网关通常支持多种协议,如 HTTPWebSocketMQTT 等,而负载均衡仅支持传输层协议,如 TCPUDP 等。

5. 安全性

API 网关能够提供身份认证、授权和 SSL 认证等功能,而负载均衡仅提供 SSL 认证等基本安全功能。

6. 缓存

API 网关可以缓存微服务的响应以提高性能,而负载均衡一般不提供缓存功能。

7. 可移植性

API 网关可以在不同格式之间转换数据,例如 JSON 转换成 XML,而负载均衡不提供数据格式转换能力。

8. 服务发现

API 网关可以与服务发现机制集成来实现微服务动态发现,而负载均衡则依赖于静态配置。

9. 粒度

API 网关可以提供对 API 节点的细粒度控制,而负载均衡器仅控制服务器级别的流量。

10. 可扩展性

API 网关可以处理大量 API 请求并提供微服务垂直扩展能力,而负载均衡仅提供水平扩展能力。


这就是微服务中 API 网关和负载均衡之间的差异。正如我前面所说,API 网关提供与 API 管理相关的更高层级的能力,例如安全性、版本控制、单一流量入口;而负载均衡提供与跨微服务的多个实例的流量分发相关的较低层级的能力

因此,如果我们需要的不仅仅是将请求转发到多个实例,我们应该选择使用 API 网关而不是负载均衡,但是如果我们的需求只是将传入流量分发到多个应用程序实例,则只需要使用负载均衡技术。

感谢您的阅读,本文由 董宗磊的博客 版权所有。如若转载,请注明出处:董宗磊的博客(https://dongzl.github.io/2023/07/30/20-Difference-Between-API-Gateway-Load-Balancer-Microservices/
REST、GraphQL 和 gRPC 之间的差异
如何实现分布式系统和微服务中的事务管理?