发布于 2026-01-06 0 阅读
0

我找到了关于负载均衡器及其使用场景的答案。让我们从我的问题开始。负载均衡器简介;从虚拟机迁移到容器;从单体架构迁移到微服务;我们在 Gojek 采取了哪些措施?Weaver——一款具有高级功能的现代化 HTTP 代理。

我找到了什么是负载均衡器以及何时使用它

让我们先从我的问题说起。

负载均衡器简介

从虚拟机迁移到容器

从单体架构迁移到微服务架构

Gojek对此采取了哪些措施?

Weaver——一款具有高级功能的现代HTTP代理

TL;DR
……是的,处理这么多任务快把我累垮了,所以我需要你们的帮助。拜托了!

让我们先从我的问题说起。

假设我开发了一款新的移动应用。我的系统包含前端和后端服务,它们通过 REST API 进行通信。这就是我的系统架构。

采用单后端实例的架构

采用单后端实例的架构

我的产品首次上市,目前只有少数用户。后端服务运行良好,能够按预期处理请求。用户对应用的运行速度非常满意。

随着我为应用程序添加更多功能,用户数量也在增长。我的后端服务需要处理的请求数量比以前更多。请求数量的增长开始影响后端服务,导致性能下降。由于无法处理所有请求,后端服务甚至会宕机。这意味着可用性也受到了影响。

用户开始抱怨应用运行速度变慢。他们很不满意,我也很不满意,因为我担心会流失用户。我该如何提升后端性能?如何提高后端可用性?

实现这一目标的方法有很多种。可以是重新审视应用程序算法,可以是更换编程语言,可以是增加服务器资源,也可以是增加后端服务的实例。诸如此类,不胜枚举。

在这种情况下,我将选择添加更多后端服务的实例,因为我有足够的时间重写后端服务。

负载均衡器简介

由于我需要创建后端服务的多个实例,因此需要一种机制将来自移动应用程序的请求重定向到这些实例。这里我使用了负载均衡器。顾名思义,负载均衡器用于在后端实例之间分配工作负载。我的架构如下所示。

具有多个后端实例的架构

具有多个后端实例的架构

负载均衡器有自己的算法来分配工作负载。我可以选择的算法有几种,例如轮询调度、加权轮询调度、最少连接数调度等等。我可以根据我的需求选择合适的算法。

在这种情况下,我的后端服务现在需要处理的请求数量将比以前少。假设之前单个后端服务平均每分钟处理约 6000 个请求。现在我可以将工作负载分配给三个实例,这意味着每个实例每分钟将处理 2000 个请求。这将有助于提高性能和正常运行时间。

我们可以使用一些负载均衡技术,例如 HAProxy、Nginx 和云负载均衡。您可以根据需要选择任何一种。
只处理这种情况吗?

显然不是!负载均衡不仅仅适用于处理高负载的情况。那么还有什么其他方法呢?

从虚拟机迁移到容器

假设我有一些服务运行在虚拟机上。现在我想把所有部署都迁移到容器中。这听起来很简单,因为我只需要使用容器重新部署所有服务。之后,我将所有请求重定向到容器集群。但这真的是个好做法吗?

这种方法风险太大了。想象一下,如果容器集群上的某些部署配置不当,就可能导致停机。那么负载均衡器又能如何帮助我呢?

从虚拟机到容器的迁移方案

从虚拟机到容器的迁移方案

由于直接迁移到容器集群风险较高,所以我选择分阶段迁移。在将所有服务部署到容器集群后,我想先进行一些请求测试。我可以使用负载均衡器在虚拟机集群和容器集群之间分配负载。我将负载均衡器配置为将 20% 的请求分配给容器集群,80% 的请求分配给虚拟机集群。通过这种方式,我可以监控容器集群的运行状况,确保其配置正确。之后,我可以逐步增加容器集群的请求量,直到完全部署为止。

从单体架构迁移到微服务架构

这种情况与将虚拟机集群迁移到容器集群非常相似。直接迁移单体应用风险很大。负载均衡器可以帮助我分阶段迁移。我可以使用负载均衡器在单体集群和微服务集群之间分配请求。我会一直使用负载均衡器,直到我确信微服务运行良好为止。然后,我才会进行全面迁移。

Gojek对此采取了哪些措施?

在 Gojek,我们也自主开发了负载均衡器,名为 Weaver。这是一个开源项目,您可以在这里找到它。

GitHub 标志 gojek / weaver

一种具有动态分片策略的高级 HTTP 反向代理

Weaver——一款具有高级功能的现代HTTP代理

构建状态 成绩单 覆盖范围状态 GitHub 发布

描述

Weaver 是一款具有动态分片策略的七层负载均衡器,它是一款具有高级功能的现代 HTTP 反向代理。

特征:

  • 基于请求头/路径/请求体字段对请求进行分片
  • 按后端每个路由的请求发出指标
  • 动态配置不同路由(无需重启!)
  • 速度很快
  • 支持多种分片请求算法(一致性哈希、取模、S2 等)
  • 打包成一个独立的二进制文件
  • 故障日志(可观测性)

安装

从源代码构建

  • 克隆仓库:
git clone git@github.com:gojektech/weaver.git
  • 构建以创建 weaver 二进制文件
make build

适用于各种架构的二进制文件

从这里下载发布版本的二进制文件:

建筑学

Weaver 用作etcd控制平面,将传入的请求与特定的路由配置进行匹配,并根据某种分片策略将流量分片到不同的后端。

Weaver 可以配置为匹配不同的路由……

您可以阅读我们创建它的原因,因为我们知道有一些现有的负载均衡技术可以利用。

希望你喜欢阅读!
~CappyHoding 💻 ☕️

文章来源:https://dev.to/ecojuntak/i-found-what-is-load-balancer-and-when-to-use-it-1i4e