Folia архитектурасы: Minecraft әлемін көп ағынға бөлу тәжірибесі
1. Дәстүрлі бір ағынды Bukkit/Paper архитектурасының шегі
Spigot немесе Paper секілді стандартты серверлік ядроларда бір секунд 20 тиктен тұрады (әр тиктің уақыт лимиті — 50 миллисекунд). Егер сервердегі белсенді ойыншылар саны 150-ден асып, әр жерде фермалар мен үлкен PvP шайқастары жүріп жатса, бір тикке кететін уақыт (MSPT) 50 мс шегінен асып кетеді. Нәтижесінде TPS 10-14-ке дейін төмендеп, ойыншыларда қозғалыстың кері серпілуі (Rubberbanding) орын алады.
Процессорда тіпті 64 ядро болса да, қарапайым Minecraft оның тек 1 ядросын 100% жүктеп, қалған 63 ядросын бос ұстайды. MineGamers кластерінде біз бұл мәселені шешу үшін Folia ядросына көштік.
2. Аймақтық тикинг (Region-based multi-threading) қағидаты
Folia негізгі ойын әлемін бір-бірімен байланыспайтын дербес «Аймақтарға» (Regions) бөледі. Әрбір аймақ белгілі бір чанктар тобын және сондағы ойыншыларды, құбыжықтарды, снарядтарды біріктіреді.
Егер бір ойыншы Спавнда сауда жасап жатса, ал екіншісі 5000 блок қашықтықтағы Анархия аумағында шайқасып жүрсе, олар мүлдем бөлек есептеу ағындарында тикаланады. Спавндағы лагтар ешқашан шалғайдағы ойыншының пингі мен фреймтаймына әсер етпейді.
# MineGamers Pro - Folia High-Concurrency Tuning for Dual EPYC 9654
threading:
# Процессордың физикалық NUMA ядроларына сәйкес ағындар пулы
max-threads: 64
region-tick-interval-ms: 50
tick-thread-priority: 8
chunk-system:
# Чанктарды асинхронды жүктеу мен жарықтандыру (Starlight engine)
worker-threads: 16
io-threads: 8
gen-parallelism: 24
world-settings:
anarchy_realm:
# Аймақтар арасындағы шекаралық буфер көлемі (чанкпен)
region-distance: 3
# Мобтардың жасанды интеллектін (AI) асинхронды өңдеу
async-entity-tracker: true
merge-radius:
item: 4.0
exp: 6.0
3. Деректер қауіпсіздігі мен шекаралық ауысулар (Chunk Boundary Crossing)
Көп ағынды модельдің басты қиындығы — ойыншы немесе жебе бір аймақтан екінші аймақтың шекарасына өткенде туындайтын Race Condition қаупі. Folia мұны ThreadedRegionizer механизмдері арқылы шешеді:
- Екі аймақ шекарасы түйіскенде, олар уақытша бірыңғай «Megaregion» кластеріне біріктіріледі;
- Барлық ойыншылардың инвентары мен деректері Lock-Free деректер құрылымдары арқылы қорғалады;
- Әрбір аймақ өз жеке Tick Loop циклін дербес кідіріссіз орындайды.
4. Өндірістік сынақ нәтижелері
Алматыдағы ALA-CORE-01 түйінінде 600 ойыншы бір уақытта қосылған стресс-тест барысында:
- Қалыпты Paper 1.21.4: 180 ойыншыда TPS 11.4-ке дейін төмендеді, MSPT 88 мс құрады;
- MineGamers Folia 1.21.4: 600 ойыншыда орташа жылдамдық 19.98 – 20.00 TPS деңгейінде тұрақты сақталды (MSPT небәрі 8.86 мс).
Folia технологиясы server.minegamers.pro кластерін бүкіл Орталық Азиядағы ең жылдам және ірі Minecraft инфрақұрылымына айналдыруға мүмкіндік берді.