Почему Boto 3 иногда прерывает соединение с SNS? - PullRequest
2 голосов
/ 18 февраля 2020

Мы пытаемся диагностировать случайную проблему, которая возникает в приложении, вызывающем SNS, что приводит к тайм-аутам приложения.

Мы создали тестовый пример, который помещает 1 000 000 сообщений в SNS. Большинство сообщений go проходят менее чем за 2 секунды, но иногда (где-то между 1 на 30 000 и 1 на 100 000) сообщение занимает чуть более 60 секунд - это слишком медленно для моего варианта использования.

Мы обнаружили, что Boto 3 имеет логи повторных попыток c, которые по умолчанию будут ожидать 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 инициируются с Client Hello, используя TLSv1.2 , и быстро отвечают ACK, а затем Server Hello.

Запросы, время ожидания / сбоя которых инициируется с Client Hello с использованием TLSv1 . На этот вопрос отвечает ACK, но нет Server Hello - через 60 секунд мы видим FIN, ACK от клиента.

enter image description here

Мы подтвердили, что когда мы видим, что TLSv1 используется только для ~ 0,001% Client Hello запросов, и что всякий раз, когда используется 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) или где-либо еще? Что мы можем сделать для дальнейшей диагностики и исправления поведения?

К сожалению, корректировка пороговых значений политики повторных попыток не является допустимым решением для этого варианта использования.

...