Amazon SQS для опроса браузера? - PullRequest
0 голосов
/ 18 февраля 2019

Я хотел бы знать, является ли AWS SQS подходящим сервисом для проведения опроса в браузере.

Например:

1) Пользователь обращается к приложению через браузер и запрашивает большой PDF-файлсгенерированный

2) API отвечает пользователю «ОК» и отправляет запрос в SQS

3) Очередь SQS читается лямбда-выражением, которое генерирует PDF-файл и сохраняет его в S3.

Теперь, в какой-то момент между шагами 2 и 3, пользовательский браузер хочет знать, когда PDF готов (без электронной почты), он мог бы сделать это, опрашивая SQS для определенного идентификатора сообщения (возможно ли это даже?), но у меня есть несколько вопросов:

a) Можно ли и пользователю, и лямбде читать одно и то же сообщение из SQS?А как насчет того, чтобы слишком много пользователей перегружали SQS запросами на опрос?

b) Можно ли редактировать / обновлять сообщение SQS?Как пользователь узнает, что lambda закончила PDF и получит ссылку для скачивания?Может ли лямбда отредактировать сообщение так, чтобы оно содержало ссылку на S3?Если нет, то каким будет рекомендованный способ / сервис AWS для пользователя, чтобы узнать, когда PDF выполняется, не тратя слишком много ресурсов?

И желательно без базы данных только для этого ... Мы действительно не делаему меня слишком много пользователей, но мы пытаемся сделать все правильно и в будущем.

Пометка boto, как я делаю все это в Python ... в конце концов.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Я бы предложил веб-сокеты в качестве метода отправки уведомления обратно в браузер, вместо того чтобы позволить браузеру опрашивать (то есть периодически отправлять вызов API GetObject) для файла PDF в S3.Этот подход поможет вам уведомить браузер, если при генерации PDF произошла ошибка.

Для получения более подробной информации, пожалуйста, посмотрите https://www.youtube.com/watch?v=3SCdzzD0PdQ (от 6:40).

В 10:27 вы найдете диаграмму, которая соответствует тому, что вы пытаетесь достичь (замените компонент DynamoDB на S3).

Я также думаю, что подход на основе Websocket дешевле по сравнению сметод опроса путем сравнения цен S3 [1] с ценами веб-сокетов [2].Но вам нужно будет провести тест (который отражает производственную нагрузку) и проверить его.

[1] https://aws.amazon.com/s3/pricing/#Request_pricing [2] "API WebSocket" в https://aws.amazon.com/api-gateway/pricing/

0 голосов
/ 18 февраля 2019

Вы не хотите использовать SQS для этого - вы можете читать до 10 сообщений за опрос, и если в вашей очереди много сообщений, вы можете (будете) снова и снова видеть одни и те же сообщения, пока продолжаете опросто есть нет гарантии, что вы когда-нибудь увидите их всех.Не говоря уже об аде, в которое вы попадете с тайм-аутами видимости и заставляющими эту работу работать с несколькими клиентами, опрашивающими вашу очередь.

Ваш выходной PDF идет на S3, так что вы можете сделать следующее: пустите лямбду в шаг (2) создать уникальный ключ S3 для выходного PDF и отправить ключ обратно клиенту в ответе «ОК».Затем заставьте клиента опрашивать область вывода, используя этот ключ.Конечно, созданный PDF-файл должен быть написан с использованием этого ключа.

Чтобы опросить из браузера, используйте GetObject.Чтобы это работало, вам нужно настроить CORS на выходной корзине.

...