Olá, Pensando na seguinte solicitação Tenho várias pessoas disputando o mesmo registro no banco de dados Como uma API ela começa a execução em X tempo e devolve a resposta e Y tempo Pode duas pessoa querendo o prêmio XYZ (que está no banco de dados) no mesmo momento, ou com um delay por exemplo de 50ms terem a resposta SIM eles pegaram o mesmo prêmio, só que vai ver o ganhador na verdade foi o 2° a pegar no mesmo momento, pois o UPDATE dele executou 2° O 3° que executou fora dessa concorrência já vai ter a resposta NÃO.
Pensei em tratar com filas Vi que o laravel tem o queueshttps://laravel.com/docs/10.x/queues A filas não seria para todas as chamadas, pois posso atrasar meu servidor "atoa"
Seria por prêmios as filas
Exemplo no meu banco tenho 5 prêmios Se 50 pessoas clicarem no mesmo tempo não vou ter 1 fila para atender os 50 clicks Vou ter 5 filas no máximo Se 10 tentou o prêmio 1 >>> 10 na mesma fila Se 15 tentou o prêmio 2 >>> 15 na mesma fila Se 05 tentou o prêmio 3 >>> 05 na mesma fila Se 19 tentou o prêmio 4 >>> 19 na mesma fila Se 01 tentou o prêmio 5 >>> 01 na mesma fila
O 1° dos 10 O 1° dos 15 O 1° dos 05 O 1° dos 19 O 1° dos 01 Vão ser respondidos no mesmo momento -> são filas paralelas
A fila que mais vai demorar é a de 19 já que tem mais pessoas mas não vai responder para o 2° de qualquer tentativa que eles também ganhou aquele prêmio
A fila é a melhor opção no laravel para isso?
Vi também que tem o horizon, mas ainda não fui a fundo
Estou aberto a sugestões Obrigado desde já