首页 > 解决方案 > IBM Cloud LBaaS 中的空闲连接超时限制会导致我们的应用程序出现问题

问题描述

我们是一个使用 IBM Cloud LBaaS(负载均衡器服务)的 IBM 团队,用于我们在 IBM Cloud 基础架构上运行的应用程序。我们收到了一些客户投诉,称无法在我们的产品前端获得预期的响应,这是他们之前在 AWS 上部署我们的产品时从未遇到过的。我们调查了这个问题,发现客户请求的连接被 IBM Cloud 负载均衡器断开了,因为这些请求需要超过 50 秒才能从后端获得响应(这些是我们的一些长时间运行任务的用例)。

我们在这里找到了连接超时的 50 秒限制https://cloud.ibm.com/docs/infrastructure/loadbalancer-service?topic=loadbalancer-service-advanced-traffic-management-with-ibm-cloud-load-balancer #连接超时我们想知道是否可以为我们定制空闲超时来满足我们长时间运行的任务?如果目前不支持,是否有计划在未来实施,或者是否有可能将该限制增加到合理的更大值?

FYR, AWS负载均衡器服务的最大空闲超时为3600 秒https ://aws.amazon.com/blogs/aws/elb-idle-timeout-control/ 。

任何有关如何解决/消除此问题的建议表示赞赏。如果您有任何要分享的内容,请随时直接给我发电子邮件 (yang.zhang3@ibm.com)。谢谢!

标签: ibm-cloudload-balancing

解决方案


如果您提到空闲连接超时,则在同一文档链接中提到您可以将服务器和客户端超时设置为 7200 秒(2 小时)。

服务器端和客户端空闲连接超时值现在可以使用 API 进行配置。用户可以使用“SoftLayer_Network_LBaaS_Listener”服务的“UpdateLoadBalancerProtocols”方法配置服务器超时(参数名称:serverTimeout)和客户端超时(参数名称:clientTimeout)值,以秒为单位最长 2 小时(范围:1 到 7200 秒)。如果用户没有提供服务器或客户端的超时值,负载均衡器将使用默认值(在表中提到)作为相应的超时值。

有关如何使用该方法的示例,请查看API 参考文档UpdateLoadBalancerProtocols中提到的这个 softlayer-python 客户端示例

import SoftLayer
from pprint import pprint

# Your load balancer UUID
uuid = 'set me'

# New protocols to add
protocolConfigurations = [
    {
        "backendPort": 1350,
        "backendProtocol": "TCP",
        "frontendPort": 1450,
        "frontendProtocol": "TCP",
        "loadBalancingMethod": "WEIGHTED_RR",    # ROUNDROBIN, LEASTCONNECTION, WEIGHTED_RR
        "maxConn": 500,
        "sessionType": "SOURCE_IP"
    },
    {
        "backendPort": 1200,
        "backendProtocol": "HTTP",
        "frontendPort": 1150,
        "frontendProtocol": "HTTP",
        "loadBalancingMethod": "ROUNDROBIN",    # ROUNDROBIN, LEASTCONNECTION, WEIGHTED_RR
        "maxConn": 1000,
        "sessionType": "SOURCE_IP",
        "serverTimeout": 70,
        "clientTimeout": 70
    }
]

# Create the api client
client = SoftLayer.Client()
listener_service = client['Network_LBaaS_Listener']

_mask = "mask[listeners]"

try:
    response = listener_service.updateLoadBalancerProtocols(uuid, protocolConfigurations, mask=mask)
    pprint(response)
except SoftLayer.SoftLayerAPIError as e:            
    print("Unable to add protocols: %s, %s" % (e.faultCode, e.faultString))

推荐阅读