Я бы написал keep alive как отдельный автономный фрагмент кода, который будет вызывать keep alive каждый x номер в течение секунд в течение y количества времени, прежде чем завершать сам себя, где x, y и конечная точка keep alive являются параметрами запуска .
Каждый раз, когда пользователь запускает запрос, отключите один из них в фоновом режиме. Как вы упаковываете, это определяется в вашей среде развертывания и как вы собираетесь управлять масштабированием (фоновый поток, новый процесс, бессерверная функция и т. Д. c.).
Возможно, вам потребуется поддерживать какое-то состояние информация в кеше для целей управления (не запускайте новый, если он уже запущен, зависшие состояния процесса и т. д. c.).