网关三剑客:负载均衡、反向代理、API 网关
本文介绍了网络应用中常见的三种网关实现:负载均衡器、反向代理和 API 网关。介绍了三者的区别、使用常见和优缺点。原文:Load Balancer vs Reverse Proxy vs API Gateway
在大型系统中,经常会出现诸如“负载均衡器”、“反向代理”和“API 网关”这类术语。很多时候,这些词会被交替使用,但理解它们之间的区别非常重要。一旦理解其含义,就能很容易选择出最适合解决问题的方案。
现实生活中的类比
我们举 3 个例子,并对每个例子进行解释。
以一家非常繁忙的餐厅为例。当我们走进餐厅时,会有一位接待员迎接我们,负责将客人均匀的安排给服务员服务,以便为客人提供最佳体验。在这种情况下,这位接待员就是负载均衡器。
观察一下收发室,就会发现那里有负责处理包裹和信件的接待员。他们要完成很多工作,比如分拣邮件、将邮件送达员工/部门、盘点邮寄用品、转发投递错误的邮件以及签收挂号邮件等等。这种情况下,他们所做的远不止是将邮件分拣和送达给员工(这可以视为负载均衡),而那个接待员实际上就是反向代理。
走进图书馆,会遇到一些工作人员,他们承担着诸多工作,比如帮助读者查找书籍和资源、验证借书证、管理员工、回答咨询、确保没有人借阅过多书籍等等。他们的工作比上述案例中的接待员要复杂得多,在这种情况下,图书馆管理员就相当于 API 网关。
上述例子为我们提供了足够的背景信息,能够帮助我们理解三种技术之间的差异。简单来说,反向代理和 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 并增强搜索引擎优化。
反向代理的优点
通过实施反向代理,网站或服务能够保护其源服务器 IP 地址的机密性,为抵御有针对性的攻击(如 DDoS 攻击)提供了额外一层保护,因为攻击者只能将攻击目标指向反向代理。反向代理由于更加安全且资源更充足,能够提供更强的抵御网络攻击的能力。其他好处包括缓存和 SSL 终止。
API 网关
API 网关可视为反向代理的扩展版本,不仅可以转发请求,还可以隐藏架构中后端的分区信息。它不仅限于简单的请求转发,还可能涉及编排或聚合操作,从而可以简化客户端代码,减少 API 请求/往返次数。此外,客户端无需与多个后端进行交互,而是仅与 API 网关进行通信。另一个值得注意的方面是协议转换,即 API 网关可以转换协议(例如,XML 转换为 JSON,gRPC 转换为 JSON),以促进客户端与服务器的集成。API 网关是实现各种关键功能(如安全性、可靠性、可扩展性、可观测性和可追踪性)的重要工具。
API 网关主要特性
请求路由 —— 将接收到的请求引导至相应服务。
API 组合 —— 将多个服务整合为统一 API。
速率限制 —— 管理用户在规定时间内对 API 的请求量。
安全性 —— 包含诸如认证和授权等特性。
集中管理 —— 提供统一平台来管理生态系统内的所有方面。
分析和监控 —— 实现全面的分析和跟踪功能。
API 网关内部步骤
下图中,蓝色方块是 HTTP 请求所经过的步骤。黄色方块是 API 网关在处理 HTTP 请求时提供的其他功能。
参数验证 —— 检查并验证 HTTP 请求中的属性。
允许/拒绝列表 —— 评估请求验证所需的允许/拒绝列表。
身份验证与授权 —— 通过授权服务商进行验证并授权。
速率限制 —— 实施限速规则,拒绝超出限制的请求。
动态路由和服务发现 —— 通过路径匹配将请求导向相关的后端服务。
协议转换 —— 将请求转换为合适的协议,并将其转发给后端微服务。
错误处理 —— 在请求处理过程中管理遇到的任何错误,以确保服务平稳降级。
断路器机制 —— 采用诸如断路器之类的弹性模式来识别故障,防止相互关联的服务过载,并减轻连锁故障。
日志记录和监控 —— 利用诸如 ELK 栈(Elastic-Logstash-Kibana)之类的可观测工具,实现日志记录、监控、跟踪和调试。
缓存 —— 可选择对重复请求的响应进行缓存,从而提高整体响应速度。
三种网关的关键区别
API 网关专注于 API 管理,负载均衡器负责分配网络流量,而反向代理则确保安全的请求转发。
虽然 API 网关和反向代理都能管理请求路由,但核心目标有所不同。
负载均衡器主要在传输层发挥作用,而 API 网关和反向代理则在应用层运行。
更多区别如下所示。
何时选用何种类型?
负载均衡器擅长将网络流量分配至多个服务器,以提高可用性、可扩展性以及负载分布,常用于网络应用和服务中。
API 网关专注于微服务架构内 API 管理、安全和优化,关键作用在于公开、保护和控制 API 的访问。
反向代理适用于安全、性能优化和负载均衡,常用于网络服务器、缓存解决方案以及应用交付网络中。
在负载均衡器、反向代理和 API 网关的复杂领域中穿梭可能会让人感到棘手,但有了正确的认识,就能做出明智决策,为应用选择合适的组件。请记住,负载均衡器会在多个后端服务器之间分配流量,反向代理提供额外的应用层功能,而 API 网关则为基于微服务的应用提供集中管理与安全功能。
此外,还可以自由的对这些组件采用混搭,以获得最佳效果。将负载均衡器、反向代理和 API 网关相结合,可以构建出不仅高效而且安全且可扩展的网络架构。充分利用这些组件的力量,可以充分发挥应用的潜力。
你好,我是俞凡,在 Motorola 做过研发,现在在 Mavenir 做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI 等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!
版权声明: 本文为 InfoQ 作者【俞凡】的原创文章。
原文链接:【http://xie.infoq.cn/article/e3db7071fc17ad382be29dc8f】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。







评论