Чтобы ответить на ваш вопрос, нам нужно понять, нужен ли вам объем или ответ, но трудно получить оба одновременно.
Балансировка нагрузки уровня 7 - это балансировка уровня приложений на основе данных, поэтому содержимое данных сетевого пакета необходимо направлять в конечную точку. Вы можете достичь объема (больше пользователей), внедрив маршрутизацию на уровне приложения, уровня обслуживания или уровня ядра.
Масштабируемость - я предполагаю, что у вас не хватает памяти, ресурсов процессора и пропускной способности сети.
Уровень приложения - логика вашего приложения получает пакет приложения и соответственно маршрутизирует.
Уровень обслуживания - ваша системная структура (какой-либо интерфейс) получает пакет, а через модуль - выполняет маршрутизацию (например, пользовательский модуль apache, даже модули сетевого драйвера - например, написание сетевого фильтра)
Уровень ядра - выполняет маршрутизацию на уровне сетевых пакетов.
Чем ближе вы подойдете к металлу, тем лучше будет ваш ответ. Я предлагаю использовать выделенный сервер linux заранее для выполнения маршрутизации - переходите на собственный, а не виртуальный. Используйте несколько или объединенные сетевые адаптеры для глобальной сети и выделенный адаптер для каждой конечной точки (по одному + wan, по одному для каждого подключенного сервера приложений)
Если время отклика важно, тогда вам нужно решение для состояния ядра / супервизора, оно сэкономит вам несколько переключений контекста, но помните, что вам нужно ограничить прыжки любой ценой, и его лучше обслуживать меньше, более крупными компьютерами и вашим масштабируемость всегда будет ограничена. Существует риск использования KTCPVS, он довольно старый и активно не обновляется. Если вы считаете, что он отлично работает, в противном случае рассмотрите возможность записи чего-то похожего на сетевой фильтр, если он работает в состоянии системы.
Если объем важен, но время отклика вторично, реализуйте встроенный в C ++ высокоскоростной коммутатор сокетов, работающий в состоянии проблемы / пользователя. Он прост в обслуживании и обеспечивает наилучшую масштабируемость.
Вам нужно будет создать несколько прототипов, чтобы выяснить, что лучше всего соответствует вашим потребностям.
Заключительные мысли -
Перед выполнением любого из вышеперечисленных сначала убедитесь, что вы оптимизировали свой игровой дизайн. Вы можете знать больше всего этого, я перечисляю это здесь для пользы всех.
(a) сообщения должны удобно помещаться в одном сетевом пакете, для большинства домашних маршрутизаторов менее 1500 байт
(b) Постарайтесь использовать логику маршрутизации в вашем игровом клиенте, а не на ваших серверах. Простая загрузка небольшой таблицы с зонами и IP-адресами для клиента позволит вам отказаться от всего вышеперечисленного.
(c) Постарайтесь ограничить видимость зоны для клиентов, они должны знать только о своих зонах и смежных зонах (если вы реализуете пункт b выше)
Надеюсь, это поможет, извините, я не могу быть более конкретным в отношении KTCPVS.