Лучший способ отправить большое количество текстовых напоминаний с помощью AWS? - PullRequest
1 голос
/ 16 июня 2019

Я пытаюсь отправить огромное количество напоминаний в виде текстовых сообщений, которые хранятся в базе данных MongoDB, которые необходимо отправить в определенное время с точностью до минуты (они будут отправлены с использованием AWS).

В настоящее время идея состоит в том, чтобы использовать AWS, чтобы рабочий-лямбда, который каждую минуту вызывал CloudWatch, извлекал напоминания на текущую минуту и ​​помещал их в очередь SQS, где работники извлекали бы напоминания для отправки.

Проблема в том, что я обеспокоен тем, что напоминания будут отправлены слишком поздно либо из-за количества напоминаний в очереди, либо из-за того, что база данных напоминаний слишком велика, чтобы выполнять запросы достаточно быстро. Итак, первый вопрос: могу ли я сделать запрос в базу данных, скажем, на 5 минут раньше, а затем добавить их в очередь для отправки в точное время? Я знаю, что вы можете добавлять таймеры к сообщениям SQS, но вы не можете указать время, будет ли это лучшим способом сделать это?

Также стоило бы сохранить базу данных всех напоминаний, которые должны произойти, а затем перенести прошлые напоминания в другую базу данных после их добавления в очередь SQS (мне нужно сохранить прошлые напоминания)? Это хороший способ сделать эту систему?

Редактировать: В настоящее время я планирую разработку, поэтому у меня нет никаких узких мест. Мы ожидаем, что в самое загруженное время нам придется отправлять от 300 до 400 напоминаний в минуту, но, по оценкам, база данных будет расти примерно на 100 записей в день.

Ответы [ 2 ]

1 голос
/ 16 июня 2019

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

Предполагая, что ваш боковой поток Монго совершенен и все еще слишком медленный, вы можете добавить задержку к SQS, но она ограничена, из amazon docs :

Задержка по умолчанию (минимальная) для очереди составляет 0 секунд. Максимум 15 минут.

То есть, пока вы можете держать другой процесс лямбда-монго менее 15 минут, с вами все будет в порядке.

Если бы вы добавили больше информации, я был бы рад высказать свое мнение по этому поводу.

0 голосов
/ 16 июня 2019

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

...