一文掌握负载均衡器、反向代理与API 网关

导读:本文为API网关,负载均衡设备与反向代码的比较和相关详细介绍。

API 网关、反向代理服务器和负载均衡器是现代软件架构中的重要组件。它们均扮演着增强 Web 应用程序性能、安全性和可扩展性的相关核心角色。

然而,我们们对三者的概述有时候会出现模糊,因此有必要澄清这些服务的角色。

下面我们就开始。

现实生活中的类比

让我们先举 3 个例子,并逐一详细解释。

我们以一家非常繁忙火爆的餐厅为例,当我们进入餐厅时,我们会受到男主人的欢迎,女主人负责迎接客人并将他们平均地安排给服务员,以便后者为客人提供最好的体验。

在这种情况下,男主人/女主人只不过是负载均衡器。

如果你查看办公室的收发室,就会发现接待员负责处理包裹和信件。他们做很多工作,例如分类邮件、将邮件递送给员工或部门、盘点邮寄用品、转发误寄的邮件以及签署挂号信等。在这种情况下,他们所做的不仅仅是分类并将邮件递送给员工(这里可以假设为负载均衡),而接待员只不过是反向代理。

如果你去图书馆,你会遇到图书馆管理员,他们做很多工作,比如帮助人们查找书籍和资源、验证图书馆身份证、管理员工、回复查询、确保没有人借太多书等等。他们在上述情况下,比接待员所做的工作更多,在这种情况下,图书馆员是API Gateway。

上面的示例应该为大家提供了足够的背景信息,以了解这三者之间的差异。

简而言之,反向代理和 API 网关都提供负载平衡功能以及其他功能。此外,API 网关是一种特定类型的反向代理,旨在管理 API。

我们将深入研究它们其中的每一个。

负载均衡器在本节中,我们将了解什么是负载均衡器、什么是不同类型的负载均衡器以及各种负载均衡算法。现代高流量网站面临着处理来自大量用户并发请求的挑战。无论是提供文本、图像、视频还是应用程序数据,满足这些需求都需要大幅提高处理能力,这通常是通过添加更多服务器来实现的。为了最大限度地提高所有服务器的效率,传入的请求需要在它们之间进行分配。这种在一组后端服务器之间分配网络流量的过程称为负载平衡。下图展示了典型的负载均衡器环境。

负载均衡器是一个专用于负载均衡的软件组件,它位于服务器前面,通过接收和路由请求代表服务器进行操作。负载均衡器有效地管理请求,确保快速提供服务。如果服务器崩溃,负载均衡器会将流量重定向到其他活动服务器。当新服务器加入该组时,负载均衡器会自动开始将请求路由到它。

此外,负载均衡器可以配置为对注册的后端服务器执行健康检查。这些运行状况检查充当验证后端服务器可用性的测试工作。

负载均衡器的类型负载均衡器有不同类型,但以下是重要的类型:

  • 网络负载均衡器/第 4 层 (L4) 负载均衡器 — 网络负载均衡器在第 4 层运行,专门处理 TCP 流量。它在传输级别分配流量,根据 IP 地址和目标端口等网络变量做出路由决策。该负载均衡器在引导流量时仅关注网络层信息。

  • 应用程序负载均衡器/第 7 层 (L7) 负载均衡器 — 应用程序负载均衡器在 OSI 模型的第 7 层运行,根据应用程序级别的参数分配负载。该负载均衡器始终确保使用最新的 SSL/TLS 密码和协议,从而增强安全性并简化应用程序。

  • 通过减轻特定服务器上的负载来缩短响应时间。

  • 通过仅将请求定向到在线服务器来确保高可用性和可靠性。

  • 通过根据网络要求动态添加或删除服务器来促进可扩展性。

  • 能够及早检测故障,从而在不影响其他资源的情况下进行有效管理。

  • 提供 SSL 终止,通过处理 SSL 流量解密来减少 Web 服务器上的计算负载。

  • 通过额外的保护层增强安全性,保护系统免受分布式拒绝服务 (DDoS) 和其他类型的攻击。

  • 需要仔细配置和监控。

  • 缓存——对于重复的请求,它可以独立响应,无论是部分还是全部。经常访问的内容存储在代理缓存中,减少了从后端获取数据的需要,并为客户端提供更快的响应。

  • 安全措施——它提供了实施防病毒或数据包过滤器等控制系统的选项。这些系统位于互联网和专用网络之间,为后端提供额外的保护。

  • SSL 终止 — 可将其设置为解密传入请求并加密传出响应,从而释放宝贵的后端资源。

  • API组合——将多个服务组合成一个统一的API。

  • 速率限制 - 管理用户在定义的时间内可以向 API 发出的请求量。

  • 安全性——包含身份验证和授权等功能。

  • 集中管理——提供一个统一的平台来管理我们生态系统内的各个方面。

  • 分析和监控——实现全面的分析和跟踪功能。

  • 允许/拒绝列表 - API 网关评估允许/拒绝列表以进行请求验证。

  • 身份验证和授权 - API 网关通过身份提供商验证并授予授权。

  • 速率限制 — 执行速率限制规则,超过限制的请求将被拒绝。

  • 动态路由和服务发现 - API 网关使用路径匹配将请求定向到相关后端服务。

  • 协议转换——API网关将请求转换为合适的协议并将其中继到后端微服务。

  • 错误处理 - API 网关管理请求处理期间遇到的任何错误,以确保服务平稳降级。

  • 断路 — API 网关结合了断路等弹性模式来识别故障,防止互连服务过载并减轻级联故障。

  • 日志记录和监控——API 网关利用 ELK 堆栈 (Elastic-Logstash-Kibana) 等可观察性工具,促进日志记录、监控、跟踪和调试。

  • 缓存 — API 网关可以选择缓存重复请求的响应,从而增强整体响应能力。

  • 虽然 API 网关和反向代理都可以管理请求路由,但它们的核心目标有所不同。

  • 负载均衡器主要在传输层运行,而 API 网关和反向代理在应用层运行。

  • 负载均衡器

    是一项在许多服务器或资源之间分配传入流量的服务。通常我们在后端有两个或多个Web服务器,它在它们之间分配网络流量。其主要目的是优化利用资源。

    更平等的任务分配和增加的容量可以增强系统的响应能力和可靠性。共有三种高级负载均衡器:基于硬件、基于云和基于软件。

  • 反向代理服务器

    驻留在后端服务器前面,并将客户端请求传输到这些服务器。反向代理通常用于提高安全性、速度和可靠性。

    反向代理接收来自客户端的请求,将其转发到另一台服务器,然后将其返回给客户端,给人的印象是第一个代理服务器处理了该请求。

    这些代理确保用户不会直接访问源服务器,从而使 Web 服务器具有匿名性。它们通常用于负载平衡,我们需要处理传入的流量,以便我们可以在多个后端服务器之间分配该流量或使用它们进行缓存。

  • Ocelot(https://github.com/ThreeMammals/Ocelot)

  • Tyk(https://tyk.io/)

  • Apache APISIX(https://apisix.apache.org/)

  • HAProxy(https://github.com/ThreeMammals/Ocelot)

  • Seesow(https://github.com/google/seesaw)

  • Yarp(https://microsoft.github.io/reverse-proxy/)

  • Ngnix(https://www.nginx.com/)

  • 带有附加模块的IIS (URL Rewrite)。

  • API 网关专注于微服务架构中 API 的管理、安全性和优化。它们的关键作用包括公开、保护和控制对 API 的访问。

  • 反向代理在安全性、性能优化和负载平衡方面都有应用。它们经常用于 Web 服务器、缓存解决方案,并作为应用程序交付网络的组成部分。