gpt4 book ai didi

python - 为什么Boto 3连接SNS偶尔会超时

转载 作者:行者123 更新时间:2023-12-04 04:17:38 24 4
gpt4 key购买 nike

我们正在尝试诊断调用 SNS 的应用程序偶尔出现的问题,导致应用程序超时。

我们创建了一个将 1,000,000 条消息推送到 SNS 的测试用例。大多数消息在 2 秒内通过,但偶尔(大约在 30,000 分之一到 100,000 分之一之间)消息只需要 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 的请求都是使用 TLSv1.2Client Hello 发起的,并以 ACK 快速回复,然后Server Hello

超时/失败的请求使用 TLSv1Client Hello 发起。这是用 ACK 回答的,但是没有 Server Hello - 60 秒后我们从客户。

enter image description here

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

为什么 Boto 3 偶尔会使用 TLSv1 发起连接?这是 Boto 3(boto3 1.11.15、botocore 1.14.15)、Python(3.6.8)、操作系统(Amazon Linux 4.14.154-99.181)或其他地方的东西吗?我们可以做些什么来进一步诊断和纠正该行为?

不幸的是,调整重试策略的阈值不是此用例的有效解决方案。

最佳答案

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

https://boto3.amazonaws.com/v1/documentation/api/latest/guide/security.html#enforcing-tls-1-2

关于python - 为什么Boto 3连接SNS偶尔会超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60272233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com