Մեր բլոգում մենք արդեն ունենք
Իր 9-ամյա պատմության ընթացքում (հաշված թողարկման ամսաթվից) Minecraft-ը վաստակել է զարմանալի թվով երկրպագուներ և ատողներ ինչպես սովորական խաղացողների, այնպես էլ գիքերի շրջանում: Բլոկներից պատրաստված աշխարհի պարզ գաղափարը զվարճանքի պարզ ձևից վերածվել է ունիվերսալ միջոցի՝ իրական աշխարհից տարբեր առարկաներ հաղորդակցվելու և ստեղծելու համար:
Բացի շինարարությունից, խաղն ունի ստեղծագործելու հնարավորություն
Բայց եկեք չխոսենք այն մասին, թե կոնկրետ ինչ են ստեղծում խաղացողները, բայց եկեք նայենք հավելվածի սերվերային մասին և ընդգծենք այն խնդիրները (երբեմն շատ բարդ), որոնք կարող են առաջանալ բեռի տակ շահագործման ընթացքում: Եկեք անմիջապես վերապահենք, որ մենք կխոսենք միայն Java Edition-ի մասին:
Սերվերների տեսակները
Ամենապարզ տարբերակը խաղի հաճախորդի մեջ ներկառուցված սերվերն է: Մենք ստեղծեցինք աշխարհ, սեղմեցինք մեկ կոճակ, և սերվերը հասանելի դարձավ տեղական ցանցի միջոցով: Այս տարբերակը չի կարող դիմակայել որևէ լուրջ բեռի, և, հետևաբար, մենք դա չենք էլ դիտարկի։
Վանիլ
Mojang Studios-ը անվճար տարածում է խաղի սերվերային մասը՝ որպես Java հավելված
Այս մոտեցումը ունի մեկ լուրջ թերություն, այն է, որ պլագինները միացնելու հնարավորությունների բացակայությունը, որոնք ընդլայնում են սերվերի ֆունկցիոնալությունը և թույլ են տալիս ոչ միայն ավտոմատացնել բազմաթիվ գործընթացներ, այլև օպտիմալացնել կատարումը: Բացի այդ, պաշտոնական սերվերն ունի RAM-ի բավականին մեծ սպառում յուրաքանչյուր միացված խաղացողի համար:
Բուկկիտ
Վանիլային տարբերակի հիման վրա ստեղծված էնտուզիաստների կողմից ստեղծված սերվերային հավելված
Bukkit-ի տեղադրումը դժվար չէ, համապատասխան հրահանգները գտնվում են ռեսուրսի վրա
SpigotMC
Փլագինների մշակողների կյանքը հեշտացնելու համար API-ի կարիք կար՝ խաղի աշխարհի հետ փոխազդելու համար: Սա հենց այն խնդիրն է, որ լուծեցին ստեղծողները։
Ներկայումս SpigotMC-ն ակտիվորեն մշակվում և օգտագործվում է: Այն աջակցում է Bukkit-ի համար ստեղծված բոլոր պլագիններին, բայց հետընթաց համատեղելի չէ դրա հետ: DMCA Takedown-ը շրջանցելու համար հորինվել է էլեգանտ մեթոդ, որը կոչվում է BuildTools: Այս գործիքը վերացնում է կազմված հավելվածը տարածելու անհրաժեշտությունը և թույլ է տալիս օգտվողներին կազմել Spigot, CraftBukkit և Bukkit սկզբնական կոդից: Այս ամենն անօգուտ է դարձնում DMCA արգելքը:
PaperMC
Ամեն ինչ թույն էր թվում, և Spigot-ը դարձավ հիանալի տարբերակ: Բայց սա բավարար չէր որոշ էնտուզիաստների համար, և նրանք ստեղծեցին Spigot-ի իրենց պատառաքաղը «ստերոիդների վրա»: Վրա
PaperMC-ն ունի հիանալի համատեղելիություն, ուստի SpigotMC-ի համար գրված պլագինները կարող են հեշտությամբ աշխատել PaperMC-ում, բայց առանց պաշտոնական աջակցության: Հետևյալ համատեղելիությունը SpigotMC-ի հետ նույնպես առկա է: Այժմ, երբ մենք թվարկեցինք սերվեր ստեղծելու տարբեր տարբերակներ, եկեք անցնենք կատարողականի խնդիրներին, որոնք կարող են առաջանալ:
Խնդիրներ և լուծումներ
Հիմնական բանը, որ դուք պետք է հասկանաք, այն է, որ այն ամենը, ինչ կապված է խաղի աշխարհի մշակման հետ, կմշակվի միայն ֆիզիկական սերվերի մեկ հաշվողական միջուկի վրա: Այսպիսով, եթե հանկարծ դուք ունենաք գերազանց սերվեր մեկ տասնյակ հաշվողական միջուկներով, ապա միայն մեկը կբեռնվի: Մնացած բոլորը գործնականում պարապ կմնան: Սա հավելվածի ճարտարապետությունն է, և դուք ոչինչ չեք կարող անել դրա դեմ: Այսպիսով, սերվեր ընտրելիս պետք է ուշադրություն դարձնել ոչ թե միջուկների քանակին, այլ ժամացույցի հաճախականությանը։ Որքան բարձր լինի, այնքան ավելի լավ կլինի կատարողականը:
Ինչ վերաբերում է RAM-ի հզորության հարցին, ապա պետք է ելնել հետևյալ ցուցանիշներից.
- պլանավորված խաղացողների քանակը;
- սերվերի վրա նախատեսված աշխարհների քանակը.
- յուրաքանչյուր աշխարհի չափը:
Պետք է հիշել, որ Java հավելվածին միշտ անհրաժեշտ է RAM-ի պահուստ: Եթե ակնկալում եք 8 գիգաբայթ հիշողության սպառում, ապա իրականում պետք է ունենալ 12: Թվերը հարաբերական են, բայց էությունը չի փոխվում:
Սերվերի մասը սկսելու համար խորհուրդ ենք տալիս օգտագործել հոդվածում նշված դրոշները
Բլոկային քարտեզի ստեղծում
«Իսկապե՞ս կարծում եք, որ լուսինը գոյություն ունի միայն այն ժամանակ, երբ նայում եք նրան»: (Albert Einstein)
Ամբողջովին նոր սերվեր: Հենց որ խաղացողը հաջողությամբ միանում է առաջին անգամ, խաղի կերպարը հայտնվում է ընդհանուր հավաքման կետում (ձվադրում): Սա միակ վայրն է, որտեղ խաղի աշխարհը նախապես ստեղծվում է սերվերի կողմից: Միևնույն ժամանակ, հաճախորդի մասը նայում է պարամետրերին, և հիմնական պարամետրը գծագրման հեռավորությունն է: Այն չափվում է կտորներով (քարտեզի տարածքը 16×16 է, իսկ բարձրությունը՝ 256 բլոկ)։
Սերվերը պահում է աշխարհի գլոբալ քարտեզը, և եթե դրա մեջ դեռևս չկան գեներացված բլոկներ խաղի կերպարի երևալու կետում, ապա սերվերը դինամիկ կերպով գեներացնում և պահպանում է դրանք։ Սա ոչ միայն պահանջում է մեծ հաշվողական ռեսուրսներ, այլև անընդհատ մեծացնում է աշխարհի քարտեզի չափը: Ամենահին անարխիստական սերվերներից մեկի վրա
Մեկ խաղացողի շուրջ աշխարհ ստեղծելը խնդիր չէ: Հարյուրավոր խաղացողների շուրջ աշխարհ ստեղծելը կարճ ժամանակով կհանգեցնի սերվերի փոքր դանդաղումների, որից հետո բեռնվածությունը կնվազի: Հաճախորդների մոտ հազար խաղացողների հեռավորության վրա աշխարհ ստեղծելն արդեն ի վիճակի է «գցել» սերվերը և դուրս շպրտել բոլոր հաճախորդներին դրանից՝ ժամանակի վերջի պատճառով:
Սերվերի ծրագրային ապահովման մեջ կա այնպիսի արժեք, ինչպիսին է 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 տարբերակի համար, փորձնականորեն պարզվել է, որ այն հիանալի է աշխատում հետագա տարբերակների վրա: Հրամանների ամբողջական ցանկը՝ բացատրություններով
Խնդրի բլոկներ
Minecraft-ում բլոկների մեծ բազմազանություն կա: Այնուամենայնիվ, մենք կցանկանայինք ընթերցողների ուշադրությունը հրավիրել այնպիսի բլոկի վրա, ինչպիսին է TNT. Ինչպես անունն է հուշում, այս բլոկը պայթուցիկ է (խմբագրի նշում. սա վիրտուալ աշխարհի խաղային տարր է, և այս նյութը իրական պայթուցիկներով ոչինչ չունի). Նրա յուրահատկությունն այնպիսին է, որ ակտիվացման պահին նրա վրա սկսում է գործել ձգողության ուժը։ Սա ստիպում է սերվերին հաշվարկել բոլոր կոորդինատները, եթե այս պահին բլոկը սկսում է ընկնել:
Եթե կան մի քանի տրոտիլ բլոկներ, ապա մեկ բլոկի պայթեցումը առաջացնում է պայթյուն և ձգողականության ակտիվացում հարեւան բլոկներում՝ դրանք ցրելով բոլոր ուղղություններով։ Սերվերի կողմից այս բոլոր գեղեցիկ մեխանիզմները նման են բազմաթիվ գործողությունների՝ յուրաքանչյուր բլոկի հետագիծը հաշվարկելու, ինչպես նաև հարևան բլոկների հետ փոխազդեցության համար: Խնդիրը չափազանց ռեսուրսային է, որը յուրաքանչյուրը կարող է հեշտությամբ ստուգել: Ստեղծեք և պայթեցրեք TNT բլոկներից առնվազն 30x30x30 չափի խորանարդ: Իսկ եթե կարծում էիք, որ լավ, հզոր խաղային համակարգիչ ունեք, շատ եք սխալվել
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt
Նմանատիպ «փորձը» սերվերի վրա Intel® Xeon® Gold 6240-ով հանգեցրեց TPS-ի լուրջ անկման և 80% պրոցեսորի բեռնվածության ամբողջ բլոկի պայթյունի ժամանակ: Հետևաբար, եթե որևէ խաղացող կարողանա դա անել, ապա կատարողականի խնդիրը կազդի սերվերի բոլոր խաղացողների վրա:
Նույնիսկ ավելի կոշտ տարբերակ. Եզրային բյուրեղներ. Եթե TNT-ն այնուամենայնիվ պայթում է հաջորդաբար, ապա Edge Crystals-ը պայթում է բոլորը միաժամանակ, ինչը տեսականորեն կարող է ամբողջությամբ դադարեցնել սերվերի հավելվածի աշխատանքը:
Այս սցենարից կարելի է խուսափել միայն խաղի աշխարհում այս բլոկների օգտագործումը ամբողջությամբ արգելելով: Օրինակ, օգտագործելով plugin
Ամփոփում
Խաղի սերվերի ճիշտ կառավարումը հեշտ գործ չէ: Դժվարություններ և կատարողականի անկում կսպասեն ձեզ ամեն քայլափոխի, հատկապես, եթե հաշվի չեք առնում հենց խաղի մեխանիզմը: Անհնար է ամեն ինչ կանխատեսել, քանի որ խաղացողները երբեմն կարող են շատ ստեղծագործ լինել՝ փորձելով ստիպել սերվերին անել մի բան, որի համար դա նախատեսված չէր: Միայն ռիսկերի և սահմանված սահմանափակումների միջև ողջամիտ հավասարակշռությունը թույլ կտա սերվերին շարունակաբար աշխատել և չնվազեցնել իր կատարումը մինչև կրիտիկական արժեքներ:
Կարանտինի ժամանակ մեր աշխատակիցներից ոմանք բաց թողեցին իրենց սիրելի գրասենյակները և որոշեցին դրանք վերստեղծել Minecraft-ի ներսում: Դուք նաև հնարավորություն ունեք այցելել մեզ՝ առանց ձեր առողջությունը վտանգի ենթարկելու կամ ճանապարհին ժամանակ կորցնելու:
Դա անելու համար մենք բոլորին հրավիրում ենք մեր սերվեր minecraft.selectel.ru (հաճախորդի տարբերակ 1.15.2), որտեղ վերստեղծվել են Ցվետոչնայա-1 և Ցվետոչնայա-2 տվյալների կենտրոնները։ Մի մոռացեք համաձայնվել ներբեռնել լրացուցիչ ռեսուրսներ, դրանք անհրաժեշտ են որոշ վայրերի ճիշտ ցուցադրման համար:
Ձեզ սպասում են քվեստներ, գովազդային կոդեր, Զատկի ձվեր և հաճելի շփում։
Source: www.habr.com