Для начала, если вы хотите выполнять миллионы крошечных работ, вы очень быстро преодолеете бесплатную квоту, как бы вы на это ни смотрели. Бесплатная квота предназначена для тестирования.
Это зависит от степени детализации ваших задач. Если вы выполняете много задач один раз в день, cron, подключенный к операции mapreduce (которая, по сути, отправляет кучу задач в очереди задач), работает нормально. Вы в основном выдаете запрос к хранилищу данных, чтобы найти задачи, которые необходимо выполнить, и отправляете их на mapreduce.
Если вы выполняете эту задачу тысячи раз в день (каждую минуту), она может стать дорогостоящей, поскольку вы выполняете много запросов. Обратите внимание, что даже если большинство этих запросов ничего не возвращает, стоимость по-прежнему минимальна.
Другой вариант — хранить ваши задачи в памяти, а не в хранилище данных, где вы хотели бы начать использовать серверные части. Но бэкенды дороги в обслуживании. Попробуйте использовать Google Compute Engine, который дает гораздо более дешевые виртуальные машины.
РЕДАКТИРОВАТЬ:
Если вы пойдете по маршруту cron/datastore, вы будете сохранять новую сущность всякий раз, когда пользователь хочет отправить отложенное сообщение. Самое главное, у него будет запрашиваемая временная метка, когда сообщение должно быть отправлено, возможно, округленное до ближайшей минуты или до ближайших 5 минут, независимо от того, какой вы решите, что ваша детализация должна быть.
Тогда у вас будет задание cron, которое запускается с заданным интервалом, скажем, каждую минуту. При каждом запуске он будет создавать запрос для всех заданий cron, которые необходимо отправить в данную минуту.
Если вам действительно нужно отправлять сотни тысяч сообщений каждую минуту, вам не захочется делать это из задачи cron. Вы бы хотели, чтобы задача cron порождала задание mapreduce, которое будет разветвлять запрос и порождать задачи для отправки ваших сообщений.
person
dragonx
schedule
25.06.2013