ในบล็อกของเราเรามีอยู่แล้ว
ตลอดระยะเวลา 9 ปี (นับตั้งแต่วันที่วางจำหน่าย) Minecraft ได้รับแฟน ๆ และผู้เกลียดชังจำนวนมากทั้งจากผู้เล่นทั่วไปและคนเกินบรรยาย แนวคิดที่เรียบง่ายของโลกที่ทำจากบล็อกได้พัฒนาจากรูปแบบความบันเทิงที่เรียบง่ายมาเป็นสื่อสากลสำหรับการสื่อสารและสร้างวัตถุต่างๆ จากโลกแห่งความเป็นจริง
นอกจากการก่อสร้างแล้ว ตัวเกมยังมีความสามารถในการสร้างอีกด้วย
แต่อย่าพูดคุยเพิ่มเติมเกี่ยวกับสิ่งที่ผู้เล่นสร้างขึ้น แต่ลองดูที่ส่วนเซิร์ฟเวอร์ของแอปพลิเคชันและเน้นปัญหา (บางครั้งก็ซับซ้อนมาก) ที่อาจเกิดขึ้นระหว่างการทำงานภายใต้โหลด รีบจับจองกันได้เลยว่าเราจะพูดถึงเฉพาะ Java Edition เท่านั้น
ประเภทของเซิร์ฟเวอร์
ตัวเลือกที่ง่ายที่สุดคือเซิร์ฟเวอร์ที่สร้างไว้ในไคลเอนต์เกม เราสร้างโลกขึ้นมา กดปุ่มเดียว และเซิร์ฟเวอร์ก็สามารถเข้าถึงได้ผ่านเครือข่ายท้องถิ่น ตัวเลือกนี้ไม่สามารถทนต่อภาระร้ายแรงได้ดังนั้นเราจะไม่พิจารณาด้วยซ้ำ
วานิลลา
Mojang Studios เผยแพร่ส่วนเซิร์ฟเวอร์ของเกมเป็นแอปพลิเคชัน Java ฟรี
วิธีนี้มีข้อเสียเปรียบร้ายแรงประการหนึ่ง กล่าวคือ การขาดความสามารถนอกกรอบในการเชื่อมต่อปลั๊กอินที่ขยายฟังก์ชันการทำงานของเซิร์ฟเวอร์ และไม่เพียงแต่ทำให้กระบวนการต่างๆ เป็นแบบอัตโนมัติเท่านั้น แต่ยังช่วยเพิ่มประสิทธิภาพการทำงานอีกด้วย นอกจากนี้ เซิร์ฟเวอร์อย่างเป็นทางการยังมีการใช้ RAM ค่อนข้างมากสำหรับผู้เล่นที่เชื่อมต่อแต่ละคน
บักกิต
แอปพลิเคชันเซิร์ฟเวอร์ที่สร้างขึ้นโดยผู้ที่ชื่นชอบตามเวอร์ชัน Vanilla
การติดตั้ง Bukkit ไม่ใช่เรื่องยาก คำแนะนำที่เกี่ยวข้องอยู่ในทรัพยากร
SpigotMC
เพื่อให้ชีวิตของนักพัฒนาปลั๊กอินง่ายขึ้น จำเป็นต้องมี API เพื่อโต้ตอบกับโลกของเกม นี่เป็นปัญหาที่ผู้สร้างแก้ไขอย่างแน่นอน
ปัจจุบัน SpigotMC ได้รับการพัฒนาและใช้งานอย่างแข็งขัน รองรับปลั๊กอินทั้งหมดที่สร้างขึ้นสำหรับ Bukkit แต่ไม่สามารถใช้งานร่วมกับปลั๊กอินรุ่นเก่าได้ เพื่อหลีกเลี่ยง DMCA Takedown จึงได้มีการคิดค้นวิธีการอันหรูหราที่เรียกว่า BuildTools เครื่องมือนี้ช่วยลดความจำเป็นในการแจกจ่ายแอปพลิเคชันที่คอมไพล์แล้ว และช่วยให้ผู้ใช้สามารถคอมไพล์ Spigot, CraftBukkit และ Bukkit จากซอร์สโค้ดได้ ทั้งหมดนี้ทำให้การแบน DMCA ไร้ประโยชน์
เปเปอร์เอ็มซี
ทุกอย่างดูเท่ และ Spigot ก็กลายเป็นตัวเลือกที่ยอดเยี่ยม แต่นี่ยังไม่เพียงพอสำหรับผู้ที่ชื่นชอบบางคน และพวกเขาสร้าง Spigot ทางแยกของตัวเองขึ้นมา “บนสเตียรอยด์” บน
PaperMC มีความเข้ากันได้ดีเยี่ยม ดังนั้นปลั๊กอินที่เขียนขึ้นสำหรับ SpigotMC จึงสามารถทำงานบน PaperMC ได้อย่างง่ายดาย แต่ไม่มีการสนับสนุนอย่างเป็นทางการ มีความเข้ากันได้แบบย้อนหลังกับ SpigotMC ด้วย ตอนนี้เราได้แสดงรายการตัวเลือกต่างๆ สำหรับการสร้างเซิร์ฟเวอร์แล้ว มาดูปัญหาด้านประสิทธิภาพที่อาจเกิดขึ้นกันดีกว่า
ปัญหาและแนวทางแก้ไข
สิ่งสำคัญที่คุณต้องเข้าใจคือทุกสิ่งที่เกี่ยวข้องกับการประมวลผลโลกของเกมจะถูกประมวลผลบนคอร์ประมวลผลเดียวของเซิร์ฟเวอร์จริงเท่านั้น ดังนั้นหากจู่ๆ คุณมีเซิร์ฟเวอร์ที่ยอดเยี่ยมซึ่งมีแกนประมวลผลหลายสิบคอร์ ก็จะมีการโหลดเพียงคอร์เดียวเท่านั้น คนอื่นๆ ทั้งหมดจะไม่ได้ใช้งานจริง นี่คือสถาปัตยกรรมของแอปพลิเคชัน และคุณไม่สามารถทำอะไรกับมันได้ ดังนั้นเมื่อเลือกเซิร์ฟเวอร์ คุณไม่ควรใส่ใจกับจำนวนคอร์ แต่ต้องคำนึงถึงความถี่สัญญาณนาฬิกาด้วย ยิ่งสูงประสิทธิภาพก็จะยิ่งดีขึ้นเท่านั้น
ในเรื่องความจุ RAM เราควรดำเนินการตามตัวบ่งชี้ต่อไปนี้:
- จำนวนผู้เล่นที่วางแผนไว้
- จำนวนโลกที่วางแผนไว้บนเซิร์ฟเวอร์
- ขนาดของโลกแต่ละใบ
ควรจำไว้ว่าแอปพลิเคชัน Java ต้องการ RAM สำรองเสมอ หากคุณคาดว่าจะใช้หน่วยความจำ 8 กิกะไบต์ จริงๆ แล้วคุณต้องมี 12 ตัวเลขนั้นสัมพันธ์กัน แต่สาระสำคัญไม่เปลี่ยนแปลง
ในการเริ่มต้นส่วนเซิร์ฟเวอร์ เราขอแนะนำให้ใช้แฟล็กที่ระบุในบทความ
การสร้างแผนที่บล็อก
“คุณคิดว่าดวงจันทร์มีอยู่จริงเมื่อคุณมองมันเท่านั้น?” (Albert Einstein)
เซิร์ฟเวอร์ใหม่ที่สมบูรณ์ ทันทีที่ผู้เล่นเชื่อมต่อสำเร็จเป็นครั้งแรก ตัวละครในเกมจะปรากฏที่จุดรวมตัวทั่วไป (วางไข่) นี่เป็นสถานที่เดียวที่โลกของเกมถูกสร้างไว้ล่วงหน้าโดยเซิร์ฟเวอร์ ในขณะเดียวกัน ส่วนของไคลเอนต์จะดูการตั้งค่า และพารามิเตอร์หลักคือระยะการวาด วัดเป็นชิ้น (พื้นที่แผนที่คือ 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 GB
แม้ว่าปลั๊กอินเวอร์ชันล่าสุดจะได้รับการพัฒนาสำหรับ Minecraft เวอร์ชัน 1.14 แต่ก็มีการทดลองพบว่าทำงานได้ดีกับเวอร์ชันต่อๆ ไป มีรายการคำสั่งทั้งหมดพร้อมคำอธิบาย
บล็อกปัญหา
มีบล็อกมากมายใน Minecraft อย่างไรก็ตาม เราต้องการดึงดูดความสนใจของผู้อ่านไปยังบล็อกเช่น ทีเอ็นที. ตามชื่อเลย บล็อกนี้เป็นวัตถุระเบิด (หมายเหตุบรรณาธิการ - นี่คือไอเท็มเกมของโลกเสมือนจริง และไอเท็มนี้ไม่มีอะไรเกี่ยวกับวัตถุระเบิดจริง). ลักษณะเฉพาะของมันคือในขณะที่เปิดใช้งานแรงโน้มถ่วงจะเริ่มกระทำกับมัน สิ่งนี้จะบังคับให้เซิร์ฟเวอร์คำนวณพิกัดทั้งหมดหากในขณะนี้บล็อกเริ่มลดลง
หากมีบล็อก TNT หลายบล็อก การระเบิดของบล็อกหนึ่งจะทำให้เกิดการระเบิดและการกระตุ้นแรงโน้มถ่วงในบล็อกใกล้เคียง โดยกระจายไปในทุกทิศทาง กลไกที่สวยงามทั้งหมดนี้บนฝั่งเซิร์ฟเวอร์ดูเหมือนว่าจะมีการดำเนินการมากมายในการคำนวณวิถีของแต่ละบล็อก เช่นเดียวกับการโต้ตอบกับบล็อกข้างเคียง งานนี้เป็นงานที่ใช้ทรัพยากรมาก ซึ่งใครๆ ก็สามารถตรวจสอบได้อย่างง่ายดาย สร้างและระเบิดลูกบาศก์จากบล็อก TNT ที่มีขนาดอย่างน้อย 30x30x30 และถ้าคุณคิดว่าคุณมีคอมพิวเตอร์สำหรับเล่นเกมที่ดีและทรงพลัง แสดงว่าคุณคิดผิดมาก 😉
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt
“การทดลอง” ที่คล้ายกันบนเซิร์ฟเวอร์ที่ใช้ Intel® Xeon® Gold 6240 ส่งผลให้ TPS ลดลงอย่างมากและโหลด CPU 80% ในช่วงเวลาการระเบิดของบล็อกทั้งหมด ดังนั้นหากผู้เล่นคนใดสามารถทำได้ ปัญหาด้านประสิทธิภาพจะส่งผลกระทบต่อผู้เล่นทุกคนบนเซิร์ฟเวอร์
ตัวเลือกที่ยากยิ่งขึ้น - ขอบคริสตัล. หาก TNT ระเบิดตามลำดับ Edge Crystals จะระเบิดทั้งหมดพร้อมกัน ซึ่งตามทฤษฎีแล้วสามารถหยุดการทำงานของแอปพลิเคชันเซิร์ฟเวอร์ได้อย่างสมบูรณ์
สถานการณ์นี้สามารถหลีกเลี่ยงได้โดยการห้ามการใช้บล็อกเหล่านี้ในโลกของเกมโดยสมบูรณ์เท่านั้น เช่น การใช้ปลั๊กอิน
ข้อสรุป
การจัดการเซิร์ฟเวอร์เกมอย่างเหมาะสมไม่ใช่เรื่องง่าย ความยากและประสิทธิภาพที่ลดลงจะรอคุณอยู่ทุกเทิร์น โดยเฉพาะอย่างยิ่งหากคุณไม่คำนึงถึงกลไกการเล่นเกมด้วย เป็นไปไม่ได้ที่จะคาดการณ์ทุกสิ่ง เพราะบางครั้งผู้เล่นอาจใช้ความคิดสร้างสรรค์อย่างมากในการพยายามบังคับให้เซิร์ฟเวอร์ทำบางสิ่งโดยไม่ได้ตั้งใจ ความสมดุลที่เหมาะสมระหว่างความเสี่ยงและข้อจำกัดที่กำหนดไว้เท่านั้นที่จะทำให้เซิร์ฟเวอร์ทำงานอย่างต่อเนื่องและไม่ลดประสิทธิภาพลงเหลือค่าวิกฤต
ในระหว่างการกักกัน พนักงานของเราบางคนพลาดสำนักงานโปรดและตัดสินใจสร้างสำนักงานขึ้นมาใหม่ภายใน Minecraft คุณยังมีโอกาสมาเยี่ยมเยียนเราโดยไม่ต้องเสี่ยงต่อสุขภาพหรือเสียเวลาบนท้องถนน
เพื่อดำเนินการนี้ เราขอเชิญทุกคนมาที่เซิร์ฟเวอร์ของเรา minecraft.selectel.ru (ไคลเอนต์เวอร์ชัน 1.15.2) ซึ่งศูนย์ข้อมูล Tsvetochnaya-1 และ Tsvetochnaya-2 ถูกสร้างขึ้นใหม่ อย่าลืมตกลงที่จะดาวน์โหลดแหล่งข้อมูลเพิ่มเติม เนื่องจากจำเป็นสำหรับการแสดงสถานที่บางแห่งอย่างถูกต้อง
ภารกิจ รหัสส่งเสริมการขาย ไข่อีสเตอร์ และการสื่อสารที่น่าพึงพอใจรอคุณอยู่
ที่มา: will.com