Я пытаюсь реализовать покерный сервер. HTTP-сервер пересылает пакеты данных на внутренние серверы, которые обрабатывают состояние всех покерных комбинаций. В любой раздаче у игрока есть 10 секунд на действия (ставка, фолд, колл, рейз и т. д.). Если нет ответа в течение 10 секунд, сервер автоматически сбрасывает их. Для проверки того, что прошло 10 секунд, поддерживается список событий, когда действия должны быть получены. Это приоритетная очередь, упорядоченная по времени, и каждая играемая в данный момент покерная рука имеет запись в приоритетной очереди.
Рассмотрим следующий сценарий, так как последнее действие проходит 9,99 секунд, прежде чем следующее действие поступает на http-сервер. К тому времени, когда действие перенаправляется на внутренние серверы, проходит дополнительное время, поэтому в общей сложности прошло 10,1 секунды. Бэкэнд-серверы объявят, что раздача свернута, но я бы хотел, чтобы действие было обработано, поскольку технически оно прибыло на http-сервер через 9,99 секунды. Теперь одним из решений было бы заставить серверные части подождать некоторое дополнительное время, прежде чем объявить, что рука сброшена, чтобы увидеть, произойдет ли действие с отметкой времени 9,99 секунды. Но это приведет к задержке, когда следующий человек в руке начнет действовать.
Цели, которые я хотел бы,
- Обрабатывать действия, достигающие http-сервера за 9,99 секунды, вместо того, чтобы складывать руки.
- Активно минимизируйте задержку, возникающую из-за того, что вам приходится просто ждать, чтобы «решить» проблему, упомянутую в пункте 1.
Каковы различные решения? Специалистам по распределенным системам известна литература о компромиссах различных решений. Я хотел бы знать различные решения, признанные приемлемыми в литературе по распределенным системам. Не просто различные специальные решения.