Перформанс в мережевих іграх

Привіт друзі! Сподіваюсь, ви всі в безпеці. Закриваю обіцяний гештальт.

Я дуже люблю відео ігри. Граю в ігри різних жанрів (окрім, хіба що, MMO – часу на ігри небагато, а ММО – то як ще одна робота). І звісно ж, мені дуже цікаво, як ігри створюють та тестують (навіть робив колись пост про те, як тестували God of War, так сильно мені той матеріал сподобався)
Досить давно ще читав статтю (в EVE я теж не грав 🤷‍♂️), як в мультиплеєрній грі EVE Online розробники частково вирішили проблему з перформансом. Нажаль, оригінал знайти я не зміг, тому розкажу по пом’яті та те, що прочитав в офіційній документації. Але спочатку трохи загальної теорії для контексту.

В абсолютній більшості мережевих ігр є сервер, що обробляє логіку світу та синхронізує дії гравців та клієнти, що відображують ігровий світ для гравця та дають змогу з ним взаємодіяти. Більше гравців – більше навантаження на сервер, оскільки всім клієнтам треба повернути актуальну інфу про стан ігрового світу та нові команди обробити. І все це в реальному часі. Типове рішення проблеми навантаження – масштабування та розумна кластеризація! Більше гравців – більше серверів. А оскільки кожен гравець не може бачити весь ігровий світ одночасно, а лише його невелику частину (місто, підземелля, зоряну систему), то всіх гравців в цій локації можна згрупувати на одному фізичному чи віртуальному сервері. Проблеми починаються, коли багато гравців з усього світу збираються в одному місці для якоїсь події…

І тут я нарешті дійшов до EVE Online – що ж такого придумали розробники, щоб сервери краще тримали навантаження? Рішення називається Time Dilation. Механізм досить складний, але якщо пояснити його простими словами – при збільшенні навантаження сервер СПОВІЛЬНЮЄ ЧАС! Всі дії гравців збираються в черги і сервер потроху їх обраховує. А гравці в цей час насолоджуються космічними краєвидами, планують без поспіху всі свої дії.

Вперше я про це прочитав в статі, в якій описувалась наймасштабніша космічна битва усіх часів – тисячи гравців на різноманітних кораблях, малих та великих почали стріляти одне в одного, маневрувати, взаємодіяти. І сервер зменшив час щось до 5% від реального. Але не впав! Опрацював битву від початку і до кінця. Поступово прискорюючи плин часу, коли гравці почали втрачати кораблі чи тікати.

Такі приклади вчать мене завжди мислити нестандартно, коли типові рішення не допомагають, оригінальні можуть допомогти!

Позначки:, ,
2 Травня 2022
Автор: 
  • CTFL 1. Fundamentals of Testing
  • Як я Android додаток писав
  • Подарунки до дня народження каналу
  • Рівні логування

Залишити коментар

Залишити вiдгук