Масштабируемое сватовство - PullRequest
0 голосов
/ 23 мая 2019

Мы разрабатываем многопользовательский бэкэнд для нашей игры.В нашем бэкэнде есть служба знакомств.Мы используем Heroku, и планируется, что веб-динос будут обрабатывать входящие запросы на установление совпадений в очереди.Затем наши рабочие динамо получат доступ к этой очереди и смогут формировать совпадения, сравнивая пользователей в очереди друг с другом.Пользователи могут сидеть в очереди несколько минут, пока не будет сформировано соответствующее совпадение.Чем дольше пользователь находится в очереди, тем более «гибкими» они являются со своими требованиями к установлению совпадений.

Проблема в том, что мы не уверены, как увеличить масштаб этой операции.Пока у нас есть один рабочий динамо, проблему легко решить.Время от времени (каждую секунду или около того) рабочий dyno повторяет все запросы на установление совпадений в очереди и формирует совпадения между совместимыми пользователями.Любые пользователи, которые не соответствуют друг другу, попадают в очередь, и их требования ослабляются, так что в следующий раз они с большей вероятностью найдут соответствие.Эта операция повторяется бесконечно, непрерывно сопоставляя пользователей друг с другом.

Если мы масштабируем нашего рабочего динамо до 2, проблема становится намного труднее решить.Мы не хотим разделять запросы между несколькими динамо, так как это увеличит время создания матчей и может привести к тому, что игроки упустят хорошие матчи, потому что их идеальное соответствие назначено другому рабочему динамо.Так что в идеале рабочие динамо будут обрабатывать один и тот же пул запросов.Теоретически, они будут постоянно наступать друг другу на ноги - поскольку рабочий динамометрический приемник № 1 формирует матч с 6 игроками, рабочий динамометрический приемник № 2 сам может закончить формирование другого матча с 6 игроками.

Есть ли способ решить эту проблему?

...