การบำรุงรักษาเซิร์ฟเวอร์ MMORPG


14

ดูเหมือนว่าเกม MMORPG ส่วนใหญ่มีการบำรุงรักษาเซิร์ฟเวอร์ปกติบางเกมทุกวันบางสัปดาห์ละครั้ง พวกเขาต้องทำอะไรจริง ๆ และทำไมจึงจำเป็น?

หากคุณเริ่มต้นด้วยโครงการเช่นนี้คุณจะทำอย่างไรเพื่อหลีกเลี่ยงปัญหานี้?

คำตอบ:


17

ฉันสงสัยว่าพวกเขากำลังปรับใช้รหัสรุ่นล่าสุดของพวกเขาซึ่งต้องการให้พวกเขารีสตาร์ทแอปพลิเคชัน (และหวังว่าจะทำการทดสอบบางอย่างก่อนที่จะเปิดใช้งานการเข้าถึงอีกครั้ง) จากมุมมองนั้นมันเป็นปัญหาของ StackOverflow และ ServerFault ที่น้อยกว่า

ฉันคิดว่าเป็นไปได้ที่จะสร้างระบบการปะแก้ร้อน แต่มันจำเป็นต้องมีความซับซ้อนอย่างไม่น่าเชื่อ จากสิ่งที่ฉันเข้าใจเซิร์ฟเวอร์ MMO "แอปพลิเคชัน" ประกอบด้วยองค์ประกอบที่แตกต่างกันหลายประการ -

  • เซิร์ฟเวอร์ล็อกอิน - จัดการการพิสูจน์ตัวตนและทำหน้าที่เป็น "ฮับ" ระหว่างเซิร์ฟเวอร์เกม เมื่อลูกค้าอยู่ในเกมพวกเขาจะไม่โต้ตอบกับเซิร์ฟเวอร์ล็อกอินอีกต่อไป ในระบบดังกล่าวคุณสามารถใช้แพตช์และรีสตาร์ทเซิร์ฟเวอร์เข้าสู่ระบบโดยไม่รบกวนการเล่นเกม (แม้ว่าคุณจะมีช่วงเวลาที่ผู้คนจะไม่สามารถเข้าสู่ระบบได้)

  • เซิร์ฟเวอร์ Gameplay - กลุ่มของเครื่องที่จัดกลุ่มเป็นหน่วยอิสระแบบลอจิคัล ("โลก" ฯลฯ ) สันนิษฐานว่ากลุ่มการเล่นเกมแต่ละกลุ่มใช้โปรโตคอลการสื่อสารภายในเพื่อให้สอดคล้องกับสถานะซึ่งกันและกัน คุณอาจจะต้องแก้ไขแต่ละคลัสเตอร์พร้อมกัน วิธีหนึ่งที่เป็นไปได้ในการทำเช่นนี้คือการแก้ปัญหาการวอร์มอัพ จากนั้นคุณจะต้องสามารถทำได้ทั้งคู่

    1. ส่งสัญญาณไคลเอ็นต์เพื่อเชื่อมต่อกับ warm failover และยกเลิกการเชื่อมต่อจากคลัสเตอร์เก่า
    2. ทำให้สถานะซิงค์ระหว่างแอพพลิเคชั่นที่ล้มเหลวและเซิร์ฟเวอร์ที่ล้าสมัยในขณะที่ลูกค้าทั้งหมดถ่ายโอน
  • เซิร์ฟเวอร์ฐานข้อมูล - ที่เก็บข้อมูลถาวรบางประเภทเช่น RDBMS หวังว่าคุณจะไม่ทำการเปลี่ยนแปลงดาต้าสโตร์ที่บ่อยครั้ง สันนิษฐานว่าแต่ละเซิร์ฟเวอร์เพลย์ / คลัสเตอร์มีดาต้าสแตรร์อิสระ คุณอาจสามารถใช้เคล็ดลับเดียวกันกับ warm failover (และบอกเซิร์ฟเวอร์การเล่นเกมให้ยกเลิกการเชื่อมต่อรอให้ฐานข้อมูลเก่าและ failover ทำการซิงค์จากนั้นเชื่อมต่อใหม่กับ failover) แต่ดูเหมือนว่าค่อนข้างเสี่ยงสำหรับฉัน

ทุกกรณีข้างต้นเพิ่มจำนวนความซับซ้อนที่เหลือเชื่อให้กับระบบที่ซับซ้อนอยู่แล้วและแนะนำสถานที่ต่าง ๆ ซึ่งความล้มเหลวของรหัสอาจทำให้ข้อมูลสูญหายหรือเสียหายได้

อีกทางเลือกหนึ่งคือการใช้ภาษาที่ออกแบบมาเพื่อความพร้อมในการทำงาน 100% และมีความสามารถในตัวสำหรับการเรียกใช้รหัสฮอตแพช Erlangเป็นทางเลือกที่ดี ( hotpatching ตัวอย่าง ) และJava มีฟังก์ชันการทำงานที่คล้ายกัน


12

ไม่มีใครมีประสบการณ์ใช้งานอะไรแบบนี้จริงเหรอ? ฮะ.

มีสาเหตุหลายประการที่เชื่อมทั้งรหัสและระบบ ก่อนอื่นให้จำไว้ว่าเครื่องยนต์ MMO 'ใหญ่' ในปัจจุบันส่วนใหญ่ได้รับการตั้งโปรแกรมมาหลายปีแล้วและแม้ว่าจะมีการอัพเกรดกราฟิกและเทคโนโลยีมาตั้งแต่นั้นก็ตาม ตัวอย่างเช่น Eve-Online ยังคงทำงานบนอินสแตนซ์ขนาดใหญ่ของ Microsoft SQL Server ซึ่งเป็นสาเหตุที่ทำให้พวกเขาพยายามที่จะดึงมันออกมามากขึ้นโดยการอัพเกรดฮาร์ดแวร์

ตัวอย่างของการปรับปรุงตั้งแต่ WoW และ EVE เริ่มต้นขึ้นคืองานที่ทำในฐานข้อมูลคีย์ / ค่าแบบกระจายเช่น MapReduce ของ Google (และการใช้งานโอเพ่นซอร์ส Hadoop) บริการคิวการตอบสนองการตอบสนองที่รวดเร็วมาก (Amazon SQS) และอื่น ๆ " เทคโนโลยีคลาวด์ "ที่มุ่งเน้น

ฉันมีประสบการณ์มากที่สุดกับ EVE (ฉันเป็นคนที่แต่งตัวประหลาดเลเซอร์มากกว่าผู้ชายคนหนึ่งที่ชอบต่อสู้) ดังนั้นตัวอย่างเหล่านี้บางอย่างก็ยิ่งเน้น EVE

เท่าที่เหตุผลระบบไป:

  • โหนดทางกายภาพล้มเหลวบนพื้นฐานที่สอดคล้องกัน เมื่อโหนดล้มเหลวโดยทั่วไปกิจกรรมของมันจะถูกย้ายไปที่อื่นโดยใช้วิธีการใดก็ได้ อย่างไรก็ตามโหนดจะต้องนำกลับมาให้บริการโดยเร็วที่สุด ในกรณีของ EVE พวกเขาใช้ทั้งภาษาโพรเซสซิงและเซิร์ฟเวอร์เสมือน ฉันไม่แน่ใจว่าสถาปัตยกรรมของ Blizzard เป็นอย่างไร
  • ความสอดคล้องของฐานข้อมูลจำเป็นต้องได้รับการตรวจสอบบันทึกต้องได้รับการล้างข้อมูลและดัชนีและแคชข้อมูลต้องได้รับการสร้างใหม่ นี่เป็นสิ่งสำคัญอย่างยิ่งในระบบเช่น EVE ที่มีอินสแตนซ์ฐานข้อมูล "สด" เพียงหนึ่งเดียว
  • แพตช์ระบบปฏิบัติการจะต้องมีการใช้งานในเวลาที่พวกเขาสามารถรีบูตโหนดโดยไม่ต้องมีการโยกย้ายกิจกรรมมากเกินไป การโอนย้ายใช้ทรัพยากรเครือข่ายจำนวนมากซึ่งอาจทุ่มเทให้กับการประมวลผลออนไลน์
  • MMO ที่ใช้ RDBMS มีปัญหาใหญ่ในการล็อคข้อมูลและการอ้างอิงที่สมบูรณ์ การหยุดทำงานใช้เพื่อล้างข้อมูลล็อกเก่าและความสมบูรณ์จากบันทึกกิจกรรม
  • เกมส่วนใหญ่ใช้แคชข้อมูลที่จัดวางทางภูมิศาสตร์สำหรับข้อมูลแบบคงที่หรือกึ่งคงที่ (ดูข้อมูลสรุปแคชด้านล่าง) ข้อมูลในพื้นที่ใช้งานหนักเช่นชายฝั่งตะวันออกและฝั่งตะวันตกของสหรัฐอเมริกา แคชเหล่านี้จะถูกอัพเดตด้วยตนเองในช่วงเวลาที่ระบบหยุดทำงาน

เท่าที่เหตุผลซอฟต์แวร์ไป:

  • เกมเมื่อใช้งานให้ใช้ OLTP จำนวนมาก - นั่นคือการประมวลผลธุรกรรมออนไลน์ - ประเภทของการอ่าน / เขียนไปยังฐานข้อมูล อย่างไรก็ตามบางครั้งคุณต้องการรายงานสรุป ... เช่นสัตว์ร้ายที่คุณฆ่ามา 3 ปีที่ผ่านมา นั่นคือการจัดการที่ดีที่สุดโดยรายงาน OLAP - นั่นคือการประมวลผลการวิเคราะห์แบบออนไลน์ - ซึ่งมีข้อมูลสรุปตามจำนวนแถวในชุดข้อมูลขนาดใหญ่ ในความเป็นจริงเกมใช้ระบบที่ใช้ OLAP เพื่อสร้างแคชเพื่อ จำกัด จำนวนข้อความค้นหาที่ต้องอ่าน - กล่าวคือพวกเขาสร้างผลรวมทั้งหมด ณ วันที่กำหนดและเมื่อคุณถามคำถามที่พวกเขาอ่านแถว จากร้านค้า OLTP ที่สรุปช่วงเวลาตั้งแต่วันที่แน่นอน ผสานทั้งสองเข้าด้วยกันและคุณสามารถนับจำนวนชีวิตของคุณที่ไร้ค่าได้
  • Hot-Patching ดังกล่าวซึ่งฉันเห็นว่าเป็นปัญหาซอฟต์แวร์ แต่นักพัฒนาซอฟต์แวร์เห็นว่าเป็นปัญหาของระบบ ;)
  • การเติมเต็มร้านค้าของสินค้า - ใน Eve เข็มขัดดาวเคราะห์น้อยจะได้รับการฟื้นฟูทุกคืนและมีการรีไซเคิลคอมเพล็กซ์บางประเภทเช่นกัน สิ่งนี้สามารถทำได้ในระดับหนึ่งขณะออนไลน์ แต่อัลกอริธึมบางอย่างนั้นซับซ้อนเกินไปและจำเป็นต้องทำในโหมดออฟไลน์เพราะพวกเขานำฐานข้อมูลมาที่หัวเข่าในขณะที่สรุปกิจกรรมทางเศรษฐกิจของวันก่อนหน้า

การใช้เศรษฐกิจที่มีทั้งลูปปิดและเปิดเป็นปัญหาหนึ่งสำหรับผู้ดำเนินการ MMO - ถ้าคุณไม่เชื่อฉันอ่านบทความทางวิชาการที่เขียนเกี่ยวกับเศรษฐกิจเกมและการศึกษาเกมเก่าอย่าง Ultima Online ที่ มีเศรษฐกิจแบบดั้งเดิมค่อนข้าง การวิเคราะห์ที่ต้องเกิดขึ้นเพื่อเติมเต็มลูปที่เปิดอยู่และเพื่อระบุการโกงและกิจกรรมทางเศรษฐกิจเชิงลบอื่น ๆ จำเป็นต้องเกิดขึ้นแบบออฟไลน์ด้วยภาพรวมของข้อมูลซึ่งบางครั้งสามารถทำได้ในขณะที่ฐานข้อมูลถูกล็อกทั้งหมด

หากคุณสังเกตเห็นการบำรุงรักษาของอีฟจะเกิดขึ้นเมื่อตอนเที่ยงของอังกฤษซึ่งเป็นศูนย์ข้อมูลหลัก


3

ฉันสงสัยว่าเวลาทั้งหมดที่ Blizzard (ฉันอนุมานได้ว่าเป็นเช้าวันอังคารที่คุณกำลังโพสต์คำถามของคุณ) การเสนอราคาสำหรับการบำรุงรักษาสำหรับทั้งคลัสเตอร์ ไม่ใช่ว่าทุกเซิร์ฟเวอร์ใช้เวลานานกว่าจะทำงานได้

แม้ว่ามันจะเป็นไปได้ที่จะนำเซิร์ฟเวอร์แต่ละเครื่องสำรองข้อมูลได้เร็วขึ้น แต่นั่นอาจเป็นการเรียกร้องความลำเอียงที่มีต่อผู้เล่นที่ผิดกฎหมายในช่วงเวลาที่กำหนด เช่นนี้พวกเขาเก็บทุกอย่างลงไปจนกว่างานทั้งหมดจะเสร็จสิ้น; กับหลายร้อยอาณาจักรในการทำงานพวกเขาอาจทำงานหลายอย่างพร้อมกัน แต่ยังคงตรวจสอบขั้นสุดท้ายก่อนที่จะนำสิ่งต่าง ๆ กลับสู่สถานะออนไลน์ หากคุณทำการอัปเกรดฮาร์ดแวร์นี่อาจเป็นลำดับในศูนย์ข้อมูลเท่าที่พวกเขามี

สำหรับสาเหตุที่พวกเขาทำการบำรุงรักษาบางอย่างก็อาจเป็นการรีบูตประสิทธิภาพ แม้ว่าจะเป็นการดีหากไม่จำเป็นต้องมีการรีบูตเครื่องดังกล่าว แต่ค่าใช้จ่ายในการทำเช่นนั้นเทียบกับผลกระทบของการไม่ทำเช่นนั้นอาจเป็นการชี้แนะทางเลือกของพวกเขาที่นี่

เมื่อคุณดูว่าทำไมพวกเขาไม่สามารถรวมกลุ่มกระบวนการและดำเนินการบำรุงรักษาแบบกลิ้งสิ่งเล็ก ๆ น้อย ๆ ที่ผู้คนรู้เกี่ยวกับโครงสร้างพื้นฐานของ WoW แสดงให้เห็นว่าเครื่องจักรหลายเครื่องให้บริการสำหรับแต่ละอาณาจักร (เช่นหนึ่งสำหรับโลกนี้ ฯลฯ ) พวกเขาไม่ได้ใช้การตั้งค่ากระบวนการที่ใช้งานอยู่ที่ใช้ร่วมกันของรัฐ ไม่มีการแบ่งปันสถานะสดเฉพาะข้อมูลถาวรผ่านฐานข้อมูล

ในท้ายที่สุดกลไกของการให้บริการออนไลน์ที่รวดเร็วเพื่อฐานลูกค้าขนาดใหญ่นั้นท้าทายวิธีปฏิบัติที่ดีที่สุดที่เราอาจใช้เมื่อพูดถึงเว็บไซต์หรือบริการบนอินเทอร์เน็ตแบบดั้งเดิมอื่น ๆ


ที่จริงแล้วความท้าทายส่วนใหญ่จะหมุนรอบ ๆ โหนดฐานข้อมูลที่ดูแลสถานะกลาง นั่นคือบันทึกที่เชื่อถือได้ สิ่งอื่น ๆ ทั้งหมดที่ดูเหมือนว่าจะจัดการสถานะ (เซิร์ฟเวอร์ลูกค้าและกลไกการแคชใด ๆ ในระหว่างนั้น) เป็นเพียงการเจรจาต่อรองเกี่ยวกับสิ่งที่ข้อมูลทำให้ลงในฐานข้อมูล Lag เป็นเวลาที่ใช้ในฐานข้อมูลเพื่อยืนยัน back chain ที่บันทึกไว้
: 46432 Karl Katzke เมื่อ

1

การหยุดทำงานที่ยืดเยื้อเมื่อเร็ว ๆ นี้ใน EvE Online นั้นเกี่ยวกับการติดตั้งฮาร์ดแวร์ใหม่เช่น SAN ที่เร็วกว่า ในขณะที่หนึ่งสามารถย้ายข้อมูลจำนวนมากโดยสร้างกลุ่มไฟล์ใหม่บนไดรฟ์ใหม่แล้วทำการล้างกลุ่มหลักซึ่งจะส่งผลให้ประสิทธิภาพลดลงเป็นระยะเวลานานเนื่องจาก I / O คงที่ ดังนั้นพวกเขาจึงเลือกจะแยกฐานข้อมูล 1.1TB และย้ายมันในครั้งเดียว

คำตอบสำหรับคำถามนี้ขึ้นอยู่กับแอปพลิเคชันเฉพาะด้วย ตัวอย่างเช่นเซิร์ฟเวอร์ที่จัดการกับระบบดาวไม่สามารถสลับร้อนโดยไม่รบกวนการเล่นเกมดังนั้นการหยุดทำงานจะใช้เพื่อกำหนดเซิร์ฟเวอร์ที่มีประสิทธิภาพมากขึ้นให้เป็นฮอตสปอตที่มีศักยภาพ นอกจากนี้การคำนวณความเป็นเจ้าของ (อธิปไตย) ของระบบดาวก็ถูกคำนวณ ขึ้นอยู่กับตัวแปรที่แตกต่างกันหลายสิบตัวแปรซึ่งทั้งหมดสามารถเปลี่ยนแปลงได้ขึ้นอยู่กับการกระทำของผู้เล่น ไม่จำเป็นต้องพูดว่าการใช้ชีวิตแบบนั้นอาจทำให้เกิดการล็อคมากเกินไปและ / หรือปัญหาอื่น ๆ ที่เกิดขึ้นพร้อมกัน แต่การแก้ไขเหล่านั้นซ้ายที่ดีที่สุดStackOverflow


แม้ว่าการจำลองเสมือนการโยกย้ายเซิร์ฟเวอร์ที่โหลดจำนวนมากไปยังฮาร์ดแวร์ที่มีทรัพยากรพร้อมใช้งานมากกว่านั้นค่อนข้างเป็นไปได้ที่จะถ่ายทอดสดและโดยอัตโนมัติ ... โดยเฉพาะอย่างยิ่งในเกมที่การกระทำส่วนใหญ่ล่าช้าในหลายมิลลิวินาที แต่มันอาจจะซับซ้อนและมีราคาแพง ^^
Oskar Duveborn

ออสการ์โปรดจำไว้ว่าเทคโนโลยีหลักที่อยู่เบื้องหลัง EVE และ WoW ถูกเขียนขึ้นในปี 2002 ก่อนที่เทคโนโลยีเหล่านั้นจะเติบโตเต็มที่จริงๆ
: 464 Karl Katzke

0

สมมุติว่าคุณไม่สามารถจัดการผ่านการทำคลัสเตอร์ / โหลดบาลานซ์เช่นการเปลี่ยนแปลง DB schema ที่สำคัญ


0

ในหัวข้อเมื่อเร็ว ๆ นี้ฉันควรรีบูตเซิร์ฟเวอร์ linux ซึ่งเป็นข้อดีอีกข้อหนึ่งคืออะไรโดยตรวจสอบว่าทุกอย่างเริ่มต้นอย่างถูกต้องในการรีบูตหรือหลังการเปลี่ยนแปลงการกำหนดค่า (หลัก)


0

การอัพเกรดฮาร์ดแวร์ (หรือการเปลี่ยนฮาร์ดแวร์) อย่างง่าย ๆ จะแสดงเป็น "การบำรุงรักษาเซิร์ฟเวอร์" โดยเกม MMORPG เรื่องเล็กน้อยเรามักจะลืมมัน


0

ฉันใช้งานสถาปัตยกรรม MMO ใน Erlang ซึ่งรองรับการอัปเกรดและการแจกจ่ายรหัสร้อน ตัวอย่างเช่น "GamePlay Server" หนึ่งเครื่องสามารถเรียกใช้ข้ามเครื่องจำนวนหนึ่งหากจำเป็นต้องมีการอัพเกรดฮาร์ดแวร์วัตถุสามารถถ่ายโอน (เรียลไทม์) ไปยังเครื่องอื่น ๆ สิ่งนี้ทำให้การอัพเกรดในฮาร์ดแวร์ซอฟต์แวร์ไม่มีการหยุดทำงาน

คุณสามารถตรวจสอบเว็บไซต์ของฉันที่http://www.next-gen.cc


0

ฉันเชื่อว่าหน้าต่างการบำรุงรักษายังช่วยให้สามารถเปลี่ยนฮาร์ดแวร์ตามปกติเพื่อให้แน่ใจว่าส่วนประกอบจะไม่ล้มเหลว


มักจะไม่ พวกเขาจะเรียกใช้ตัวชี้วัดที่คาดการณ์ได้บนฮาร์ดแวร์ แต่โดยปกติแล้วพวกเขาจะไม่แทนที่แฟน ๆ ทั้งหมดหรือบิต 'พอใช้ได้' ในระบบยกเว้นว่ามันแสดงสัญญาณของความล้มเหลวเช่น RPMs กำลังลดลงหรือ SMART แสดงจำนวนข้อผิดพลาดในการเขียนสูง
คาร์ล Katzke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.