我正在阅读有关GCP中的速率限制和自动缩放的内容,并且遇到了这个问题:
场景:
-
我创建了一个具有自动缩放
OFF
的实例组ig
. -
我创建了一个负载均衡器
lb1
,详细信息如下: -
lb1
包含一个后端服务bs1
,它指向实例组ig
,并且whole group
的最大RPS设置为1000 . -
前端端口:8080
-
路径规则:/ alpha / *
-
lb1
是外部负载均衡器 -
我创建了一个负载均衡器
lb2
,详细信息如下: -
lb2
包含一个后端服务bs2
,它指向实例组ig
,并且whole group
的最大RPS设置为2000 . -
前端端口:9090
-
路径规则:/ beta / *
-
lb2
是区域负载均衡器
我有的问题:
-
谁将监控两个负载均衡器提供的请求?
-
哪个限制将被授予1000或2000?
-
整体请求(即通过
lb1
和lb2
)是否会受到速率限制,或者是否会对请求流应用个别限制?
1 回答
TL; DR - The RPS is set in the Backend Service,因此每个负载均衡器都有自己的
RPS
限制,与另一个无关 .Google Compute Engine(GCE)将监控负载均衡器所服务的请求,并相应地引导流量,使其保持在后端服务中每个后端的RPS限制范围内 .
相对于第一负载 balancer 器1000和相对于第二负载 balancer 器2000和1000 . 请记住,您分别为
lb1
和lb2
使用了2个单独的后端服务bs1
和bs2
.通过
lb1
forbs1
的请求将符合每个后端VM的最大1000 RPS
. 通过lb2
forbs2
的请求将符合每个后端VM的最大2000 RPS
. 因此,在任何给定的后端VM实例中运行的服务应该至少能够处理3000 RPS
.更长的版本
实例组无法指定RPS,only backend services do . 实例组仅帮助对实例列表进行分组 . 因此,尽管您可以在多个后端服务中使用相同的实例组,但如果您的目标是在多个后端服务之间共享实例,则需要考虑在相应后端服务中设置的
RPS
值 . GCE无法自动解决这个问题 .后端服务理想地表示微服务,其由一组后端VM(来自实例组)服务 . 您应该事先计算单个后端实例(即在VM内运行的服务)可以处理多少RPS以设置此限制 . 如果您打算跨后端服务共享VM,则需要确保最坏情况下的组合
RPS
限制是VM内部服务能够处理的 .Google Compute Engine(GCE)将监控每个后端服务的指标(即您的情况下每秒的请求数),并将其用于负载 balancer . 每个负载均衡器在逻辑上都是不同的,因此负载均衡器之间不会聚合(即使使用相同的实例组) .
maxRate和maxRatePerInstance
在后端服务中,有2 configuration fields related to RPS,一个是
maxRate
,另一个是maxRatePerInstance
.maxRate
可用于设置每组RPS
,而maxRatePerInstance
可用于设置每个实例的RPS
. 看起来两者都可以在需要时结合使用 .以高于指定RPS的速率接收请求
如果您碰巧以高于RPS的速率接收请求且禁用了自动缩放,我在Google Cloud网站上找不到有关确切预期行为的任何文档 . 我能找到的最接近的是this one,它指定负载均衡器会尝试将每个实例保持在指定的
RPS
或低于指定的RPS
. 所以它可能意味着如果请求超过RPS
就会被删除,并且客户端可能会看到基于此的5XX
错误代码之一(可能是502):你可以通过设置一个相当低的
RPS
(如10
或20
)看看会发生什么 . 查看在后端接收请求的时间戳,以确定行为 . 此外,限制可能不会恰好发生在第11或第21个请求上,因此请尝试发送远远超过每秒的数据以验证请求是否被丢弃 .使用自动缩放
如果启用自动缩放,则会自动触发自动缩放器,并根据您在自动缩放器中设置的目标利用率级别扩展实例组中的实例数 .
NOTE: 更新了答案,因为您实际上已指定使用2个单独的后端服务 .