Обработка задержки в распределенных системах реального времени

Я пытаюсь реализовать покерный сервер. HTTP-сервер пересылает пакеты данных на внутренние серверы, которые обрабатывают состояние всех покерных комбинаций. В любой раздаче у игрока есть 10 секунд на действия (ставка, фолд, колл, рейз и т. д.). Если нет ответа в течение 10 секунд, сервер автоматически сбрасывает их. Для проверки того, что прошло 10 секунд, поддерживается список событий, когда действия должны быть получены. Это приоритетная очередь, упорядоченная по времени, и каждая играемая в данный момент покерная рука имеет запись в приоритетной очереди.

Рассмотрим следующий сценарий, так как последнее действие проходит 9,99 секунд, прежде чем следующее действие поступает на http-сервер. К тому времени, когда действие перенаправляется на внутренние серверы, проходит дополнительное время, поэтому в общей сложности прошло 10,1 секунды. Бэкэнд-серверы объявят, что раздача свернута, но я бы хотел, чтобы действие было обработано, поскольку технически оно прибыло на http-сервер через 9,99 секунды. Теперь одним из решений было бы заставить серверные части подождать некоторое дополнительное время, прежде чем объявить, что рука сброшена, чтобы увидеть, произойдет ли действие с отметкой времени 9,99 секунды. Но это приведет к задержке, когда следующий человек в руке начнет действовать.

Цели, которые я хотел бы,

  1. Обрабатывать действия, достигающие http-сервера за 9,99 секунды, вместо того, чтобы складывать руки.
  2. Активно минимизируйте задержку, возникающую из-за того, что вам приходится просто ждать, чтобы «решить» проблему, упомянутую в пункте 1.

Каковы различные решения? Специалистам по распределенным системам известна литература о компромиссах различных решений. Я хотел бы знать различные решения, признанные приемлемыми в литературе по распределенным системам. Не просто различные специальные решения.


person user782220    schedule 28.06.2011    source источник


Ответы (1)


Может быть, на стороне сервера, когда приходит запрос клиента, вы можете взять временную метку? Итак, вы бы взяли временные метки «начало» и «остановка», чтобы измерить ровно 9,9 с?

person Andrew    schedule 25.02.2012