Buenas!
Es mi primer tema en este grupo y me gustaría empezar planteando un problema al que todavía no he encontrado una solución que me satisfaga. A ver si alguno puede echar una manita.
Lo que busco es una forma de planificar tareas individuales en el tiempo sin necesidad de usar crones, tareas que pueden ser a corto o a largo plazo, y con garantía de que se ejecuten.
Voy a poner un par de ejemplos de tareas a corto plazo y a largo plazo.
CORTO PLAZO
En una aplicación queremos contar las llamadas al api de cada usuario (llamadas totales a lo largo de la historia).
Para eso tenemos una columna en la tabla users de mysql con un contador.
Un listener del kernel.request se ocupa de contar, pero para evitar los masivos updates tenemos una key en redis por cada usuario a la que le hacemos un incr y le seteamos el ttl en time()+3600
Hay que tener en cuenta el detalle de que si un usuario accede a las 11:00 y programo la sincronización de sus accesos para las 12:00, si accede a las 11:15 debería ser capaz de obtener el evento programado y actualizar su hora de ejecución.
LARGO PLAZO
Un usuario A se suscribe al premium de Armazon hoy a las 13:32:23UTC (suscripción anual) y queremos que el próximo cargo en su tarjeta se haga exactamente en un año
Un usuario B se suscribe al premium de Armazon hoy a las 11:02:02UTC (suscripción trimestral) y queremos que el próximo cargo en su tarjeta se haga exactamente en tres meses
Hay que tener en cuenta que si el usuario B decide cancelar su suscripción el sistema tendría que ser capaz de eliminar el evento programado.
Lógicamente, el ejemplo de largo plazo se podría resolver con un cron sin problemas, pero el de corto plazo, con miles de usuarios concurrentes ya no es tan sencillo.
A ver si hay suerte y alguien responde con un mensaje del estilo "tontolaba, eso exactamente es lo que hace
anticron666.io", en ese caso aceptare gustoso mi derrota y deberé una cerveza al vencedor.
Un saludo