Задачи могут связываться с конкретными игроками или пользователями виртуального мира. И здесь требование о том, чтобы доступ к данным и коммуникации осуществлялись только через службы, предоставленные инфраструктурой, позволяет нам организовать сбор информации о закономерностях обращений к данным и коммуникаций в игре или мире за некоторый период времени. Располагая такой информацией, можно очень точно оценить оптимальную группировку игроков. Имея возможность перемещать игроков на другие серверы по своему усмотрению, мы можем активно формировать их оптимальную группировку на основании отслеживаемого поведения. Это позволит применить стандартные методы кэширования, хорошо известные в мире баз данных, для сокращения задержек доступа и хранения долгосрочной информации.
На первый взгляд, эта идея сильно напоминает географическую декомпозицию, которая в настоящее время применяется для реализации масштабирования в крупномасштабных играх и виртуальных мирах. Разработчики сервера разбивают мир на области, которые связываются с определенными серверами, и группировка игроков осуществляется по областям. Игроки, находящиеся в одной области, с большей вероятностью будут взаимодействовать друг с другом, нежели с обитателями других областей, а это повышает эффективность их группировки на сервере. Различие заключается в том, что географические декомпозиции осуществляются в ходе разработки игры, а затем материализуются в исходном коде на сервере. Наш метод группировки основан на информации, полученной во время выполнения; он может динамически настраиваться в соответствии с закономерностями игрового процесса или взаимодействий в ходе самой игры. Разница примерно такая же, как между оптимизациями на стадии компиляции и оптимизациями JIT (Just-In-Time). Первые направлены на все возможные запуски программы, а вторые – на конкретный текущий запуск.
Вряд ли нам удастся полностью нивелировать различия между доступом к основной памяти и долгосрочному хранилищу, но мы и не думаем, что нам так уж необходимо превзойти производительность инфраструктур, работающих с основной памятью. Вспомните, что долгосрочное хранение всех данных позволяет нам использовать многопоточную модель (а, следовательно, возможности многоядерного процессора) на сервере. Конечно, параллелизм не будет идеальным (то есть использование каждого дополнительного ядра будет 100-процентным), но мы уверены (и предварительные результаты подкрепляют эту уверенность), что из параллелизма в играх и виртуальных мирах можно извлечь значительную пользу. Если выгода от использования параллелизма превысит величину вводимой задержки, то общая производительность игры или виртуального мира только повысится.
No related posts.