ดูเหมือนว่าเกม MMORPG ส่วนใหญ่มีการบำรุงรักษาเซิร์ฟเวอร์ปกติบางเกมทุกวันบางสัปดาห์ละครั้ง พวกเขาต้องทำอะไรจริง ๆ และทำไมจึงจำเป็น?
หากคุณเริ่มต้นด้วยโครงการเช่นนี้คุณจะทำอย่างไรเพื่อหลีกเลี่ยงปัญหานี้?
ดูเหมือนว่าเกม MMORPG ส่วนใหญ่มีการบำรุงรักษาเซิร์ฟเวอร์ปกติบางเกมทุกวันบางสัปดาห์ละครั้ง พวกเขาต้องทำอะไรจริง ๆ และทำไมจึงจำเป็น?
หากคุณเริ่มต้นด้วยโครงการเช่นนี้คุณจะทำอย่างไรเพื่อหลีกเลี่ยงปัญหานี้?
คำตอบ:
ฉันสงสัยว่าพวกเขากำลังปรับใช้รหัสรุ่นล่าสุดของพวกเขาซึ่งต้องการให้พวกเขารีสตาร์ทแอปพลิเคชัน (และหวังว่าจะทำการทดสอบบางอย่างก่อนที่จะเปิดใช้งานการเข้าถึงอีกครั้ง) จากมุมมองนั้นมันเป็นปัญหาของ StackOverflow และ ServerFault ที่น้อยกว่า
ฉันคิดว่าเป็นไปได้ที่จะสร้างระบบการปะแก้ร้อน แต่มันจำเป็นต้องมีความซับซ้อนอย่างไม่น่าเชื่อ จากสิ่งที่ฉันเข้าใจเซิร์ฟเวอร์ MMO "แอปพลิเคชัน" ประกอบด้วยองค์ประกอบที่แตกต่างกันหลายประการ -
เซิร์ฟเวอร์ล็อกอิน - จัดการการพิสูจน์ตัวตนและทำหน้าที่เป็น "ฮับ" ระหว่างเซิร์ฟเวอร์เกม เมื่อลูกค้าอยู่ในเกมพวกเขาจะไม่โต้ตอบกับเซิร์ฟเวอร์ล็อกอินอีกต่อไป ในระบบดังกล่าวคุณสามารถใช้แพตช์และรีสตาร์ทเซิร์ฟเวอร์เข้าสู่ระบบโดยไม่รบกวนการเล่นเกม (แม้ว่าคุณจะมีช่วงเวลาที่ผู้คนจะไม่สามารถเข้าสู่ระบบได้)
เซิร์ฟเวอร์ Gameplay - กลุ่มของเครื่องที่จัดกลุ่มเป็นหน่วยอิสระแบบลอจิคัล ("โลก" ฯลฯ ) สันนิษฐานว่ากลุ่มการเล่นเกมแต่ละกลุ่มใช้โปรโตคอลการสื่อสารภายในเพื่อให้สอดคล้องกับสถานะซึ่งกันและกัน คุณอาจจะต้องแก้ไขแต่ละคลัสเตอร์พร้อมกัน วิธีหนึ่งที่เป็นไปได้ในการทำเช่นนี้คือการแก้ปัญหาการวอร์มอัพ จากนั้นคุณจะต้องสามารถทำได้ทั้งคู่
เซิร์ฟเวอร์ฐานข้อมูล - ที่เก็บข้อมูลถาวรบางประเภทเช่น RDBMS หวังว่าคุณจะไม่ทำการเปลี่ยนแปลงดาต้าสโตร์ที่บ่อยครั้ง สันนิษฐานว่าแต่ละเซิร์ฟเวอร์เพลย์ / คลัสเตอร์มีดาต้าสแตรร์อิสระ คุณอาจสามารถใช้เคล็ดลับเดียวกันกับ warm failover (และบอกเซิร์ฟเวอร์การเล่นเกมให้ยกเลิกการเชื่อมต่อรอให้ฐานข้อมูลเก่าและ failover ทำการซิงค์จากนั้นเชื่อมต่อใหม่กับ failover) แต่ดูเหมือนว่าค่อนข้างเสี่ยงสำหรับฉัน
ทุกกรณีข้างต้นเพิ่มจำนวนความซับซ้อนที่เหลือเชื่อให้กับระบบที่ซับซ้อนอยู่แล้วและแนะนำสถานที่ต่าง ๆ ซึ่งความล้มเหลวของรหัสอาจทำให้ข้อมูลสูญหายหรือเสียหายได้
อีกทางเลือกหนึ่งคือการใช้ภาษาที่ออกแบบมาเพื่อความพร้อมในการทำงาน 100% และมีความสามารถในตัวสำหรับการเรียกใช้รหัสฮอตแพช Erlangเป็นทางเลือกที่ดี ( hotpatching ตัวอย่าง ) และJava มีฟังก์ชันการทำงานที่คล้ายกัน
ไม่มีใครมีประสบการณ์ใช้งานอะไรแบบนี้จริงเหรอ? ฮะ.
มีสาเหตุหลายประการที่เชื่อมทั้งรหัสและระบบ ก่อนอื่นให้จำไว้ว่าเครื่องยนต์ MMO 'ใหญ่' ในปัจจุบันส่วนใหญ่ได้รับการตั้งโปรแกรมมาหลายปีแล้วและแม้ว่าจะมีการอัพเกรดกราฟิกและเทคโนโลยีมาตั้งแต่นั้นก็ตาม ตัวอย่างเช่น Eve-Online ยังคงทำงานบนอินสแตนซ์ขนาดใหญ่ของ Microsoft SQL Server ซึ่งเป็นสาเหตุที่ทำให้พวกเขาพยายามที่จะดึงมันออกมามากขึ้นโดยการอัพเกรดฮาร์ดแวร์
ตัวอย่างของการปรับปรุงตั้งแต่ WoW และ EVE เริ่มต้นขึ้นคืองานที่ทำในฐานข้อมูลคีย์ / ค่าแบบกระจายเช่น MapReduce ของ Google (และการใช้งานโอเพ่นซอร์ส Hadoop) บริการคิวการตอบสนองการตอบสนองที่รวดเร็วมาก (Amazon SQS) และอื่น ๆ " เทคโนโลยีคลาวด์ "ที่มุ่งเน้น
ฉันมีประสบการณ์มากที่สุดกับ EVE (ฉันเป็นคนที่แต่งตัวประหลาดเลเซอร์มากกว่าผู้ชายคนหนึ่งที่ชอบต่อสู้) ดังนั้นตัวอย่างเหล่านี้บางอย่างก็ยิ่งเน้น EVE
เท่าที่เหตุผลระบบไป:
เท่าที่เหตุผลซอฟต์แวร์ไป:
การใช้เศรษฐกิจที่มีทั้งลูปปิดและเปิดเป็นปัญหาหนึ่งสำหรับผู้ดำเนินการ MMO - ถ้าคุณไม่เชื่อฉันอ่านบทความทางวิชาการที่เขียนเกี่ยวกับเศรษฐกิจเกมและการศึกษาเกมเก่าอย่าง Ultima Online ที่ มีเศรษฐกิจแบบดั้งเดิมค่อนข้าง การวิเคราะห์ที่ต้องเกิดขึ้นเพื่อเติมเต็มลูปที่เปิดอยู่และเพื่อระบุการโกงและกิจกรรมทางเศรษฐกิจเชิงลบอื่น ๆ จำเป็นต้องเกิดขึ้นแบบออฟไลน์ด้วยภาพรวมของข้อมูลซึ่งบางครั้งสามารถทำได้ในขณะที่ฐานข้อมูลถูกล็อกทั้งหมด
หากคุณสังเกตเห็นการบำรุงรักษาของอีฟจะเกิดขึ้นเมื่อตอนเที่ยงของอังกฤษซึ่งเป็นศูนย์ข้อมูลหลัก
ฉันสงสัยว่าเวลาทั้งหมดที่ Blizzard (ฉันอนุมานได้ว่าเป็นเช้าวันอังคารที่คุณกำลังโพสต์คำถามของคุณ) การเสนอราคาสำหรับการบำรุงรักษาสำหรับทั้งคลัสเตอร์ ไม่ใช่ว่าทุกเซิร์ฟเวอร์ใช้เวลานานกว่าจะทำงานได้
แม้ว่ามันจะเป็นไปได้ที่จะนำเซิร์ฟเวอร์แต่ละเครื่องสำรองข้อมูลได้เร็วขึ้น แต่นั่นอาจเป็นการเรียกร้องความลำเอียงที่มีต่อผู้เล่นที่ผิดกฎหมายในช่วงเวลาที่กำหนด เช่นนี้พวกเขาเก็บทุกอย่างลงไปจนกว่างานทั้งหมดจะเสร็จสิ้น; กับหลายร้อยอาณาจักรในการทำงานพวกเขาอาจทำงานหลายอย่างพร้อมกัน แต่ยังคงตรวจสอบขั้นสุดท้ายก่อนที่จะนำสิ่งต่าง ๆ กลับสู่สถานะออนไลน์ หากคุณทำการอัปเกรดฮาร์ดแวร์นี่อาจเป็นลำดับในศูนย์ข้อมูลเท่าที่พวกเขามี
สำหรับสาเหตุที่พวกเขาทำการบำรุงรักษาบางอย่างก็อาจเป็นการรีบูตประสิทธิภาพ แม้ว่าจะเป็นการดีหากไม่จำเป็นต้องมีการรีบูตเครื่องดังกล่าว แต่ค่าใช้จ่ายในการทำเช่นนั้นเทียบกับผลกระทบของการไม่ทำเช่นนั้นอาจเป็นการชี้แนะทางเลือกของพวกเขาที่นี่
เมื่อคุณดูว่าทำไมพวกเขาไม่สามารถรวมกลุ่มกระบวนการและดำเนินการบำรุงรักษาแบบกลิ้งสิ่งเล็ก ๆ น้อย ๆ ที่ผู้คนรู้เกี่ยวกับโครงสร้างพื้นฐานของ WoW แสดงให้เห็นว่าเครื่องจักรหลายเครื่องให้บริการสำหรับแต่ละอาณาจักร (เช่นหนึ่งสำหรับโลกนี้ ฯลฯ ) พวกเขาไม่ได้ใช้การตั้งค่ากระบวนการที่ใช้งานอยู่ที่ใช้ร่วมกันของรัฐ ไม่มีการแบ่งปันสถานะสดเฉพาะข้อมูลถาวรผ่านฐานข้อมูล
ในท้ายที่สุดกลไกของการให้บริการออนไลน์ที่รวดเร็วเพื่อฐานลูกค้าขนาดใหญ่นั้นท้าทายวิธีปฏิบัติที่ดีที่สุดที่เราอาจใช้เมื่อพูดถึงเว็บไซต์หรือบริการบนอินเทอร์เน็ตแบบดั้งเดิมอื่น ๆ
การหยุดทำงานที่ยืดเยื้อเมื่อเร็ว ๆ นี้ใน EvE Online นั้นเกี่ยวกับการติดตั้งฮาร์ดแวร์ใหม่เช่น SAN ที่เร็วกว่า ในขณะที่หนึ่งสามารถย้ายข้อมูลจำนวนมากโดยสร้างกลุ่มไฟล์ใหม่บนไดรฟ์ใหม่แล้วทำการล้างกลุ่มหลักซึ่งจะส่งผลให้ประสิทธิภาพลดลงเป็นระยะเวลานานเนื่องจาก I / O คงที่ ดังนั้นพวกเขาจึงเลือกจะแยกฐานข้อมูล 1.1TB และย้ายมันในครั้งเดียว
คำตอบสำหรับคำถามนี้ขึ้นอยู่กับแอปพลิเคชันเฉพาะด้วย ตัวอย่างเช่นเซิร์ฟเวอร์ที่จัดการกับระบบดาวไม่สามารถสลับร้อนโดยไม่รบกวนการเล่นเกมดังนั้นการหยุดทำงานจะใช้เพื่อกำหนดเซิร์ฟเวอร์ที่มีประสิทธิภาพมากขึ้นให้เป็นฮอตสปอตที่มีศักยภาพ นอกจากนี้การคำนวณความเป็นเจ้าของ (อธิปไตย) ของระบบดาวก็ถูกคำนวณ ขึ้นอยู่กับตัวแปรที่แตกต่างกันหลายสิบตัวแปรซึ่งทั้งหมดสามารถเปลี่ยนแปลงได้ขึ้นอยู่กับการกระทำของผู้เล่น ไม่จำเป็นต้องพูดว่าการใช้ชีวิตแบบนั้นอาจทำให้เกิดการล็อคมากเกินไปและ / หรือปัญหาอื่น ๆ ที่เกิดขึ้นพร้อมกัน แต่การแก้ไขเหล่านั้นซ้ายที่ดีที่สุดStackOverflow
สมมุติว่าคุณไม่สามารถจัดการผ่านการทำคลัสเตอร์ / โหลดบาลานซ์เช่นการเปลี่ยนแปลง DB schema ที่สำคัญ
ในหัวข้อเมื่อเร็ว ๆ นี้ฉันควรรีบูตเซิร์ฟเวอร์ linux ซึ่งเป็นข้อดีอีกข้อหนึ่งคืออะไรโดยตรวจสอบว่าทุกอย่างเริ่มต้นอย่างถูกต้องในการรีบูตหรือหลังการเปลี่ยนแปลงการกำหนดค่า (หลัก)
การอัพเกรดฮาร์ดแวร์ (หรือการเปลี่ยนฮาร์ดแวร์) อย่างง่าย ๆ จะแสดงเป็น "การบำรุงรักษาเซิร์ฟเวอร์" โดยเกม MMORPG เรื่องเล็กน้อยเรามักจะลืมมัน
ฉันใช้งานสถาปัตยกรรม MMO ใน Erlang ซึ่งรองรับการอัปเกรดและการแจกจ่ายรหัสร้อน ตัวอย่างเช่น "GamePlay Server" หนึ่งเครื่องสามารถเรียกใช้ข้ามเครื่องจำนวนหนึ่งหากจำเป็นต้องมีการอัพเกรดฮาร์ดแวร์วัตถุสามารถถ่ายโอน (เรียลไทม์) ไปยังเครื่องอื่น ๆ สิ่งนี้ทำให้การอัพเกรดในฮาร์ดแวร์ซอฟต์แวร์ไม่มีการหยุดทำงาน
ฉันเชื่อว่าหน้าต่างการบำรุงรักษายังช่วยให้สามารถเปลี่ยนฮาร์ดแวร์ตามปกติเพื่อให้แน่ใจว่าส่วนประกอบจะไม่ล้มเหลว