防止单个客户过载的内容负载平衡器

Content Load Balancer that prevent single customer overload

我正在寻找一个负载均衡器,它将根据用户引导负载。

例如,我有一个 REST API 支持 3 种不同的文档类型和 10 个服务器,每个文档类型不能占用超过 5 个服务器,或者另一个选项,每个文档类型被赋予 3 个服务器每个。我不想丢失请求,而是尽可能将它们排队。 我很确定这样的负载均衡器已经存在,但我找不到 it/an 实现的名称。或者更好的是,是否有一个 AWS ELB 已经能够处理这个问题?

您可以将 Web 应用程序防火墙放在应用程序负载均衡器前面,然后使用类似这样的规则来阻止超过指定 5 分钟规则的流量。

{
  "Priority": 0,
  "Action": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": { "Fn::Sub": "${Site}-Overall-Rate-Limit" }
  },
  "Name": { "Fn::Sub": "${Site}-Overall-Rate-Limit" },
  "Statement": {
    "RateBasedStatement": {
      "Limit": { "Ref": "OverallRateLimit" },
      "AggregateKeyType": "IP"
    }
  }
}

请注意,WAF 不是免费的。您为 ACL 和规则评估付费。

此处的另一种选择是使用像 cloudfront 这样的 CDN 来卸载向用户交付的内容。 DOS 像 cloudfront 这样的 CDN 几乎是不可能的。这种方法是否适合您取决于您​​的内容是静态和共享的,还是动态的且对客户独有的。


阅读您的编辑后,我将为您提供另一条路径。如果您的目标是 路由 不同的流量到不同的服务器,您可以使用 ALB 侦听器规则来实现。 https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-update-rules.html

您必须给用户一个 header 才能将他们路由到后端的正确目标组。

您可以使用粘性会话将它们保留在特定服务器上,但这可能有其自身的含义。