Subscribe to receive notifications of new posts:

使用加权池进行负载平衡

2022-08-02

7 min read
Load Balancing with Weighted Pools

任何人都可以利用 Cloudflare 范围广泛的网络来保护和加速其在线业务。我们拥有的大量数据中心靠近世界各地的互联网用户,让我们能够保护并加速客户的互联网应用程序、API 和网站。即使是使用单个源服务器的简单服务也能利用遍布 270 多个城市的大规模 Cloudflare 网络。使用 Cloudflare 缓存,不必购买新服务器,就能支持更多的请求和用户。

无论是通过冗余来保障高可用性,还是支持更多动态内容,越来越多的服务需要多个源服务器。借助 Cloudflare 负载平衡器,客户的服务能够保持高可用性,并且易于在多个源服务器之间分散请求。今天,我们很高兴地宣布为我们的负载平衡器推出大家盼望已久的功能 – 加权池!

什么是加权池?

要回答这个问题,首先来简单考察一下负载平衡器的工作原理,并理清几个术语:

源服务器 - 位于 Cloudflare 后端并且常常位于客户拥有的数据中心或公共云提供商处的服务器。

源池 - 源服务器的逻辑集合。大部分池在命名上表示数据中心或云提供商,例如 “us-east”、“las-vegas-bldg1” 或 “phoenix-bldg2”。推荐使用池来表示同一物理位置中的服务器集合。

流量转向策略 - 策略指定负载平衡器应如何在源池之间转向请求。根据转向策略,请求可以发送到按纬度和经度定义的最接近池、延迟最低的源池,或基于 Cloudflare 数据中心的位置发送。

池权重 - 这是一个数字值,用于说明发送到某个池的请求相对于其他池应占多少百分比。

Diagram showing a request arriving at Cloudflare and two load balancer origin pools with equal weights

访问者的请求到达附加有负载平衡器的主机名的 Cloudflare 网络时,该负载平衡器必须决定该请求应转发到何处。客户可以使用流量转向策略配置此行为。

Cloudflare 负载平衡器现已支持标准转向、地理转向、动态转向和邻近转向。上述每个相应的流量转向策略控制请求如何在源池之间分布。加权池是对标准随机转向策略的延伸,而标准随机转向策略可指定应将多少相对百分比的请求发送到每个相应的池。

在上例中,我们的负载平衡器有两个源池,即 “las-vegas-bldg1”(客户运营的数据中心)和 “us-east-cloud”(包含多个虚拟服务器的公共云提供商)。每个池的权重为 0.5,因此应向每个相应的池发送 50% 的请求。

为什么要将权重分配给源池?

在我们构建加权池之前,这一直是我们的客户盼望已久的功能。我们如此热衷于此功能,一部分原因是,可以将其用于解决许多类型的问题。

大小不均等的源池

在下面的例子中,不可缓存的动态流量由于大型促销而显著增加。管理员注意到,其拉斯维加斯数据中心的负载太高,因此他们选择动态增加其公共云提供商的源数量。我们的两个池 “las-vegas-bldg1” 和 “us-east-cloud” 不再大小均等。我们表示公共云提供商的池现在大了很多,因此管理员更改了池权重,让云池接收 0.8 (80%) 的流量,而剩余 0.2 (20%) 的流量则由拉斯维加斯池接收。管理员能够使用池权重非常快速地精细调整请求在大小不均等的池之间的分布。

Diagram showing a request arriving at Cloudflare, and two load balancer origin pools. One pool is larger and has a weight of 80 percent.

数据中心切断开关

除了平衡大小不均等的池之外,加权池还可以用于从轮换中完全去除一个数据中心(源池),只需将该池的权重设置为 0 即可。如果需要在故障排除期间或可能断电的主动维护期间快速去除一个数据中心,此功能尤其有用。即使使用 0 权重禁用一个池,Cloudflare 仍将监控该池的运行状况,以便管理员可以评估何时能够安全地恢复流量。

网络 A/B 测试

最后一个用例也很令人兴奋,就是能够使用权重将非常少的请求吸引到池中。团队是不是刚组建了崭新的数据中心,或许是将所有服务器升级到新的软件版本了?利用加权池,管理员可以使用负载平衡器对其网络有效进行 A/B 测试。仅将 0.05 (5%) 的请求发送到新池,以验证源是否正常运行,然后逐渐增加负载。

我如何开始?

设置负载平衡器时,需要配置一个或多个源池,然后将源放入相应的池。有多个池时,各个池的相对权重将用于分布请求。

要使用仪表板设置加权池,请在流量 > 负载平衡区域中创建负载平衡器。

设置好负载平衡器后,前往源池设置页面。在 “流量转向策略” 下选择随机,然后为每个池分配相对权重。

如果各个权重加总起来不等于 1.00 (100%),也没有关系!我们会在幕后进行计算,确保每个池接收到相对于其他池应接收的流量。

加权池还可以通过 API 进行配置。我们编辑了一个示例来说明 REST API 的相关部分。

  • 负载平衡器应采用的 “steering_policy” 是 random。
  • 每个池都有 UUID,可以为其分配 “pool_weight”。
 {
    "description": "Load Balancer for www.example.com",
    "name": "www.example.com",
    "enabled": true,
    "proxied": true,
    "fallback_pool": "9290f38c5d07c2e2f4df57b1f61d4196",
    "default_pools": [
        "9290f38c5d07c2e2f4df57b1f61d4196",
        "17b5962d775c646f3f9725cbc7a53df4"
    ],
    "steering_policy": "random",
    "random_steering": {
        "pool_weights": {
            "9290f38c5d07c2e2f4df57b1f61d4196": 0.8
        },
        "default_weight": 0.2
    }
}

我们很高兴地推出这项简单而又强大的功能。加权池可以通过不计其数的各种创意新思路加以利用,以便解决负载平衡难题。拥有负载平衡器的所有客户现在就可以使用该功能!

开发人员文档:
https://developers.cloudflare.com/load-balancing/how-to/create-load-balancer/#create-a-load-balancer

API 文档:
https://api.cloudflare.com/#load-balancers-create-load-balancer

We protect entire corporate networks, help customers build Internet-scale applications efficiently, accelerate any website or Internet application, ward off DDoS attacks, keep hackers at bay, and can help you on your journey to Zero Trust.

Visit 1.1.1.1 from any device to get started with our free app that makes your Internet faster and safer.

To learn more about our mission to help build a better Internet, start here. If you're looking for a new career direction, check out our open positions.
简体中文Load Balancing (CN)Product News (CN)Network Services (CN)

Follow on X

Ben Ritter|@bennetworks
Cloudflare|@cloudflare

Related posts