¿Cuál es la mejor manera de manejar 100k trabajos cron en Heroku?

Hay 1440 minutos en un día. Cron puede controlar hasta un minuto para la gestión de tareas. Independientemente del posible alto número de entradas en el crontab, no es factible intentar controlar tantas tareas, ya que su generación probablemente tomaría más de un minuto por minuto.

Hay algunas alternativas interesantes y factibles en otras respuestas. Agregaré dos puntos a esos.

  1. Es posible que su carga de tareas no sea adecuada para la gestión basada en tareas del modelo Heroku, sino un banco de CPU asignado continuamente. Amazon, Digital Ocean o Me gusta podrían ser más útiles.
  2. Dado el alto número de tareas que se disparan, puede ser factible desarrollar su propio despachador de tareas, ya que su caso parece ser un escenario de uso especial con requisitos no estándar. Un controlador central que distribuye las tareas entre las CPU en función de las tasas de cierre de la tarea y la CPU, la memoria, el disco y el número de procesos en la tabla, etc.

Bueno, ciertamente no quieres trabajos cron. Una cola de mensajes es probablemente la mejor solución, pero tendrá que encontrar algo que maneje ese volumen de manera efectiva. Para facilitar su uso, puede considerar AWS Elastic Beanstalk. Para algo rentable, mire cómo ensamblar un clúster RabbitMQ. Puede tomar un poco comprender los conceptos, pero una vez que lo hace, es relativamente fácil de integrar.

Probablemente debería intentar distribuir la carga utilizando una combinación de una cola de mensajería (por ejemplo, RabbitMQ) y un ejecutor de tareas distribuido con funciones de programación (por ejemplo, Apio).

Además, probablemente debería intentar reducir el número de tareas individuales agrupando cosas (esto se puede hacer, por ejemplo, con una tarea periódica de Celery que consume datos de un canal RabbitMQ personalizado).