GCP: лучший способ отправки запланированных уведомлений

Я работаю над приложением, напоминающим напоминания, которому нужно будет отправлять уведомления в определенное время. По сути, пользователи будут создавать какие-то напоминания, и мне нужно будет отправлять уведомления в указанное время. Я использую Firebase Cloud Messaging для отправки уведомлений.

Что я имею в виду прямо сейчас, так это хранить все запросы в моей базе данных и иметь службы «краулеров», которые будут запускаться каждый день для проверки всех запросов и отправки уведомлений, если это необходимо.

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

Я открыт для всех решений, но предпочитаю что-то из Google Cloud.

Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
2
0
443
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать функцию Firebase с облачным планировщиком в качестве триггера.

Допустим, вы настроили этот планировщик на запуск каждую минуту. Это по-прежнему 1 * 60 * 24 * 30 = 43200 запусков функции каждые 30 дней. Это все еще очень мало по сравнению с ценами на Firebase/G Cloud Functions.

Я делаю что-то подобное.

Я использую Firebase Firestore (так же, как Cloud Firestore).

Для каждого пользователя у меня есть поле time_to_send. Когда функция запускается, она запрашивает пользователей, у которых значение « time_to_send » меньше (в прошлом) или равно << Сейчас >>.

Для этих пользователей (обычно их немного, потому что они запускаются каждую минуту) функция отправляет уведомление и обновляет « time_to_send » до значения в будущем (в следующий раз, когда они должны быть уведомлены).

Это означает, что с точки зрения затрат вы должны рассчитать:

  • 43,2 тыс. запланированных функций в месяц
  • (Количество пользователей) X (среднее количество уведомлений на пользователя в месяц) X (1 чтение базы данных + 1 запись в базу данных)

Вам придется рассчитать, доступен ли вам этот подход или нет.

Если вы используете Google Cloud, лучше всего использовать Cloud Task . Вы можете создать задачу с датой срабатывания в будущем, первая функция, упомянутая здесь

Просто создайте задачу, указав дату и время, а также требуемые параметры. В день «Д» эта задача вызовет конечную точку HTTP с параметрами. Итак, просто создайте функцию, готовую к вызову и выполнению задания. Пусть Cloud Task будет управлять триггером в будущем.

Другие вопросы по теме