Minecraft սերվերի օպտիմիզացում

Minecraft սերվերի օպտիմիզացում
Մեր բլոգում մենք արդեն ունենք պատմեց, ինչպես ստեղծել սեփական Minecraft սերվերը, բայց դրանից հետո անցել է 5 տարի, և շատ բան է փոխվել։ Մենք ձեզ հետ կիսվում ենք նման հայտնի խաղի սերվերային մասի ստեղծման և օպտիմալացման ընթացիկ եղանակներով:

Իր 9-ամյա պատմության ընթացքում (հաշված թողարկման ամսաթվից) Minecraft-ը վաստակել է զարմանալի թվով երկրպագուներ և ատողներ ինչպես սովորական խաղացողների, այնպես էլ գիքերի շրջանում: Բլոկներից պատրաստված աշխարհի պարզ գաղափարը զվարճանքի պարզ ձևից վերածվել է ունիվերսալ միջոցի՝ իրական աշխարհից տարբեր առարկաներ հաղորդակցվելու և ստեղծելու համար:

Բացի շինարարությունից, խաղն ունի ստեղծագործելու հնարավորություն տրամաբանությունը, որոնք թույլ են տալիս Minecraft-ի ներսում իրականացնել լիարժեք ալգորիթմներ։ YouTube-ը լի է շատ տպավորիչ տեսանյութերով, որտեղ մարդիկ, ահռելի ջանք գործադրելով և շատ ժամանակ ծախսելով, ստեղծել են այս կամ այն ​​էլեկտրոնային սարքի պատճենը կամ պատրաստել մանրամասն պատճեն գոյություն ունեցող и գեղարվեստական ճարտարապետական ​​կառույցներ. Ամեն ինչ սահմանափակվում է միայն խաղացողի երևակայությամբ և խաղային տիեզերքի հնարավորություններով:


Բայց եկեք չխոսենք այն մասին, թե կոնկրետ ինչ են ստեղծում խաղացողները, բայց եկեք նայենք հավելվածի սերվերային մասին և ընդգծենք այն խնդիրները (երբեմն շատ բարդ), որոնք կարող են առաջանալ բեռի տակ շահագործման ընթացքում: Եկեք անմիջապես վերապահենք, որ մենք կխոսենք միայն Java Edition-ի մասին:

Սերվերների տեսակները

Ամենապարզ տարբերակը խաղի հաճախորդի մեջ ներկառուցված սերվերն է: Մենք ստեղծեցինք աշխարհ, սեղմեցինք մեկ կոճակ, և սերվերը հասանելի դարձավ տեղական ցանցի միջոցով: Այս տարբերակը չի կարող դիմակայել որևէ լուրջ բեռի, և, հետևաբար, մենք դա չենք էլ դիտարկի։

Վանիլ

Mojang Studios-ը անվճար տարածում է խաղի սերվերային մասը՝ որպես Java հավելված պաշտոնական կայքում. Սա թույլ է տալիս ստեղծել ձեր սեփականը նվիրված սերվեր և անձնական աշխարհը՝ այն հասանելի դարձնելով մոլորակի ցանկացած կետից կապվելու համար: Նրանց համար, ովքեր դա անում են առաջին անգամ, կա մի մեծ ուսուցողական, հասանելի է համապատասխան խաղային Վիքիում։

Այս մոտեցումը ունի մեկ լուրջ թերություն, այն է, որ պլագինները միացնելու հնարավորությունների բացակայությունը, որոնք ընդլայնում են սերվերի ֆունկցիոնալությունը և թույլ են տալիս ոչ միայն ավտոմատացնել բազմաթիվ գործընթացներ, այլև օպտիմալացնել կատարումը: Բացի այդ, պաշտոնական սերվերն ունի RAM-ի բավականին մեծ սպառում յուրաքանչյուր միացված խաղացողի համար:

Բուկկիտ

Վանիլային տարբերակի հիման վրա ստեղծված էնտուզիաստների կողմից ստեղծված սերվերային հավելված Բուկկիտ զգալիորեն ընդլայնել է խաղի հնարավորությունները՝ աջակցելով պլագիններին և մոդերներին (փոփոխումներ): Այն թույլ էր տալիս ոչ միայն նոր բլոկներ ավելացնել խաղախաղին, այլև կատարել տարբեր մանիպուլյացիաներ, որոնք անհասանելի էին վանիլային ծրագրերի համար։ Հետաքրքիր է, որ այս հավելվածը զգալիորեն ավելի քիչ հիշողություն էր պահանջում:

Bukkit-ի տեղադրումը դժվար չէ, համապատասխան հրահանգները գտնվում են ռեսուրսի վրա GamePedia. Բայց դա անիմաստ է, քանի որ 2014 թվականից Bukkit թիմը ցրվել է, նախագծի մշակողները դարձել են Mojang Studios-ի աշխատակիցներ, և պահոց լքված. Այսպիսով, Bukkit-ը փաստացի մեռած է, և իմաստ ունի ուշադրություն դարձնել հաջորդ երկու նախագծերին:

SpigotMC

Փլագինների մշակողների կյանքը հեշտացնելու համար API-ի կարիք կար՝ խաղի աշխարհի հետ փոխազդելու համար: Սա հենց այն խնդիրն է, որ լուծեցին ստեղծողները։ Spigot, վերցնելով Bukkit միջուկը և վերամշակելով այն՝ ավելի լավ հուսալիության և կատարողականության հասնելու համար: Այնուամենայնիվ, Git պահոց նախագիծն արգելափակվել է Թվային հազարամյակի հեղինակային իրավունքի մասին օրենքի պատճառով (ԹԴՀԻ), և այնտեղից հնարավոր չէ ներբեռնել սկզբնական կոդը։

Ներկայումս SpigotMC-ն ակտիվորեն մշակվում և օգտագործվում է: Այն աջակցում է Bukkit-ի համար ստեղծված բոլոր պլագիններին, բայց հետընթաց համատեղելի չէ դրա հետ: DMCA Takedown-ը շրջանցելու համար հորինվել է էլեգանտ մեթոդ, որը կոչվում է BuildTools: Այս գործիքը վերացնում է կազմված հավելվածը տարածելու անհրաժեշտությունը և թույլ է տալիս օգտվողներին կազմել Spigot, CraftBukkit և Bukkit սկզբնական կոդից: Այս ամենն անօգուտ է դարձնում DMCA արգելքը:

PaperMC

Ամեն ինչ թույն էր թվում, և Spigot-ը դարձավ հիանալի տարբերակ: Բայց սա բավարար չէր որոշ էնտուզիաստների համար, և նրանք ստեղծեցին Spigot-ի իրենց պատառաքաղը «ստերոիդների վրա»: Վրա նախագծի էջ հիմնական առավելությունն այն է, որ «Դա հիմար է արագ»: Մշակված է համայնք թույլ է տալիս արագ լուծել առաջացող խնդիրները, իսկ ընդլայնված API-ն թույլ է տալիս ստեղծել հետաքրքիր պլագիններ: Դուք կարող եք գործարկել PaperMC-ն մեկ պարզ հրամանով, որը տրվում է փաստաթղթավորում.

PaperMC-ն ունի հիանալի համատեղելիություն, ուստի SpigotMC-ի համար գրված պլագինները կարող են հեշտությամբ աշխատել PaperMC-ում, բայց առանց պաշտոնական աջակցության: Հետևյալ համատեղելիությունը SpigotMC-ի հետ նույնպես առկա է: Այժմ, երբ մենք թվարկեցինք սերվեր ստեղծելու տարբեր տարբերակներ, եկեք անցնենք կատարողականի խնդիրներին, որոնք կարող են առաջանալ:

Խնդիրներ և լուծումներ

Հիմնական բանը, որ դուք պետք է հասկանաք, այն է, որ այն ամենը, ինչ կապված է խաղի աշխարհի մշակման հետ, կմշակվի միայն ֆիզիկական սերվերի մեկ հաշվողական միջուկի վրա: Այսպիսով, եթե հանկարծ դուք ունենաք գերազանց սերվեր մեկ տասնյակ հաշվողական միջուկներով, ապա միայն մեկը կբեռնվի: Մնացած բոլորը գործնականում պարապ կմնան: Սա հավելվածի ճարտարապետությունն է, և դուք ոչինչ չեք կարող անել դրա դեմ: Այսպիսով, սերվեր ընտրելիս պետք է ուշադրություն դարձնել ոչ թե միջուկների քանակին, այլ ժամացույցի հաճախականությանը։ Որքան բարձր լինի, այնքան ավելի լավ կլինի կատարողականը:

Ինչ վերաբերում է RAM-ի հզորության հարցին, ապա պետք է ելնել հետևյալ ցուցանիշներից.

  • պլանավորված խաղացողների քանակը;
  • սերվերի վրա նախատեսված աշխարհների քանակը.
  • յուրաքանչյուր աշխարհի չափը:

Պետք է հիշել, որ Java հավելվածին միշտ անհրաժեշտ է RAM-ի պահուստ: Եթե ​​ակնկալում եք 8 գիգաբայթ հիշողության սպառում, ապա իրականում պետք է ունենալ 12: Թվերը հարաբերական են, բայց էությունը չի փոխվում:

Սերվերի մասը սկսելու համար խորհուրդ ենք տալիս օգտագործել հոդվածում նշված դրոշները Կարգավորելով JVM – G1GC աղբահանող դրոշները Minecraft-ի համար. Այս «սև մոգությունը» թույլ է տալիս սերվերին ճիշտ կարգավորել «աղբի հավաքիչը» և օպտիմիզացնել RAM-ի օգտագործումը: Դուք չպետք է ավելի շատ հիշողություն հատկացնեք, քան սերվերը իրականում սպառում է խաղացողների գագաթնակետային հոսքի ժամանակ:

Բլոկային քարտեզի ստեղծում

«Իսկապե՞ս կարծում եք, որ լուսինը գոյություն ունի միայն այն ժամանակ, երբ նայում եք նրան»: (Albert Einstein)

Ամբողջովին նոր սերվեր: Հենց որ խաղացողը հաջողությամբ միանում է առաջին անգամ, խաղի կերպարը հայտնվում է ընդհանուր հավաքման կետում (ձվադրում): Սա միակ վայրն է, որտեղ խաղի աշխարհը նախապես ստեղծվում է սերվերի կողմից: Միևնույն ժամանակ, հաճախորդի մասը նայում է պարամետրերին, և հիմնական պարամետրը գծագրման հեռավորությունն է: Այն չափվում է կտորներով (քարտեզի տարածքը 16×16 է, իսկ բարձրությունը՝ 256 բլոկ)։

Սերվերը պահում է աշխարհի գլոբալ քարտեզը, և եթե դրա մեջ դեռևս չկան գեներացված բլոկներ խաղի կերպարի երևալու կետում, ապա սերվերը դինամիկ կերպով գեներացնում և պահպանում է դրանք։ Սա ոչ միայն պահանջում է մեծ հաշվողական ռեսուրսներ, այլև անընդհատ մեծացնում է աշխարհի քարտեզի չափը: Ամենահին անարխիստական ​​սերվերներից մեկի վրա 2 բ 2 տ (2builders2tools) Քարտեզի չափն արդեն գերազանցել է 8 Tb-ը, իսկ աշխարհի սահմանը մոտ 30 միլիոն բլոկ է: Այս սերվերի հետ կապված հազարավոր պատմություններ կան, և այն արժանի է շարքի իր սեփական հոդվածին:

Մեկ խաղացողի շուրջ աշխարհ ստեղծելը խնդիր չէ: Հարյուրավոր խաղացողների շուրջ աշխարհ ստեղծելը կարճ ժամանակով կհանգեցնի սերվերի փոքր դանդաղումների, որից հետո բեռնվածությունը կնվազի: Հաճախորդների մոտ հազար խաղացողների հեռավորության վրա աշխարհ ստեղծելն արդեն ի վիճակի է «գցել» սերվերը և դուրս շպրտել բոլոր հաճախորդներին դրանից՝ ժամանակի վերջի պատճառով:

Սերվերի ծրագրային ապահովման մեջ կա այնպիսի արժեք, ինչպիսին է TPS- ը (Ticks per Server - ticks per second): Սովորաբար, 1 ժամացույցի ցիկլը հավասար է 50 ms-ի: (Իրական աշխարհի 1 վայրկյանը հավասար է խաղի աշխարհի 20 տիզին): Եթե ​​մեկ տիկի մշակումն ավելանա մինչև 60 վայրկյան, ապա սերվերի հավելվածը կփակվի՝ դուրս շպրտելով բոլոր խաղացողներին:

Լուծումը աշխարհը որոշակի կոորդինատներով սահմանափակելն է և բլոկի նախնական գեներացիան կատարելը: Այսպիսով, մենք հեռացնում ենք խաղի ընթացքում դինամիկ գեներացիայի անհրաժեշտությունը, և սերվերին անհրաժեշտ կլինի կարդալ միայն գոյություն ունեցող քարտեզը: Երկու խնդիրներն էլ կարող են լուծվել մեկ plugin-ով Համաշխարհային սահման.

Ամենահեշտ ձևը աշխարհի սահմանը դնելն է շրջանագծի տեսքով՝ կապված ձվադրման կետի հետ (չնայած այն կարող եք ցանկացած ձևով դարձնել) մեկ հրամանով.

/wb set <радиус в блоках> spawn

Եթե ​​խաղացողի կերպարը փորձի անցնել սահմանը, նա մի քանի բլոկ հետ կմղվի: Եթե ​​դա արվի մի քանի անգամ սահմանափակ ժամանակի ընթացքում, ապա իրավախախտը հարկադրաբար կտեղափոխվի ձվադրման կետ: Աշխարհի նախնական սերունդը կատարվում է ավելի պարզ՝ հրամանով.

/wb fill

Քանի որ այս գործողությունը կարող է ազդել սերվերի խաղացողների վրա, համոզվեք, որ հաստատեք.

/wb confirm

Ընդհանուր առմամբ, մոտավորապես 5000 ժամ պահանջվեց Intel® Xeon® Gold 40 պրոցեսորի վրա 2 բլոկ (~6240 միլիարդ բլոկ) շառավղով աշխարհ ստեղծելու համար: Հետևաբար, եթե ցանկանում եք նախապես ստեղծել ավելի մեծ քարտեզ, տեղյակ եղեք, որ այս գործընթացը բավականաչափ ժամանակ կպահանջի, և սերվերի TPS-ը լրջորեն կկրճատվի: Նաև հիշեք, որ նույնիսկ 5000 բլոկների շառավիղը կպահանջի մոտավորապես 2 ԳԲ սկավառակի տարածություն:

Չնայած այն հանգամանքին, որ հավելվածի վերջին տարբերակը մշակվել է Minecraft 1.14 տարբերակի համար, փորձնականորեն պարզվել է, որ այն հիանալի է աշխատում հետագա տարբերակների վրա: Հրամանների ամբողջական ցանկը՝ բացատրություններով plugin ֆորումում.

Խնդրի բլոկներ

Minecraft-ում բլոկների մեծ բազմազանություն կա: Այնուամենայնիվ, մենք կցանկանայինք ընթերցողների ուշադրությունը հրավիրել այնպիսի բլոկի վրա, ինչպիսին է TNT. Ինչպես անունն է հուշում, այս բլոկը պայթուցիկ է (խմբագրի նշում. սա վիրտուալ աշխարհի խաղային տարր է, և այս նյութը իրական պայթուցիկներով ոչինչ չունի). Նրա յուրահատկությունն այնպիսին է, որ ակտիվացման պահին նրա վրա սկսում է գործել ձգողության ուժը։ Սա ստիպում է սերվերին հաշվարկել բոլոր կոորդինատները, եթե այս պահին բլոկը սկսում է ընկնել:

Եթե ​​կան մի քանի տրոտիլ բլոկներ, ապա մեկ բլոկի պայթեցումը առաջացնում է պայթյուն և ձգողականության ակտիվացում հարեւան բլոկներում՝ դրանք ցրելով բոլոր ուղղություններով։ Սերվերի կողմից այս բոլոր գեղեցիկ մեխանիզմները նման են բազմաթիվ գործողությունների՝ յուրաքանչյուր բլոկի հետագիծը հաշվարկելու, ինչպես նաև հարևան բլոկների հետ փոխազդեցության համար: Խնդիրը չափազանց ռեսուրսային է, որը յուրաքանչյուրը կարող է հեշտությամբ ստուգել: Ստեղծեք և պայթեցրեք TNT բլոկներից առնվազն 30x30x30 չափի խորանարդ: Իսկ եթե կարծում էիք, որ լավ, հզոր խաղային համակարգիչ ունեք, շատ եք սխալվել

/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt

Minecraft սերվերի օպտիմիզացում
Նմանատիպ «փորձը» սերվերի վրա Intel® Xeon® Gold 6240-ով հանգեցրեց TPS-ի լուրջ անկման և 80% պրոցեսորի բեռնվածության ամբողջ բլոկի պայթյունի ժամանակ: Հետևաբար, եթե որևէ խաղացող կարողանա դա անել, ապա կատարողականի խնդիրը կազդի սերվերի բոլոր խաղացողների վրա:

Նույնիսկ ավելի կոշտ տարբերակ. Եզրային բյուրեղներ. Եթե ​​TNT-ն այնուամենայնիվ պայթում է հաջորդաբար, ապա Edge Crystals-ը պայթում է բոլորը միաժամանակ, ինչը տեսականորեն կարող է ամբողջությամբ դադարեցնել սերվերի հավելվածի աշխատանքը:

Այս սցենարից կարելի է խուսափել միայն խաղի աշխարհում այս բլոկների օգտագործումը ամբողջությամբ արգելելով: Օրինակ, օգտագործելով plugin Համաշխարհային պահակ. Խնդրում ենք նկատի ունենալ, որ այս փլագինը ինքնին չի աշխատում առանց մեկ այլ հավելվածի Worldedit- ը. Այսպիսով, նախ տեղադրեք WorldEdit-ը, այնուհետև WorldGuard-ը:

Ամփոփում

Խաղի սերվերի ճիշտ կառավարումը հեշտ գործ չէ: Դժվարություններ և կատարողականի անկում կսպասեն ձեզ ամեն քայլափոխի, հատկապես, եթե հաշվի չեք առնում հենց խաղի մեխանիզմը: Անհնար է ամեն ինչ կանխատեսել, քանի որ խաղացողները երբեմն կարող են շատ ստեղծագործ լինել՝ փորձելով ստիպել սերվերին անել մի բան, որի համար դա նախատեսված չէր: Միայն ռիսկերի և սահմանված սահմանափակումների միջև ողջամիտ հավասարակշռությունը թույլ կտա սերվերին շարունակաբար աշխատել և չնվազեցնել իր կատարումը մինչև կրիտիկական արժեքներ:

Կարանտինի ժամանակ մեր աշխատակիցներից ոմանք բաց թողեցին իրենց սիրելի գրասենյակները և որոշեցին դրանք վերստեղծել Minecraft-ի ներսում: Դուք նաև հնարավորություն ունեք այցելել մեզ՝ առանց ձեր առողջությունը վտանգի ենթարկելու կամ ճանապարհին ժամանակ կորցնելու:

Դա անելու համար մենք բոլորին հրավիրում ենք մեր սերվեր minecraft.selectel.ru (հաճախորդի տարբերակ 1.15.2), որտեղ վերստեղծվել են Ցվետոչնայա-1 և Ցվետոչնայա-2 տվյալների կենտրոնները։ Մի մոռացեք համաձայնվել ներբեռնել լրացուցիչ ռեսուրսներ, դրանք անհրաժեշտ են որոշ վայրերի ճիշտ ցուցադրման համար:

Ձեզ սպասում են քվեստներ, գովազդային կոդեր, Զատկի ձվեր և հաճելի շփում։

Source: www.habr.com

Добавить комментарий