Инженерлік зерттеу: Folia Threading Core Ядро: Folia 1.21.4 (build 42)
MULTITHREADED TICK ENGINE

Folia архитектурасы: Minecraft әлемін көп ағынға бөлу тәжірибесі

Қысқаша мәні: Minecraft серверлерінің 15 жыл бойғы ең үлкен кемшілігі — бүкіл әлемнің логикасын (мобтар, редстоун, физика) жалғыз бас ағында (Main Thread) орындауы болатын. Folia PaperMC бұл шектеуді түбегейлі жойып, әлемді жеке аймақтарға бөліп, AMD EPYC процессорының 192 ағынына толықтай таратады.

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 блок қашықтықтағы Анархия аумағында шайқасып жүрсе, олар мүлдем бөлек есептеу ағындарында тикаланады. Спавндағы лагтар ешқашан шалғайдағы ойыншының пингі мен фреймтаймына әсер етпейді.

config/folia.yml — ThreadPool және аймақтар конфигурациясы
# 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 инфрақұрылымына айналдыруға мүмкіндік берді.

Блогқа оралу