در وبلاگ ما در حال حاضر
Minecraft در طول تاریخ 9 ساله خود (با احتساب تاریخ انتشار)، تعداد شگفت انگیزی از طرفداران و متنفران را در بین بازیکنان معمولی و گیک ها به دست آورده است. مفهوم ساده دنیایی ساخته شده از بلوک از یک شکل ساده سرگرمی به یک رسانه جهانی برای برقراری ارتباط و ایجاد اشیاء مختلف از دنیای واقعی تبدیل شده است.
بازی علاوه بر ساخت و ساز، قابلیت ایجاد نیز دارد
اما اجازه دهید بیشتر در مورد آنچه که بازیکنان دقیقاً ایجاد می کنند صحبت نکنیم، اما اجازه دهید به بخش سرور برنامه نگاهی بیندازیم و مشکلات (گاهی بسیار پیچیده) را که ممکن است در حین کار تحت بار ایجاد شود برجسته کنیم. بیایید فوراً رزرو کنیم که فقط در مورد نسخه جاوا صحبت خواهیم کرد.
انواع سرور
ساده ترین گزینه سروری است که در کلاینت بازی تعبیه شده است. ما یک جهان ایجاد کردیم، یک دکمه را فشار دادیم و سرور از طریق شبکه محلی قابل دسترسی شد. این گزینه نمی تواند بار جدی را تحمل کند و بنابراین ما حتی آن را در نظر نخواهیم گرفت.
وانیل
Mojang Studios قسمت سرور بازی را به صورت یک اپلیکیشن جاوا به صورت رایگان توزیع می کند
این رویکرد دارای یک اشکال جدی است، یعنی فقدان قابلیت های خارج از جعبه برای اتصال پلاگین هایی که عملکرد سرور را گسترش می دهد و اجازه می دهد نه تنها بسیاری از فرآیندها را خودکار کند، بلکه عملکرد را نیز بهینه می کند. علاوه بر این، سرور رسمی مصرف رم نسبتا زیادی برای هر پخش کننده متصل دارد.
بوکیت
یک برنامه سرور که توسط علاقه مندان بر اساس نسخه Vanilla ایجاد شده است
نصب Bukkit دشوار نیست؛ دستورالعمل های مربوطه در منبع موجود است
SpigotMC
برای آسانتر کردن زندگی برای توسعهدهندگان افزونه، نیاز به یک API برای تعامل با دنیای بازی وجود داشت. این دقیقا همان مشکلی است که سازندگان آن را حل کردند.
در حال حاضر، SpigotMC به طور فعال توسعه یافته و استفاده می شود. از تمام پلاگین های ایجاد شده برای Bukkit پشتیبانی می کند، اما با آن سازگار نیست. برای دور زدن DMCA Takedown، یک روش زیبا به نام BuildTools اختراع شد. این ابزار نیاز به توزیع یک برنامه کامپایل شده را از بین می برد و به کاربران اجازه می دهد Spigot، CraftBukkit و Bukkit را از کد منبع کامپایل کنند. همه اینها ممنوعیت DMCA را بی فایده می کند.
PaperMC
همه چیز جالب به نظر می رسید و Spigot به یک گزینه عالی تبدیل شد. اما این برای برخی از علاقه مندان کافی نبود و آنها چنگال Spigot خود را "بر روی استروئیدها" ایجاد کردند. بر
PaperMC سازگاری بسیار خوبی دارد، بنابراین پلاگین های نوشته شده برای SpigotMC می توانند به راحتی روی PaperMC کار کنند، اما بدون پشتیبانی رسمی. سازگاری Backward با SpigotMC نیز وجود دارد. اکنون که گزینههای مختلف برای ایجاد سرور را فهرست کردهایم، بیایید به مشکلات عملکردی که ممکن است پیش بیاید، برویم.
مشکلات و راه حل ها
نکته اصلی که باید بدانید این است که همه چیز مربوط به پردازش دنیای بازی فقط در یک هسته محاسباتی سرور فیزیکی پردازش می شود. بنابراین اگر به طور ناگهانی یک سرور عالی با ده ها هسته محاسباتی داشته باشید، تنها یکی از آنها بارگذاری می شود. بقیه تقریباً بیکار خواهند بود. این معماری برنامه است و هیچ کاری نمی توانید در مورد آن انجام دهید. بنابراین در انتخاب سرور نه به تعداد هسته ها بلکه به فرکانس کلاک توجه کنید. هرچه بالاتر باشد، عملکرد بهتری خواهد داشت.
در مورد ظرفیت رم باید از شاخص های زیر اقدام کرد:
- تعداد بازیکنان برنامه ریزی شده؛
- تعداد جهان های برنامه ریزی شده روی سرور؛
- اندازه هر دنیا
باید به خاطر داشت که یک برنامه جاوا همیشه نیاز به ذخیره رم دارد. اگر انتظار مصرف حافظه 8 گیگابایتی دارید، در واقع باید 12 گیگابایت داشته باشید. اعداد نسبی هستند، اما ماهیت تغییر نمی کند.
برای شروع قسمت سرور، توصیه می کنیم از پرچم های مشخص شده در مقاله استفاده کنید
ایجاد نقشه بلوک
"آیا واقعاً فکر می کنید ماه فقط زمانی وجود دارد که به آن نگاه می کنید؟" (آلبرت انیشتین)
سرور کاملا جدید به محض اتصال موفقیت آمیز بازیکن برای اولین بار، شخصیت بازی در نقطه جمع آوری عمومی ظاهر می شود (اسپاون). اینجا تنها جایی است که دنیای بازی توسط سرور از قبل تولید شده است. در همان لحظه، بخش مشتری به تنظیمات نگاه می کند و پارامتر کلیدی فاصله ترسیم است. این در تکه ها اندازه گیری می شود (منطقه نقشه 16×16 و ارتفاع 256 بلوک است).
سرور یک نقشه جهانی از جهان را ذخیره می کند و اگر هنوز بلوک های تولید شده در آن در نقطه ظاهر شخصیت بازی وجود نداشته باشد، سرور به صورت پویا آنها را تولید و ذخیره می کند. این نه تنها به منابع محاسباتی بزرگ نیاز دارد، بلکه به طور مداوم اندازه نقشه جهان را افزایش می دهد. در یکی از قدیمی ترین سرورهای آنارشیستی
ایجاد دنیایی پیرامون یک بازیکن مشکلی نیست. ایجاد دنیایی در اطراف صدها بازیکن باعث کندی جزئی سرور برای مدت کوتاهی می شود و پس از آن بار کاهش می یابد. ایجاد دنیایی در فاصله رندر کلاینت در حدود هزار بازیکن از قبل میتواند سرور را «رها» کند و همه کلاینتها را به دلیل مهلت زمانی از آن خارج کند.
در نرم افزار سرور مقداری مانند TPS (تیک در هر سرور - تیک در ثانیه). به طور معمول، 1 سیکل ساعت برابر با 50 میلی ثانیه است. (1 ثانیه از دنیای واقعی برابر با 20 تیک دنیای بازی است). اگر پردازش یک تیک به 60 ثانیه افزایش یابد، برنامه سرور بسته می شود و همه بازیکنان را بیرون می اندازد.
راه حل این است که جهان را به مختصات خاصی محدود کنید و تولید بلوک اولیه را انجام دهید. بنابراین، ما نیاز به تولید پویا در طول بازی را حذف می کنیم و سرور فقط باید نقشه موجود را بخواند. هر دو مشکل را می توان با یک پلاگین حل کرد
ساده ترین راه این است که مرز جهان را به شکل یک دایره نسبت به نقطه تخم ریزی قرار دهید (اگرچه می توانید آن را به هر شکلی بسازید) با یک دستور:
/wb set <радиус в блоках> spawn
اگر شخصیت بازیکن سعی کند از مرز عبور کند، چندین بلوک به عقب رانده می شود. اگر این کار چندین بار در مدت زمان محدود انجام شود، متخلف به زور به نقطه تخم ریزی تله پورت می شود. پیش تولید جهان حتی ساده تر انجام می شود، با دستور:
/wb fill
از آنجایی که این عمل می تواند به طور بالقوه بر بازیکنان روی سرور تأثیر بگذارد، حتماً تأیید کنید:
/wb confirm
در مجموع، تقریباً 5000 ساعت طول کشید تا دنیایی با شعاع 40 بلوک (تقریباً 2 میلیارد بلوک) روی پردازنده Intel® Xeon® Gold 6240 ایجاد شود. بنابراین، اگر میخواهید نقشه بزرگتری از قبل ایجاد کنید، توجه داشته باشید که این فرآیند زمان مناسبی را می گیرد و TPS سرور به طور جدی کاهش می یابد. همچنین به یاد داشته باشید که حتی شعاع 5000 بلوک تقریباً به 2 گیگابایت فضای دیسک نیاز دارد.
با وجود این واقعیت که آخرین نسخه این افزونه برای نسخه 1.14 Minecraft توسعه یافته است، به طور آزمایشی مشخص شد که در نسخه های بعدی عالی کار می کند. لیست کاملی از دستورات با توضیحات موجود است
بلوک های مشکل
بلوک های بسیار متنوعی در Minecraft وجود دارد. با این حال، ما می خواهیم توجه خوانندگان را به چنین بلوکی جلب کنیم مخفف کلمه تری نیتروتولوئن. همانطور که از نام آن پیداست، این بلوک یک ماده منفجره است (یادداشت سردبیر - این یک آیتم بازی در دنیای مجازی است و این آیتم هیچ چیز با مواد منفجره واقعی ندارد). ویژگی آن به گونه ای است که در لحظه فعال شدن، نیروی گرانش شروع به اعمال بر روی آن می کند. اگر در این لحظه بلوک شروع به سقوط کرد، سرور را مجبور میکند تا تمام مختصات را محاسبه کند.
اگر چندین بلوک TNT وجود داشته باشد، انفجار یک بلوک باعث انفجار و فعال شدن گرانش در بلوک های مجاور می شود و آنها را در همه جهات پراکنده می کند. تمام این مکانیک های زیبا در سمت سرور به نظر عملیات های زیادی برای محاسبه مسیر هر بلوک و همچنین تعامل با بلوک های همسایه است. این کار بسیار منابع فشرده است، که هر کسی می تواند به راحتی آن را بررسی کند. یک مکعب از بلوک های TNT تولید و منفجر کنید که حداقل اندازه آن 30x30x30 باشد. و اگر فکر می کردید که یک کامپیوتر گیمینگ خوب و قدرتمند دارید، سخت در اشتباهید 😉
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt
یک "آزمایش" مشابه روی سرور با Intel® Xeon® Gold 6240 منجر به افت شدید TPS و بار CPU 80٪ در کل زمان انفجار بلوک شد. بنابراین، اگر هر بازیکنی بتواند این کار را انجام دهد، مشکل عملکرد همه بازیکنان روی سرور را تحت تأثیر قرار می دهد.
یک گزینه حتی سخت تر - کریستال های لبه. با این وجود، اگر TNT به طور متوالی منفجر شود، کریستال های لبه به طور همزمان منفجر می شوند، که در تئوری می تواند به طور کامل عملکرد برنامه سرور را متوقف کند.
تنها با ممنوعیت کامل استفاده از این بلوک ها در دنیای بازی می توان از این سناریو جلوگیری کرد. مثلا با استفاده از افزونه
نتیجه
مدیریت صحیح سرور بازی کار آسانی نیست. سختی ها و کاهش عملکرد در هر مرحله در انتظار شما خواهد بود، به خصوص اگر مکانیک های گیم پلی خود را در نظر نگیرید. پیش بینی همه چیز غیرممکن است، زیرا بازیکنان گاهی اوقات می توانند در تلاش برای وادار کردن سرور به انجام کاری که برای آن در نظر گرفته نشده بود، بسیار خلاق باشند. تنها یک تعادل معقول بین خطرات و محدودیت های ایجاد شده به سرور اجازه می دهد تا به طور مداوم کار کند و عملکرد خود را به مقادیر بحرانی کاهش ندهد.
در طول قرنطینه، برخی از کارمندان ما دفاتر مورد علاقه خود را از دست دادند و تصمیم گرفتند آنها را در Minecraft بازسازی کنند. شما همچنین این فرصت را دارید که بدون به خطر انداختن سلامتی خود یا اتلاف وقت در جاده از ما دیدن کنید.
برای انجام این کار، ما همه را به سرور خود دعوت می کنیم minecraft.selectel.ru (نسخه مشتری 1.15.2)، که در آن مراکز داده Tsvetochnaya-1 و Tsvetochnaya-2 بازسازی شدند. فراموش نکنید که با دانلود منابع اضافی موافقت کنید، آنها برای نمایش صحیح برخی از مکان ها ضروری هستند.
کوئست ها، کدهای تبلیغاتی، تخم مرغ های عید پاک و ارتباط دلپذیر در انتظار شما هستند.
منبع: www.habr.com