SNS в SQS против Direct SQS, помещенных в Lambda@Edge Applications
Я изучаю использование Lambda@Edge для помещения событий, сгенерированных из внешних источников, во внутреннюю очередь SQS. Лямбда просто нуждается в том, чтобы преобразовать ее, когда это необходимо, снять руку и уйти. Я бы хотел, чтобы это было как можно быстрее, поэтому мой вопрос: есть ли польза от использования SNS в дополнение к SQS, или я должен просто использовать SQS?
Другими словами, учитывая эти две конфигурации, будет ли один более производительным для конечного пользователя?
A) Запрос поступает в Lambda@Edge, лямбда преобразует запрос и отправляет событие в SNS, SNS помещает событие в SQS.
Б) Запрос поступает в Lambds@Edge, лямбда преобразует запрос и напрямую помещает событие в SQS.
Редактировать:
Я говорю о кросс-регионе.
1 ответ
Межрегиональный SNS-to-SQS будет значительно быстрее, если он настроен, как описано здесь.
Оптимальная конфигурация будет состоять в том, чтобы создать тему SNS с одинаковым именем в каждом регионе AWS и подписать свою очередь SQS (которая предположительно представляет собой одну очередь в одном регионе) на все эти темы.
Когда триггер Lambda@Edge работает, этот код выполняется в области, ближайшей к средству просмотра, и process.env.AWS_REGION
скажет вам, что это за регион, для каждого вызова.
Используйте эту информацию для инициализации клиента SNS и отправки сообщения в тему SNS в этом регионе. SNS немедленно примет сообщение, но доставит его асинхронно (с вашей точки зрения), межрегионально, в очередь SQS - так, чтобы не заблокировать выполнение вашей функции. Выполнение любого межрегионального запроса непосредственно из триггерной функции Lambda, будь то SQS или SNS, увеличит вашу задержку.