导读:本文为API网关,负载均衡设备与反向代码的比较和相关详细介绍。
API 网关、反向代理服务器和负载均衡器是现代软件架构中的重要组件。它们均扮演着增强 Web 应用程序性能、安全性和可扩展性的相关核心角色。
然而,我们们对三者的概述有时候会出现模糊,因此有必要澄清这些服务的角色。
下面我们就开始。
现实生活中的类比
让我们先举 3 个例子,并逐一详细解释。
我们以一家非常繁忙火爆的餐厅为例,当我们进入餐厅时,我们会受到男主人的欢迎,女主人负责迎接客人并将他们平均地安排给服务员,以便后者为客人提供最好的体验。
在这种情况下,男主人/女主人只不过是负载均衡器。
如果你查看办公室的收发室,就会发现接待员负责处理包裹和信件。他们做很多工作,例如分类邮件、将邮件递送给员工或部门、盘点邮寄用品、转发误寄的邮件以及签署挂号信等。在这种情况下,他们所做的不仅仅是分类并将邮件递送给员工(这里可以假设为负载均衡),而接待员只不过是反向代理。
如果你去图书馆,你会遇到图书馆管理员,他们做很多工作,比如帮助人们查找书籍和资源、验证图书馆身份证、管理员工、回复查询、确保没有人借太多书等等。他们在上述情况下,比接待员所做的工作更多,在这种情况下,图书馆员是API Gateway。
上面的示例应该为大家提供了足够的背景信息,以了解这三者之间的差异。
简而言之,反向代理和 API 网关都提供负载平衡功能以及其他功能。此外,API 网关是一种特定类型的反向代理,旨在管理 API。
我们将深入研究它们其中的每一个。
负载均衡器在本节中,我们将了解什么是负载均衡器、什么是不同类型的负载均衡器以及各种负载均衡算法。现代高流量网站面临着处理来自大量用户并发请求的挑战。无论是提供文本、图像、视频还是应用程序数据,满足这些需求都需要大幅提高处理能力,这通常是通过添加更多服务器来实现的。为了最大限度地提高所有服务器的效率,传入的请求需要在它们之间进行分配。这种在一组后端服务器之间分配网络流量的过程称为负载平衡。下图展示了典型的负载均衡器环境。
负载均衡器是一个专用于负载均衡的软件组件,它位于服务器前面,通过接收和路由请求代表服务器进行操作。负载均衡器有效地管理请求,确保快速提供服务。如果服务器崩溃,负载均衡器会将流量重定向到其他活动服务器。当新服务器加入该组时,负载均衡器会自动开始将请求路由到它。
此外,负载均衡器可以配置为对注册的后端服务器执行健康检查。这些运行状况检查充当验证后端服务器可用性的测试工作。
负载均衡器的类型负载均衡器有不同类型,但以下是重要的类型:
-
网络负载均衡器/第 4 层 (L4) 负载均衡器 — 网络负载均衡器在第 4 层运行,专门处理 TCP 流量。它在传输级别分配流量,根据 IP 地址和目标端口等网络变量做出路由决策。该负载均衡器在引导流量时仅关注网络层信息。
-
应用程序负载均衡器/第 7 层 (L7) 负载均衡器 — 应用程序负载均衡器在 OSI 模型的第 7 层运行,根据应用程序级别的参数分配负载。该负载均衡器始终确保使用最新的 SSL/TLS 密码和协议,从而增强安全性并简化应用程序。
负载均衡器算法
静态算法
-
循环——客户端请求按顺序发送到不同的服务实例。通常,服务需要无状态性。
-
粘性循环 — 循环算法的增强版本,来自客户端的后续请求将转到处理初始请求的同一服务实例。
-
加权循环 — 管理员可以为每个服务分配权重,确定每个服务处理的请求比例。
-
哈希 - 该算法将哈希函数应用于传入请求的 IP 或 URL。请求路由到的实例取决于哈希函数的计算结果。
动态算法
-
最少连接 — 新请求将定向到并发连接数最少的服务器实例。
-
最短响应时间——新请求会以最快的响应时间发送到服务实例。
负载均衡器的优点:
-
在多个服务器之间有效地分配客户端请求或网络负载。
-
通过减轻特定服务器上的负载来缩短响应时间。
-
通过仅将请求定向到在线服务器来确保高可用性和可靠性。
-
通过根据网络要求动态添加或删除服务器来促进可扩展性。
-
能够及早检测故障,从而在不影响其他资源的情况下进行有效管理。
-
提供 SSL 终止,通过处理 SSL 流量解密来减少 Web 服务器上的计算负载。
-
通过额外的保护层增强安全性,保护系统免受分布式拒绝服务 (DDoS) 和其他类型的攻击。
负载均衡器的缺点:
-
如果设置不正确,就会成为单点故障。
-
需要仔细配置和监控。
反向代理反向代理充当客户端和服务器之间的中介。当代理将请求转发到相关服务器时,客户端仅与反向代理交互以到达后端服务器。这种机制隐藏了内部网络中各个服务器的实现细节。如下图所示的例子,反向代理位于源服务器前面,并确保没有客户端直接与该源服务器通信。
反向代理经常用于:
-
通过负载平衡进行负载分配。
-
缓存——对于重复的请求,它可以独立响应,无论是部分还是全部。经常访问的内容存储在代理缓存中,减少了从后端获取数据的需要,并为客户端提供更快的响应。
-
安全措施——它提供了实施防病毒或数据包过滤器等控制系统的选项。这些系统位于互联网和专用网络之间,为后端提供额外的保护。
-
SSL 终止 — 可将其设置为解密传入请求并加密传出响应,从而释放宝贵的后端资源。
反向代理在 OSI 模型的第 7 层(应用程序层)发挥作用,在 HTTP 级别管理请求和响应。这使他们能够提供高级特性和功能。其中一项功能是 URL 重写、简化复杂的 URL 并增强 SEO。
反向代理的优点
通过实施反向代理,网站或服务可以维护其源服务器 IP 地址的机密性。这增加了针对定向攻击(例如 DDoS 攻击)的一层保护,因为攻击者只能将其攻击指向反向代理。反向代理更安全、资源更丰富,可以增强对网络攻击的防御能力。其他好处包括缓存和 SSL 终止。
API网关
可以将API网关(API Gateway)视为反向代理的扩展版本。API网关不仅转发请求,还向客户端隐藏架构中的后端分区。它超越了简单的请求转发,可能参与编排或聚合。这简化了客户端代码并减少了 API 请求/返回次数。
此外,客户端不与多个后端交互,而是仅与 API 网关通信。另一个值得注意的方面涉及协议转换,其中 API 网关可以转换协议(例如,XML 到 JSON、gRPC 到 JSON)以促进客户端-服务器集成。
API 网关是解决安全性、可靠性、可扩展性、可观察性和可追溯性等各种基本功能的关键工具。
API网关的主要特点:
-
请求路由——将传入请求引导至相关服务。
-
API组合——将多个服务组合成一个统一的API。
-
速率限制 - 管理用户在定义的时间内可以向 API 发出的请求量。
-
安全性——包含身份验证和授权等功能。
-
集中管理——提供一个统一的平台来管理我们生态系统内的各个方面。
-
分析和监控——实现全面的分析和跟踪功能。
API网关内部工作流程在下图中,蓝色的块是 HTTP 请求所经历的步骤。黄色块是 API Gateway 在处理 HTTP 请求时提供的其他功能。
-
参数验证 - API 网关检查并验证 HTTP 请求中的属性。
-
允许/拒绝列表 - API 网关评估允许/拒绝列表以进行请求验证。
-
身份验证和授权 - API 网关通过身份提供商验证并授予授权。
-
速率限制 — 执行速率限制规则,超过限制的请求将被拒绝。
-
动态路由和服务发现 - API 网关使用路径匹配将请求定向到相关后端服务。
-
协议转换——API网关将请求转换为合适的协议并将其中继到后端微服务。
-
错误处理 - API 网关管理请求处理期间遇到的任何错误,以确保服务平稳降级。
-
断路 — API 网关结合了断路等弹性模式来识别故障,防止互连服务过载并减轻级联故障。
-
日志记录和监控——API 网关利用 ELK 堆栈 (Elastic-Logstash-Kibana) 等可观察性工具,促进日志记录、监控、跟踪和调试。
-
缓存 — API 网关可以选择缓存重复请求的响应,从而增强整体响应能力。
三者之间的主要区别
-
API 网关专门负责 API 管理,负载均衡器分配网络流量,反向代理确保安全请求转发。
-
虽然 API 网关和反向代理都可以管理请求路由,但它们的核心目标有所不同。
-
负载均衡器主要在传输层运行,而 API 网关和反向代理在应用层运行。
更多差异如下图所示。
总结
下面将三个产品主要特点做概念总结如下:
-
API网关
位于客户端和一组后端服务之间。它通过接受所有应用程序编程接口 (API) 调用、聚合实现这些调用所需的不同服务并返回正确的结果来执行反向代理的功能。
用户身份验证、速率限制和统计是 API 网关代表 API 服务系统负责的典型职责。此外,API网关还可以处理故障(断路器)并进行日志和监控。
-
负载均衡器
是一项在许多服务器或资源之间分配传入流量的服务。通常我们在后端有两个或多个Web服务器,它在它们之间分配网络流量。其主要目的是优化利用资源。
更平等的任务分配和增加的容量可以增强系统的响应能力和可靠性。共有三种高级负载均衡器:基于硬件、基于云和基于软件。
-
反向代理服务器
驻留在后端服务器前面,并将客户端请求传输到这些服务器。反向代理通常用于提高安全性、速度和可靠性。
反向代理接收来自客户端的请求,将其转发到另一台服务器,然后将其返回给客户端,给人的印象是第一个代理服务器处理了该请求。
这些代理确保用户不会直接访问源服务器,从而使 Web 服务器具有匿名性。它们通常用于负载平衡,我们需要处理传入的流量,以便我们可以在多个后端服务器之间分配该流量或使用它们进行缓存。
三者主要区别在于,API 网关专注于将请求路由到适当的服务并处理 API 请求,而负载均衡器专注于在一组服务器之间,均匀分配请求并处理发送的请求到单个 IP 地址,该地址在协议或套接字级别(TCP、HTTP)工作。
产品实例
API 网关的一些产品实例有:
-
亚马逊 API 网关(https://aws.amazon.com/api-gateway/)
-
Ocelot(https://github.com/ThreeMammals/Ocelot)
-
Tyk(https://tyk.io/)
-
Apache APISIX(https://apisix.apache.org/)
负载均衡器:
-
Azure 负载均衡器(https://learn.microsoft.com/en-us/azure/load-balancer/load-balancer-overview)
-
HAProxy(https://github.com/ThreeMammals/Ocelot)
-
Seesow(https://github.com/google/seesaw)
反向代理服务的示例是:
-
Apache Proxy
(https://httpd.apache.org/docs/2.4/mod/mod_proxy.html)
-
Yarp(https://microsoft.github.io/reverse-proxy/)
-
Ngnix(https://www.nginx.com/)
-
带有附加模块的IIS (URL Rewrite)。
什么场合用哪个?
-
负载均衡器擅长分配网络流量,以增强可用性、可扩展性,甚至跨多个服务器的负载分配,通常应用于 Web 应用程序和服务。
-
API 网关专注于微服务架构中 API 的管理、安全性和优化。它们的关键作用包括公开、保护和控制对 API 的访问。
-
反向代理在安全性、性能优化和负载平衡方面都有应用。它们经常用于 Web 服务器、缓存解决方案,并作为应用程序交付网络的组成部分。
识别负载均衡器、反向代理和 API 网关的复杂环境似乎具有挑战性,但有了正确的知识,我们现在就可以做出明智的决策并为自己 Web 应用选择理想的组件。
负载均衡器在多个后端服务器之间分配流量,反向代理提供额外的应用程序级功能,API 网关为基于微服务的应用程序提供集中管理和安全性。
此外,并非固定用法,我们可以随意探索这些组件的混合搭配方法,以获得最佳效果。结合负载均衡器、反向代理和 API 网关可以构建一个不仅高效灵活而且安全且可扩展的 Web 架构。
希望大家利用这些组件的强大功能,释放应用程序全部潜力!
作者:有趣的大雄
参考:
https://newsletter.techworld-with-milan.com/p/api-gateway-vs-load-balancer-vs-reverse