IBM Cloud LBaaS 中的空闲连接超时限制导致我们的应用程序出现问题

Idle connection timeout limitation in IBM Cloud LBaaS causes problems in our applications

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

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

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

任何有关如何 resolve/eliminate 的建议都将不胜感激。如果您有任何要分享的,请随时直接给我发电子邮件 (yang.zhang3@ibm.com)。谢谢!

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

Server-side & Client-side idle connection timeout value now can be configured using API. User can configure server timeout(ParameterName: serverTimeout) & client timeout(ParameterName: clientTimeout) value in seconds upto 2 hours (Range: 1 to 7200 seconds) using ‘UpdateLoadBalancerProtocols’ method of ‘SoftLayer_Network_LBaaS_Listener’ service. If user does not provide the server or client timeout value, load balancer will use default value (mentioned in table) for the corresponding timeout.

有关如何使用 UpdateLoadBalancerProtocols 方法的示例,请查看 API reference documentation

中提到的这个 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))