بهینه سازی سرور Minecraft

بهینه سازی سرور Minecraft
در وبلاگ ما در حال حاضر گفت:، چگونه سرور Minecraft خود را بسازید، اما 5 سال از آن زمان می گذرد و چیزهای زیادی تغییر کرده است. ما راه های فعلی برای ایجاد و بهینه سازی بخش سرور چنین بازی محبوبی را با شما به اشتراک می گذاریم.

Minecraft در طول تاریخ 9 ساله خود (با احتساب تاریخ انتشار)، تعداد شگفت انگیزی از طرفداران و متنفران را در بین بازیکنان معمولی و گیک ها به دست آورده است. مفهوم ساده دنیایی ساخته شده از بلوک از یک شکل ساده سرگرمی به یک رسانه جهانی برای برقراری ارتباط و ایجاد اشیاء مختلف از دنیای واقعی تبدیل شده است.

بازی علاوه بر ساخت و ساز، قابلیت ایجاد نیز دارد منطق، که به شما امکان می دهد الگوریتم های کامل را در Minecraft پیاده سازی کنید. یوتیوب مملو از ویدیوهای بسیار چشمگیر است که در آن افراد با تلاش زیاد و صرف زمان زیاد، یک کپی از این یا آن دستگاه الکترونیکی ایجاد کرده اند یا یک کپی دقیق ساخته اند. موجود и تخیلی سازه های معماری همه چیز فقط توسط تخیل گیمر و امکانات دنیای بازی محدود می شود.


اما اجازه دهید بیشتر در مورد آنچه که بازیکنان دقیقاً ایجاد می کنند صحبت نکنیم، اما اجازه دهید به بخش سرور برنامه نگاهی بیندازیم و مشکلات (گاهی بسیار پیچیده) را که ممکن است در حین کار تحت بار ایجاد شود برجسته کنیم. بیایید فوراً رزرو کنیم که فقط در مورد نسخه جاوا صحبت خواهیم کرد.

انواع سرور

ساده ترین گزینه سروری است که در کلاینت بازی تعبیه شده است. ما یک جهان ایجاد کردیم، یک دکمه را فشار دادیم و سرور از طریق شبکه محلی قابل دسترسی شد. این گزینه نمی تواند بار جدی را تحمل کند و بنابراین ما حتی آن را در نظر نخواهیم گرفت.

وانیل

Mojang Studios قسمت سرور بازی را به صورت یک اپلیکیشن جاوا به صورت رایگان توزیع می کند در وب سایت رسمی. این به شما این امکان را می دهد که خودتان بسازید سرور اختصاصی و دنیای شخصی، آن را برای اتصال از هر نقطه روی کره زمین در دسترس قرار می دهد. برای کسانی که برای اولین بار این کار را انجام می دهند، یک کار عالی وجود دارد آموزش، در ویکی بازی مربوطه موجود است.

این رویکرد دارای یک اشکال جدی است، یعنی فقدان قابلیت های خارج از جعبه برای اتصال پلاگین هایی که عملکرد سرور را گسترش می دهد و اجازه می دهد نه تنها بسیاری از فرآیندها را خودکار کند، بلکه عملکرد را نیز بهینه می کند. علاوه بر این، سرور رسمی مصرف رم نسبتا زیادی برای هر پخش کننده متصل دارد.

بوکیت

یک برنامه سرور که توسط علاقه مندان بر اساس نسخه Vanilla ایجاد شده است بوکیت با پشتیبانی از پلاگین ها و مدها (اصلاحات) قابلیت های بازی را به طور قابل توجهی گسترش داد. این اجازه می دهد تا نه تنها بلوک های جدیدی را به گیم پلی اضافه کنید، بلکه دستکاری های مختلفی را نیز انجام دهید که برای نرم افزار وانیل غیرقابل دسترسی بود. جالب اینجاست که این اپلیکیشن به میزان قابل توجهی حافظه کمتری نیاز دارد.

نصب Bukkit دشوار نیست؛ دستورالعمل های مربوطه در منبع موجود است گیم پدیا. اما این بی معنی است، زیرا از سال 2014 تیم Bukkit منحل شده است، توسعه دهندگان پروژه کارمند استودیو Mojang شده اند و مخزن رها شده است. بنابراین، Bukkit عملاً مرده است، و منطقی است که به دو پروژه بعدی توجه کنیم.

SpigotMC

برای آسان‌تر کردن زندگی برای توسعه‌دهندگان افزونه، نیاز به یک API برای تعامل با دنیای بازی وجود داشت. این دقیقا همان مشکلی است که سازندگان آن را حل کردند. چاقو، هسته Bukkit را گرفته و دوباره آن را برای دستیابی به قابلیت اطمینان و عملکرد بهتر کار می کند. با این اوصاف، مخزن Git این پروژه به دلیل قانون حق چاپ هزاره دیجیتال مسدود شد (DMCA، و دانلود کد منبع از آنجا غیرممکن است.

در حال حاضر، SpigotMC به طور فعال توسعه یافته و استفاده می شود. از تمام پلاگین های ایجاد شده برای Bukkit پشتیبانی می کند، اما با آن سازگار نیست. برای دور زدن DMCA Takedown، یک روش زیبا به نام BuildTools اختراع شد. این ابزار نیاز به توزیع یک برنامه کامپایل شده را از بین می برد و به کاربران اجازه می دهد Spigot، CraftBukkit و Bukkit را از کد منبع کامپایل کنند. همه اینها ممنوعیت DMCA را بی فایده می کند.

PaperMC

همه چیز جالب به نظر می رسید و Spigot به یک گزینه عالی تبدیل شد. اما این برای برخی از علاقه مندان کافی نبود و آنها چنگال Spigot خود را "بر روی استروئیدها" ایجاد کردند. بر صفحه پروژه مزیت کلیدی این است که "سریع احمقانه است". توسعه یافته انجمن به شما اجازه می دهد تا به سرعت مشکلات در حال ظهور را حل کنید، و API توسعه یافته به شما امکان می دهد پلاگین های جالبی ایجاد کنید. شما می توانید PaperMC را با یک دستور ساده اجرا کنید مستندات.

PaperMC سازگاری بسیار خوبی دارد، بنابراین پلاگین های نوشته شده برای SpigotMC می توانند به راحتی روی PaperMC کار کنند، اما بدون پشتیبانی رسمی. سازگاری Backward با SpigotMC نیز وجود دارد. اکنون که گزینه‌های مختلف برای ایجاد سرور را فهرست کرده‌ایم، بیایید به مشکلات عملکردی که ممکن است پیش بیاید، برویم.

مشکلات و راه حل ها

نکته اصلی که باید بدانید این است که همه چیز مربوط به پردازش دنیای بازی فقط در یک هسته محاسباتی سرور فیزیکی پردازش می شود. بنابراین اگر به طور ناگهانی یک سرور عالی با ده ها هسته محاسباتی داشته باشید، تنها یکی از آنها بارگذاری می شود. بقیه تقریباً بیکار خواهند بود. این معماری برنامه است و هیچ کاری نمی توانید در مورد آن انجام دهید. بنابراین در انتخاب سرور نه به تعداد هسته ها بلکه به فرکانس کلاک توجه کنید. هرچه بالاتر باشد، عملکرد بهتری خواهد داشت.

در مورد ظرفیت رم باید از شاخص های زیر اقدام کرد:

  • تعداد بازیکنان برنامه ریزی شده؛
  • تعداد جهان های برنامه ریزی شده روی سرور؛
  • اندازه هر دنیا

باید به خاطر داشت که یک برنامه جاوا همیشه نیاز به ذخیره رم دارد. اگر انتظار مصرف حافظه 8 گیگابایتی دارید، در واقع باید 12 گیگابایت داشته باشید. اعداد نسبی هستند، اما ماهیت تغییر نمی کند.

برای شروع قسمت سرور، توصیه می کنیم از پرچم های مشخص شده در مقاله استفاده کنید تنظیم پرچم‌های جمع‌آوری زباله JVM – G1GC برای Minecraft. این "جادوی سیاه" به سرور اجازه می دهد تا "جمع کننده زباله" را به درستی پیکربندی کند و استفاده از RAM را بهینه کند. در زمان اوج هجوم بازیکنان نباید بیشتر از مقداری که سرور واقعاً مصرف می کند، حافظه اختصاص دهید.

ایجاد نقشه بلوک

"آیا واقعاً فکر می کنید ماه فقط زمانی وجود دارد که به آن نگاه می کنید؟" (آلبرت انیشتین)

سرور کاملا جدید به محض اتصال موفقیت آمیز بازیکن برای اولین بار، شخصیت بازی در نقطه جمع آوری عمومی ظاهر می شود (اسپاون). اینجا تنها جایی است که دنیای بازی توسط سرور از قبل تولید شده است. در همان لحظه، بخش مشتری به تنظیمات نگاه می کند و پارامتر کلیدی فاصله ترسیم است. این در تکه ها اندازه گیری می شود (منطقه نقشه 16×16 و ارتفاع 256 بلوک است).

سرور یک نقشه جهانی از جهان را ذخیره می کند و اگر هنوز بلوک های تولید شده در آن در نقطه ظاهر شخصیت بازی وجود نداشته باشد، سرور به صورت پویا آنها را تولید و ذخیره می کند. این نه تنها به منابع محاسباتی بزرگ نیاز دارد، بلکه به طور مداوم اندازه نقشه جهان را افزایش می دهد. در یکی از قدیمی ترین سرورهای آنارشیستی 2b2t (2builders2tools) اندازه نقشه قبلاً از 8 ترابایت فراتر رفته است و مرز جهان در حدود 30 میلیون بلوک است. هزاران داستان مرتبط با این سرور وجود دارد و شایسته مقاله خاص خود در این مجموعه است.

ایجاد دنیایی پیرامون یک بازیکن مشکلی نیست. ایجاد دنیایی در اطراف صدها بازیکن باعث کندی جزئی سرور برای مدت کوتاهی می شود و پس از آن بار کاهش می یابد. ایجاد دنیایی در فاصله رندر کلاینت در حدود هزار بازیکن از قبل می‌تواند سرور را «رها» کند و همه کلاینت‌ها را به دلیل مهلت زمانی از آن خارج کند.

در نرم افزار سرور مقداری مانند 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

بهینه سازی سرور Minecraft
یک "آزمایش" مشابه روی سرور با Intel® Xeon® Gold 6240 منجر به افت شدید TPS و بار CPU 80٪ در کل زمان انفجار بلوک شد. بنابراین، اگر هر بازیکنی بتواند این کار را انجام دهد، مشکل عملکرد همه بازیکنان روی سرور را تحت تأثیر قرار می دهد.

یک گزینه حتی سخت تر - کریستال های لبه. با این وجود، اگر TNT به طور متوالی منفجر شود، کریستال های لبه به طور همزمان منفجر می شوند، که در تئوری می تواند به طور کامل عملکرد برنامه سرور را متوقف کند.

تنها با ممنوعیت کامل استفاده از این بلوک ها در دنیای بازی می توان از این سناریو جلوگیری کرد. مثلا با استفاده از افزونه گارد جهانی. لطفا توجه داشته باشید که این افزونه به خودی خود بدون افزونه دیگر کار نمی کند ویرایش جهانی. بنابراین ابتدا WorldEdit و سپس WorldGuard را نصب کنید.

نتیجه

مدیریت صحیح سرور بازی کار آسانی نیست. سختی ها و کاهش عملکرد در هر مرحله در انتظار شما خواهد بود، به خصوص اگر مکانیک های گیم پلی خود را در نظر نگیرید. پیش بینی همه چیز غیرممکن است، زیرا بازیکنان گاهی اوقات می توانند در تلاش برای وادار کردن سرور به انجام کاری که برای آن در نظر گرفته نشده بود، بسیار خلاق باشند. تنها یک تعادل معقول بین خطرات و محدودیت های ایجاد شده به سرور اجازه می دهد تا به طور مداوم کار کند و عملکرد خود را به مقادیر بحرانی کاهش ندهد.

در طول قرنطینه، برخی از کارمندان ما دفاتر مورد علاقه خود را از دست دادند و تصمیم گرفتند آنها را در Minecraft بازسازی کنند. شما همچنین این فرصت را دارید که بدون به خطر انداختن سلامتی خود یا اتلاف وقت در جاده از ما دیدن کنید.

برای انجام این کار، ما همه را به سرور خود دعوت می کنیم minecraft.selectel.ru (نسخه مشتری 1.15.2)، که در آن مراکز داده Tsvetochnaya-1 و Tsvetochnaya-2 بازسازی شدند. فراموش نکنید که با دانلود منابع اضافی موافقت کنید، آنها برای نمایش صحیح برخی از مکان ها ضروری هستند.

کوئست ها، کدهای تبلیغاتی، تخم مرغ های عید پاک و ارتباط دلپذیر در انتظار شما هستند.

منبع: www.habr.com

اضافه کردن نظر