تحسين خادم ماين كرافت



في مدونتنا ، تحدثنا بالفعل عن كيفية إنشاء خادم Minecraft الخاص بك ، ومع ذلك ، مرت 5 سنوات منذ ذلك الحين وتغير الكثير. نحن نشارك معك الطرق الحالية لإنشاء وتحسين جانب الخادم لهذه اللعبة الشائعة.



على مدار تاريخها البالغ 9 سنوات (منذ تاريخ الإصدار) ، كسبت Minecraft عددًا مذهلاً من المعجبين والكارهين بين اللاعبين العاديين والمتخصصين. لقد تطور المفهوم البسيط لعالم المكعب من ترفيه بسيط إلى بيئة عالمية للتواصل وخلق أشياء مختلفة من العالم الحقيقي.



بالإضافة إلى البناء ، تتمتع اللعبة بالقدرة على إنشاء دوائر منطقية تسمح لك بتنفيذ خوارزميات كاملة داخل Minecraft. يوتيوب مليء أشرطة الفيديو مؤثرة جدا، حيث كان الناس، مع كمية كبيرة من الجهد وإنفاق الكثير من الوقت، قد خلقت نسخة من جهاز الكتروني أو بنيت على نسخة مفصلة من القائمة و خيالية الهياكل المعمارية. كل شيء محدود فقط بخيال اللاعب وإمكانيات عالم الألعاب.





ولكن دعونا لا نتحدث أكثر عما ينشئه اللاعبون بالضبط ، ولكن دعونا نلقي نظرة على جانب الخادم من التطبيق ونسلط الضوء على المشاكل (المعقدة للغاية في بعض الأحيان) التي يمكن أن تنشأ أثناء العمل تحت التحميل. دعونا نجري حجزًا على الفور أننا سنتحدث فقط عن إصدار Java.



أنواع الخوادم



أبسط خيار هو الخادم المضمن في عميل اللعبة. لقد أنشأنا عالمًا ، وضغطنا على زر واحد ، والآن أصبح الخادم متاحًا على الشبكة المحلية. لا يمكن لهذا الخيار أن يتحمل أي حمل خطير ، وبالتالي لن نفكر فيه حتى.



فانيلا



توزع Mojang Studios جزء الخادم من اللعبة كتطبيق Java مجانًا على الموقع الرسمي . هذا يسمح لك بإنشاء خادمك المخصص والعالم الشخصي ، مما يجعله متاحًا للاتصال من أي مكان في العالم. لأولئك الذين يفعلون ذلك لأول مرة ، هناك برنامج تعليمي ممتاز متاح في لعبة Wiki المعنية.



هذا النهج له عيب واحد خطير ، وهو عدم وجود فرص "خارج الصندوق" لتوصيل المكونات الإضافية التي تعمل على توسيع وظائف الخادم وتسمح ليس فقط بأتمتة العديد من العمليات ، ولكن أيضًا لتحسين الأداء. بالإضافة إلى ذلك ، يحتوي الخادم الرسمي على استهلاك كبير إلى حد ما لذاكرة الوصول العشوائي لكل لاعب متصل.



بوكيت



تم إنشاؤها من قبل المتحمسين استنادا إلى إصدار الفانيليا، و Bukkit تطبيق الملقم توسعا كبيرا قدرات اللعبة من خلال دعم الإضافات وتعديل (تعديلات). سمح ليس فقط بإضافة كتل جديدة إلى طريقة اللعب ، ولكن أيضًا لأداء العديد من التلاعبات التي لا يمكن الوصول إليها لبرنامج الفانيليا. ومن المثير للاهتمام أن هذا التطبيق يتطلب ذاكرة أقل بكثير.



ليس من الصعب تثبيت Bukkit ، فالإرشادات المقابلة موجودة على موارد GamePedia . لكن هذا لا معنى له ، منذ أن تم حل فريق بوكيت منذ عام 2014 ، أصبح مطورو المشروع موظفين في Mojang Studios ، وتم التخلي عن المستودع . لذا فإن Bukkit قد مات بالفعل ومن المنطقي الانتباه إلى المشروعين التاليين.



SpigotMC



لتسهيل الحياة على مطوري المكونات الإضافية ، كانت هناك حاجة لواجهة برمجة تطبيقات للتفاعل مع عالم اللعبة. هذا هو بالضبط ما حله مبدعو Spigot من خلال أخذ جوهر Bukkit كأساس وإعادة صياغته لتحقيق موثوقية وأداء أفضل. ومع ذلك ، تم إغلاق مستودع Git الخاص بالمشروع بسبب قانون الألفية الجديدة لحقوق طبع ونشر المواد الرقمية ( DMCA ) ولا يمكن تنزيل المصادر من هناك.



في الوقت الحالي ، يتم تطوير SpigotMC واستخدامه بنشاط. يدعم جميع المكونات الإضافية المصممة لـ Bukkit ، ولكنه غير متوافق مع الإصدارات السابقة. للتغلب على حظر DMCA Takedown ، تم صياغة طريقة أنيقة تسمى BuildTools. هذه الأداة تلغي الحاجة إلى توزيع تطبيق مترجم وتسمح للمستخدمين بتجميع Spigot و CraftBukkit و Bukkit من المصدر. كل هذا يجعل حظر قانون الألفية الجديدة لحقوق طبع ونشر المواد الرقمية عديم الفائدة.



PaperMC



بدا كل شيء رائعًا وكان Spigot خيارًا رائعًا. لكن بعض المتحمسين لم يجدوا هذا بشكل كاف ، وكتبوا شوكة Spigot الخاصة بهم "على المنشطات". في صفحة المشروع ، تنص الميزة الرئيسية على أنه "سريع الغباء". يتيح لك المجتمع المطور حل المشكلات الناشئة بسرعة ، وتسمح لك واجهة برمجة التطبيقات الموسعة بإنشاء مكونات إضافية مثيرة للاهتمام. يمكنك بدء PaperMC بأمر واحد بسيط من الوثائق .



كل شيء على ما يرام مع توافق PaperMC ، لذلك ستعمل المكونات الإضافية المكتوبة لـ SpigotMC بسهولة على PaperMC ، ولكن بدون دعم رسمي. التوافق العكسي مع SpigotMC موجود أيضًا. الآن بعد أن أدرجنا الخيارات المختلفة لإنشاء خادم ، دعنا ننتقل إلى مشكلات الأداء التي يمكن أن تنشأ.



المشاكل والحلول



الشيء الرئيسي الذي يجب فهمه هو أن كل ما يتعلق بمعالجة عالم اللعبة سيتم معالجته فقط على قلب حوسبة واحد للخادم الفعلي. لذلك إذا كان لديك فجأة خادم ممتاز يحتوي على اثنتي عشرة نواة حوسبة ، فسيتم تحميل واحد فقط. كل ما تبقى سيكون خاملا عمليا. هذه هي بنية التطبيق ، ولا يوجد شيء يمكنك القيام به حيال ذلك. لذلك عند اختيار خادم ، يجب الانتباه ليس لعدد النوى ، ولكن لتردد الساعة. كلما كان أعلى ، كان الأداء أفضل.



أما بالنسبة لمسألة ذاكرة الوصول العشوائي ، فينبغي أن ننتقل من المؤشرات التالية:



  • العدد المخطط للاعبين
  • العدد المخطط للعوالم على الخادم ؛
  • حجم كل عالم.


تذكر أن تطبيق Java يحتاج دائمًا إلى مساحة ذاكرة وصول عشوائي. إذا كنت تعتمد على استهلاك الذاكرة لـ 8 غيغابايت ، فأنت في الواقع تحتاج إلى 12. والأرقام نسبية ، لكن الجوهر لا يتغير.



لبدء جانب الخادم ، نوصي باستخدام العلامات المحددة في مقالة Tuning the JVM - G1GC Garbage Collector Flags for Minecraft . يسمح هذا "السحر الأسود" للخادم بتكوين أداة تجميع البيانات المهملة بذكاء وتحسين استخدام ذاكرة الوصول العشوائي. لا يستحق تخصيص ذاكرة أكبر مما يستهلكه الخادم فعليًا خلال ذروة تدفق اللاعبين.



إنشاء خريطة كتلة

"هل تعتقد حقاً أن القمر موجود فقط عندما تنظر إليه؟" (البرت اينشتاين)
خادم جديد. بمجرد اتصال اللاعب بنجاح للمرة الأولى ، تظهر شخصية اللعبة في نقطة تجمع مشتركة (تفرخ). هذا هو المكان الوحيد الذي يتم فيه إنشاء عالم اللعبة مسبقًا بواسطة الخادم. في نفس الوقت ، ينظر جزء العميل في الإعدادات ، والمعلمة الرئيسية هي مسافة الرسم. يتم قياسها بالقطع (مساحة الخريطة 16 × 16 وارتفاع 256 قطعة). كم عدد الأجزاء المشار إليها هناك ، هذا هو بالضبط الكمية المطلوبة من الخادم.



يتم تخزين خريطة عالمية للعالم على الخادم ، وإذا لم يكن هناك كتل تم إنشاؤها في نقطة ظهور شخصية اللعبة ، فإن الخادم يقوم بإنشائها ديناميكيًا وتخزينها. لا يتطلب هذا موارد حوسبة كبيرة فحسب ، بل يزيد أيضًا باستمرار من حجم خريطة العالم. على أحد أقدم الخوادم الأناركية 2b2t(2builders2tools) تجاوز حجم الخريطة بالفعل 8 تيرابايت ، والحدود العالمية عند علامة 30 مليون كتلة. ترتبط آلاف القصص بهذا الخادم وتستحق مقاله الخاص في سلسلة من المقالات.



إن إنشاء عالم حول لاعب واحد لا يمثل مشكلة. سيؤدي إنشاء عالم حول مئات اللاعبين إلى حدوث فرامل طفيفة في الخادم لفترة قصيرة ، وبعد ذلك سينخفض ​​الحمل. جيل العالم على مسافة رسم عميل حول ألف لاعب قادر بالفعل على "إسقاط" الخادم وطرد جميع العملاء منه بحلول المهلة.

برنامج الخادم له قيمة مثل TPS (القراد لكل خادم - القراد في الثانية). عادةً ما تكون دورة الساعة الواحدة تساوي 50 مللي ثانية. (ثانية واحدة من العالم الحقيقي تساوي 20 بارًا من عالم اللعبة). إذا زادت معالجة ساعة واحدة إلى 60 ثانية ، فسيتم إغلاق تطبيق الخادم ، مما يؤدي إلى التخلص من جميع اللاعبين.
المخرج هو قصر العالم على إحداثيات معينة وإجراء توليد أولية للكتل. وبالتالي ، فإننا نزيل الحاجة إلى الجيل الديناميكي أثناء اللعبة ، وسيتعين على الخادم قراءة الخريطة الحالية فقط. تتم معالجة كلتا المشكلتين من خلال مكون إضافي واحد WorldBorder .



أسهل طريقة هي تعيين حدود العالم على شكل دائرة نسبة إلى نقطة التفرخ (على الرغم من أنه يمكنك جعلها بأي شكل) باستخدام أمر واحد:



/wb set <  > spawn


إذا حاول شخصية اللاعب عبور الحدود ، فسيتم رميه بضع كتل. إذا تم ذلك عدة مرات في فترة زمنية محدودة ، فسيتم نقل الدخيل بالقوة إلى نقطة التفرخ. إن التوليد المسبق للعالم أسهل مع الأمر:



/wb fill


نظرًا لأن هذا الإجراء يمكن أن يؤثر على اللاعبين المحتملين على الخادم ، فلا تنسَ تأكيد التنفيذ:



/wb confirm


إجمالاً ، استغرق الأمر حوالي ساعتين على معالج Intel® Xeon® Gold 6240 لتكوين عالم به نصف قطر يبلغ 5000 كتلة (40 مليار كتلة تقريبًا). لذلك ، إذا كنت ترغب في بدء إنشاء خريطة أكبر مسبقًا ، ضع في اعتبارك أن هذه العملية ستستغرق وقتًا مناسبًا ، وسيتم تخفيض TPS الخاص بالخادم بشكل خطير. تذكر أيضًا أنه حتى نصف قطر يبلغ 5000 كتلة سيتطلب حوالي 2 جيجابايت من مساحة القرص.



على الرغم من حقيقة أن النسخة المتطرفة من المكون الإضافي تم تطويرها لإصدار Minecraft 1.14 ، فقد تم تجريبًا أنها تعمل بشكل جيد في الإصدارات اللاحقة. تتوفر قائمة كاملة بالأوامر مع شرح في منتدى البرنامج المساعد .



كتل المشكلة



هناك العديد من أنواع الكتل في Minecraft. ومع ذلك ، نود أن نلفت انتباه القراء إلى كتلة مثل TNT . كما يوحي الاسم ، هذه الكتلة متفجرة (ملاحظة المحرر عنصر قابل للعب في العالم الافتراضي وهذا العنصر لا يحتوي على متفجرات حقيقية) . تكمن خصوصيته في أنه في لحظة التنشيط ، تبدأ قوة الجاذبية في العمل عليها. هذا يجبر الخادم على حساب جميع الإحداثيات ، إذا بدأت الكتلة في السقوط في هذه اللحظة.



إذا كان هناك العديد من كتل TNT ، فإن تفجير كتلة واحدة يسبب التفجير وإدراج الجاذبية في الكتل المجاورة ، مما يؤدي إلى تشتيتها في جميع الاتجاهات. كل هذه الآليات الجميلة على جانب الخادم تبدو وكأنها الكثير من العمليات لحساب مسار كل من الكتل ، بالإضافة إلى التفاعلات مع الكتل المجاورة. المهمة كثيفة الاستخدام للموارد ، والتي يمكن للجميع التحقق منها بسهولة. إنشاء وتفجير مكعب من كتل TNT بحجم 30x30x30 على الأقل. وإذا كنت تعتقد أن لديك جهاز كمبيوتر قوي للألعاب ، فأنت مخطئ جدًا ؛)



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




أدت "تجربة" مماثلة على خادم مع Intel® Xeon® Gold 6240 إلى "تراجع" خطير في TPS وتحميل 80٪ على وحدة المعالجة المركزية طوال فترة تفجير الكتلة. وبالتالي ، إذا كان بإمكان أي من اللاعبين القيام بذلك ، فستؤثر مشكلة الأداء على جميع اللاعبين على الخادم.



الخيار الأكثر صرامة هو بلورات النهاية . إذا انفجر TNT مع ذلك بالتسلسل ، فإن بلورات النهاية تنفجر كلها في نفس الوقت ، وهو ما يمكن نظريًا أن يوقف تمامًا تشغيل تطبيق الخادم.



يمكن تجنب هذا السيناريو فقط من خلال حظر استخدام هذه الكتل في عالم اللعبة. على سبيل المثال ، استخدام البرنامج المساعد WorldGuard . يرجى ملاحظة أن هذا البرنامج المساعد نفسه لا يعمل بدون مكون WorldEdit آخر. لذا قم بتثبيت WorldEdit أولاً ثم WorldGuard.



خاتمة



إدارة خادم اللعبة المختصة ليست مهمة سهلة. ستنتظر الصعوبات والأداء المنخفض في كل منعطف ، خاصة إذا كنت لا تأخذ في الاعتبار آليات اللعب نفسها. من المستحيل توقع كل شيء ، لأن اللاعبين يكونون مبدعين جدًا في بعض الأحيان في محاولة إجبار الخادم على القيام بشيء لم يكن مخصصًا له. فقط التوازن المعقول بين المخاطر والحدود المحددة سيسمح للخادم بالعمل في وضع مستمر ولن يقلل من أدائه إلى القيم الحرجة.



في الحجر الصحي ، غاب بعض موظفينا عن مكاتبهم المفضلة وقرروا إعادة إنشائها داخل Minecraft. لديك أيضًا فرصة لزيارتنا دون المخاطرة بصحتك وإضاعة الوقت على الطريق.

minecraft.selectel.ru ( 1.15.2), - -1 -2. , .



, , «» .



All Articles