Python 为什么Boto 3偶尔会超时连接到SNS

Python 为什么Boto 3偶尔会超时连接到SNS,python,networking,boto3,amazon-sns,Python,Networking,Boto3,Amazon Sns,我们正在尝试诊断一个偶尔出现的问题,该问题由调用SNS的应用程序引起,导致应用程序超时 我们创建了一个将1000000条消息推送到SNS的测试用例。大多数消息在不到2秒的时间内完成,但偶尔(在30000分之一到100000分之一之间)消息只需要60秒就可以完成——这对于我的用例来说太慢了 我们发现Boto 3有重试逻辑,默认情况下,会等待60秒,然后重试请求-这是我看到的一小部分请求的行为,第一次重试成功 这就是测试: import boto3 session = boto3.Session(p

我们正在尝试诊断一个偶尔出现的问题,该问题由调用SNS的应用程序引起,导致应用程序超时

我们创建了一个将1000000条消息推送到SNS的测试用例。大多数消息在不到2秒的时间内完成,但偶尔(在30000分之一到100000分之一之间)消息只需要60秒就可以完成——这对于我的用例来说太慢了

我们发现Boto 3有重试逻辑,默认情况下,会等待60秒,然后重试请求-这是我看到的一小部分请求的行为,第一次重试成功

这就是测试:

import boto3
session = boto3.Session(profile_name='my-profile', region_name='ap-southeast-2')
sns =  session.client("sns")
topic_arn = "arn:aws:sns:ap-southeast-2:123456789012:my-sns-topic"
for x in range(0, 1000000): 
    response = sns.publish(Message="Test", TopicArn=topic_arn)
为了找出第一个请求失败的原因,我们运行了WireShark跟踪以获取更多信息,并发现了一些有趣的结果

对SNS的大多数请求都是通过
客户端Hello
使用TLSv1.2发起的,然后通过
确认
服务器Hello
快速响应

超时/失败的请求通过
客户机Hello
使用TLSv1启动。这是用
ACK
回答的,但是
服务器你好
-60秒后,我们从客户端看到
FIN,ACK

我们已经确认,当我们只看到约0.001%的
客户机Hello
请求使用TLSv1时,并且无论何时使用TLSv1,请求都会超时

为什么Boto 3偶尔会使用TLSv1来启动连接?这是boto3(boto3 1.11.15、botocore 1.14.15)、Python(3.6.8)、操作系统(AmazonLinux4.14.154-99.181)还是其他版本中的东西?我们可以做些什么来进一步诊断和纠正这种行为

不幸的是,调整重试策略上的阈值对于这个用例来说不是一个有效的解决方案。

也许Boto3文档可以通过使用不同的Python构建和对TLSv1.2的静态引用来帮助您解决这个问题