负载测试 kubernetes 服务(使用 istio 服务网格)
load testing kubernetes service (with istio service mesh)
当负载测试通过 istio 完成路由的 kubernetes 服务时,集群中的所有服务都变得无响应。当正在进行负载测试的服务出现 100% 故障时,就会发生这种情况。
有什么办法可以避免这种情况吗?我们应该应用 Istio 熔断吗?
简而言之,是的。断路器模式旨在检测端点何时响应缓慢或根本没有响应。
响应缓慢的端点特别麻烦,因为正如您已经发现的那样,它可能会导致您的系统延迟。断路器是控制流向端点的代理。如果端点失败或太慢(根据您的配置),代理将打开到容器的电路。
使用 connectionPool
参数,您可以设置要在正在建立的请求上挂起的请求数。如果将 http1MaxPendingRequests
设置为 1 并将 maxRequestsPerConnection
设置为 1
在处理未决请求之前,任何其他请求都将被拒绝。
另一个有用的选项是 OutlierDetection。它会检测故障实例,然后使其在预先配置的时间内不可用(有时称为睡眠 window)。当容器处于该时间段时,它被排除在路由和负载平衡之外,并且有时间恢复,同时不会因更多请求而过载。
outlierDetection:
consecutive5xxErrors: 7
interval: 5m
baseEjectionTime: 15m
以上配置要求系统每 5 分钟扫描一次主机,如果连续 7 次失败,它将被弹出 15 分钟。
当负载测试通过 istio 完成路由的 kubernetes 服务时,集群中的所有服务都变得无响应。当正在进行负载测试的服务出现 100% 故障时,就会发生这种情况。
有什么办法可以避免这种情况吗?我们应该应用 Istio 熔断吗?
简而言之,是的。断路器模式旨在检测端点何时响应缓慢或根本没有响应。
响应缓慢的端点特别麻烦,因为正如您已经发现的那样,它可能会导致您的系统延迟。断路器是控制流向端点的代理。如果端点失败或太慢(根据您的配置),代理将打开到容器的电路。
使用 connectionPool
参数,您可以设置要在正在建立的请求上挂起的请求数。如果将 http1MaxPendingRequests
设置为 1 并将 maxRequestsPerConnection
设置为 1
在处理未决请求之前,任何其他请求都将被拒绝。
另一个有用的选项是 OutlierDetection。它会检测故障实例,然后使其在预先配置的时间内不可用(有时称为睡眠 window)。当容器处于该时间段时,它被排除在路由和负载平衡之外,并且有时间恢复,同时不会因更多请求而过载。
outlierDetection:
consecutive5xxErrors: 7
interval: 5m
baseEjectionTime: 15m
以上配置要求系统每 5 分钟扫描一次主机,如果连续 7 次失败,它将被弹出 15 分钟。