网关三剑客:负载均衡、反向代理、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】协议,转载请保留原文出处及本版权声明。








 
    
评论