วันหมดอายุ 6 เมษายน 2021

ในวันที่ 6 เมษายน 2021 ได้เกิดเหตุการณ์ใบรับรอง Wildcard TLS หมดอายุขึ้น นี่เป็นเรื่องน่าอายที่ใบรับรองหมดอายุ แต่เรารู้สึกว่าการแบ่งปันเรื่องราวของเราที่นี่เป็นก็เรื่องสำคัญยิ่ง โดยหวังว่าผู้อื่นจะได้รับประโยชน์จากข้อมูลของเรา และนำไปพัฒนาระบบของพวกเขาต่อไป หากคุณหรือองค์กรของคุณใช้การตรวจสอบใบรับรอง กรณีนี้อาจช่วยเตือนความจำของคุณเพื่อตรวจสอบช่องโหว่ระหว่างระบบเหล่านั้นได้

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

องค์ประกอบหลักต่างๆ เช่น ระบบการยืนยันตัวตนและการตรวจสอบได้รับผลกระทบ และบริการเหล่านี้ส่งผลต่อบริการอื่นๆ มากมายในระบบนิเวศของเรา มีการพบเห็นหรือรายงานผลกระทบดังต่อไปนี้:

  • การลงชื่อเข้าใช้บัญชี Epic ใช้งานไม่ได้ในผลิตภัณฑ์ที่ใช้การยืนยันรูปแบบนี้ ซึ่งรวมไปถึง Fortnite, Rocket League, Houseparty, Epic Online Services หรือ Epic Games Store
  • การตัดการเชื่อมต่อขณะเล่นเกมอยู่ หรือขณะใช้บริการต่างๆ บนแพลตฟอร์มทั้งหมด
  • เกิดข้อผิดพลาดในการซื้อไอเท็มจาก Epic Games Launcher
  • การทำงานที่ไม่คาดคิดใน Epic Games Launcher ตั้งแต่เนื้อหาไม่โหลด ไปจนถึงโหมดออฟไลน์ไม่ทำงาน
  • เว็บไซต์ผลิตภัณฑ์และการตลาดของ Epic Games ไม่สามารถใช้งานได้ หรือมีประสิทธิภาพลดลง ซึ่งรวมถึงเว็บไซต์ของ Unreal Engine ด้วย
  • ปัญหาการใช้เครื่องมือภายในมากมายได้ส่งผลกระทบต่อความสามารถในการแก้ไข หรือจัดการปัญหาของพนักงาน Epic

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


เกิดอะไรขึ้น


ลำดับเหตุการณ์ใหญ่ๆ 3 อย่างที่เกิดขึ้นมีดังนี้:

  1. ใบรับรองที่หมดอายุทำให้ระบบเกิดความขัดข้องในการเรียกใช้ระหว่างบริการในระบบหลังบ้าน และเครื่องมือการจัดการภายใน
  2. ปริมาณการใช้งานที่เพิ่มขึ้นอย่างไม่คาดคิดไปยัง Epic Games Launcher ได้รบกวนบริการสำหรับ Epic Games Launcher และฟีเจอร์การกระจายเนื้อหา
  3. มีการใช้งานเว็บไซต์ Epic Games Store ในเวอร์ชันที่ไม่ถูกต้อง โดยอิงตามรายการและทรัพยากรต่างๆ ที่ไม่ถูกต้อง ซึ่งเป็นส่วนหนึ่งของการปรับขยายโดยอัตโนมัติ และลดระดับประสบการณ์การใช้งาน Epic Games Store ลง

 

1) ใบรับรองหมดอายุ

ในวันที่ 6 เมษายน เวลา 12:00 น. ตามเวลา UTC ใบรับรองได้ TLS หมดอายุลง มีการใช้ใบรับรองนี้สำหรับการสื่อสารภายในโดยเฉพาะเป็นจำนวนมากทั่วทั้งแพลตฟอร์มหลังบ้านของ Epic เราใช้การเข้ารหัส TLS ระหว่างบริการหลังบ้านสำหรับการเรียกใช้ API ข้ามบริการ และเครื่องมือจัดการภายใน ใบรับรองนี้มีไว้สำหรับโซน DNS ที่ไม่เกี่ยวข้องกับผู้ใช้สาธารณะ 

เวลา 12:00 น. ตามเวลา UTC การใช้งานระหว่างระบบหลังบ้านต่างๆ ได้หยุดชะงักลง 6 นาทีหลังจากนั้น เวลา 12:06 น. ตาม UTC ได้มีการรายงานเหตุการณ์นี้ และเราได้เริ่มกระบวนการแก้ไขเหตุการณ์ขึ้น แม้เราจะมีระบบแจ้งเตือนมากมาย เรามักจะส่งเสริมให้ทุกคนในบริษัทรายงานปัญหาที่ส่งผลกระทบในวงกว้างที่พวกเขาพบเห็นเสมอ เหตุการณ์แต่ละครั้งจะได้รับการคัดกรอง โดยทีม Live Ops ของเรา ซึ่งทำงานตลอด 24 ชั่วโมงทุกวัน และเป็นผู้เริ่มกระบวนการจัดการเหตุการณ์ เมื่อรายงานเหตุการณ์ครั้งแรกมาถึง เครื่องมือและกระบวนการจัดการเหตุการณ์ของเราจะสร้างช่อง Slack ขึ้นมาโดยอัตโนมัติ และฝ่ายที่เกี่ยวข้องจะได้รับเชิญ หรือรับแจ้งให้ทราบถึงเหตุการณ์นี้

เวลา 12:12 น. ตามเวลา UTC เรายืนยันว่าใบรับรองหมดอายุ ซึ่งเราเชื่อว่ามีโอกาสเป็นไปได้สูงว่า นี่เป็นต้นเหตุของปัญหา และเราก็ได้เริ่มขั้นตอนการต่ออายุทันที เวลา 12:37 น. ตามเวลา UTC ได้มีการออกใบรับรองใหม่ และได้เริ่มใช้ใบรับรองที่ได้รับการอัปเดตในบริการต่างๆ ในหลังบ้านของเรา ในตลอดช่วง 5 ถึง 15 นาทีต่อมา โหลดบาลานเซอร์ได้เริ่มปรับใช้ใบรับรองใหม่โดยอัตโนมัติในปลายทางภายในต่างๆ และการเรียกใช้ HTTPS ระหว่างบริการของเราได้กลับมาใช้งานได้อีกครั้ง พร้อมกับอินเทอร์เฟซจัดการของเรา

และทีม Live Ops ของเราที่ได้คัดกรองเหตุการณ์นี้ก็ได้จัดการเหตุการณ์ในขั้นตอนนี้ผ่านการสื่อสารกับพนักงาน พร้อมกับแจ้งไปยังบุคคลที่เกี่ยวข้อง และเวลา 12:38 น. ตามเวลา UTC ได้มีการโทรผ่าน Zoom เพื่อประสานงานกับผู้คนที่ได้ทำงานร่วมกันผ่าน Slack ในช่วงก่อนหน้านี้ แม้ Slack จะเป็นเครื่องมือการสื่อสารที่ดี แต่ในสถานการณ์เร่งด่วน ไม่มีอะไรดีไปกว่าการสนทนาสดแบบเรียลไทม์ผ่านเสียงหรือวิดีโอ ทั้งนี้ได้มีการจัดส่งอัปเดตเกี่ยวกับเหตุการณ์ไปยังผู้เกี่ยวข้องภายในอย่างสม่ำเสมอผ่านเครื่องมือ และกระบวนการของเรา เพื่อให้ทุกคนทราบว่าเกิดอะไรขึ้น ณ เวลานี้ มีผู้คนมากกว่า 25 คนที่ได้เข้ามีส่วนร่วม และแก้ไขปัญหานี้โดยตรง และมีผู้คนอีกจำนวนมากเฝ้าสังเกตการณ์อยู่ ไม่ว่าจะเป็นฝ่ายบริการผู้เล่น ชุมชน วิศวกร รวมถึงฝ่ายผลิตในหลายๆ ทีม และหลายหลากผลิตภัณฑ์

กราฟจำนวนคำขอต่อนาทีไปยังบริการไมโครเดี่ยว แสดงจำนวนที่ลดลงเมื่อใบรับรองใช้งานไม่ได้ และมีจำนวนเพิ่มขึ้นเมื่อบริการกลับมาใช้งานตามปกติได้

 

ปัจจัยที่มีส่วน


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

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

เราได้มีการติดตั้งใบรับรอง Wildcard ระหว่างบริการเข้าไปในบริการการผลิตที่แตกต่างกันหลายร้อยบริการ ซึ่งทำให้เกิดผลกระทบเป็นวงกว้างอย่างมาก เราใช้ AWS ACM (AWS Certificate Manager) ในการจัดการใบรับรองนี้ ซึ่งทำให้เราสามารถต่ออายุ และใช้ใบรับรองนี้กับบริการการผลิตนับร้อยได้อย่างรวดเร็วภายในไม่กี่นาที ปัญหาการหมดอายุไม่เกี่ยวข้องกับ AWS ACM แต่เกิดจากการจัดการใบรับรองของเรา เราจะดำเนินการแยกขอบเขตปัญหาของใบรับรอง พร้อมกับอัปเดตกระบวนการสำหรับการใช้ใบรับรองกับ AWS ACM

 

2) ปริมาณการใช้งานบริการของ Epic Games Launcher เพิ่มขึ้นอย่างมาก

แม้ว่าบริการส่วนใหญ่จะได้รับการกู้คืนทันที หลังจากการต่ออายุใบรับรอง แต่บริการ Epic Games Launcher ของเรายังคงไม่สามารถทำงานได้

เมื่อเวลา 12:46 น. ตามเวลา UTC หลังจากการออกใบรับรอง อัตราคำขอเข้าใช้งาน Epic Games Launcher ได้เพิ่มขึ้นอย่างมาก ซึ่งเป็นบริการหลังบ้านหลักที่รองรับไคลเอนต์ Epic Games Launcher อัตราคำขอที่เพิ่มขึ้นเกิดจากโลจิกการส่งคำขอซ้ำที่ไม่คาดคิดในไคลเอนต์ ซึ่งจะเห็นได้ในสถานการณ์ที่เกิดความล้มเหลวเท่านั้น แม้ว่าเราจะทำให้ Epic Games Launcher ทำงานได้อย่างยืดหยุ่นในช่วงหลายปีที่ผ่านมา แต่กรณีของคำขอเข้าใช้งานจำนวนมหาศาลนี้เป็นเรื่องที่ไม่คาดคิดอย่างมาก การติดตามการเชื่อมต่อบนโฮสต์ของเราได้ถึงขีดจำกัด และแพคเก็ตได้ทำให้ระบบขัดข้อง การกู้คืนมีความจึงท้าทายมากขึ้น แม้ในขณะที่ระบบแอปพลิเคชันหลังบ้านของเราได้รับการปรับขยายเพิ่มขึ้น 250% กก็ตาม บริการ Epic Games Launcher ประสบกับความล้มเหลวอย่างต่อเนื่องแบบขั้นบันไดและหยุดการทำงานเต็มรูปแบบ และการกู้คืนจำเป็นต้องจำกัดการรับส่งข้อมูลไปยังส่วนของหลังบ้าน จากนั้นจึงค่อยๆ เพิ่มปริมาณการใช้งานกลับเข้าสู่ระบบในขณะที่เพิ่มขีดจำกัดการติดตามการเชื่อมต่อของเราไปพร้อมกัน

ข้อมูลขนาดใหญ่ของไคลเอนต์ Epic Games Launcher ยังสร้างการเชื่อมต่อหลายสิบล้านครั้งไปยังบริการส่วนหลังบ้านของ Epic Games Launcher และส่วนประกอบของระบบ Epic Games Launcher ถูกลดประสิทธิภาพลงจากการโหลด เราจำเป็นต้องระบายปริมาณการใช้งานไปยังส่วนหลังบ้านเพื่อกู้คืนระบบนี้ แม้ว่าปกติเราจะมีขีดความสามารถสูงสำหรับบริการนี้ แต่ก็เป็นไปไม่ได้ที่บริการจะรองรับการโหลดข้อมูลขนาด 28 เท่า นับตั้งแต่ที่เราสังเกตเห็นในช่วงเริ่มต้นของการหยุดทำงาน

กราฟแสดงจำนวนคำขอเข้าใช้งานต่อนาทีไปยังตัวโหลดบาลานเซอร์ในส่วนหลังบ้านของ Epic Games Launcher ปริมาณการใช้งานที่เพิ่มขึ้น 28 เท่าในช่วงแรก และในช่วงสุดท้ายเมื่อเวลา 15:12 น. ตามเวลา UTC ซึ่งคิดเป็น 40 เท่าจากอัตราปกติ


ขณะที่คำขอของเรามีมากกว่า 28 เท่าจากปกติ จำนวนการเชื่อมต่อมาที่บริการส่วนหลังบ้านของ Epic Games Launcher ทำให้พื้นที่ว่างของการติดตามการเชื่อมที่มีอยู่หมดลง ซึ่งส่งผลให้สูญเสียแพคเก็ต และทำให้การเชื่อมต่อจากโหนดหลังบ้านไร้ประสิทธิภาพ โหลดงานการเชื่อมต่อในส่วนหลังบ้านของเราเพิ่มขึ้นเป็น 3200 เท่าจากอัตราปกติ การเชื่อมต่อ TCP ได้เพิ่มขึ้นสูงกว่าจำนวนคำขออย่างมาก

กราฟของจำนวนการเชื่อมต่อใหม่ต่อนาทีไปยังตัวโหลดบาลานเซอร์ส่วนหลังบ้านของ Epic Games Launcher ของเรามีการเชื่อมต่อเพิ่มขึ้น 3200 เท่า เมื่อเทียบกับจุดสูงสุดปกติ

 

ปัจจัยที่มีส่วน


ใบรับรอง TLS ที่หมดอายุทำให้บริการของเราหยุดลง และทำให้เกิดพฤติกรรมที่ไม่คาดคิดในไคลเอนต์ Launcher ของเรา การตรวจสอบของเราพบว่าโลจิกการส่งคำขอซ้ำของไคลเอนต์ของเรานั้น ใช้การส่งคำขอซ้ำแบบเส้นตรงแทนที่จะเป็นแบบเลขยกกำลังอย่างที่เราคาดไว้ ข้อผิดพลาดที่ไม่คาดคิดเพิ่มเติมยังทำให้รูปแบบคำขอจากไคลเอนต์ Epic Games Launcher หลายล้านครั้งพยายามส่งคำขอซ้ำๆ อย่างต่อเนื่อง และไม่มีที่สิ้นสุดจนกว่าจะได้รับการตอบกลับที่ประสบความสำเร็จ ข้อบกพร่อง 2 อย่างจากไคลเอนต์ที่เราได้ติดตั้งไว้ได้สร้างรูปแบบการเรียกใช้ที่ไม่ตั้งใจ และคาดไม่ถึง เราถูกโจมตีแบบ DDoS ด้วยไคลเอนต์ของเราเอง และเราพยายามอย่างเร่งด่วนที่จะแก้ไขข้อบกพร่องเหล่านี้ผ่านการอัปเดต Epic Games Launcher 

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

สัญญาณเตือนสำหรับการติดตามการเชื่อมต่อของเรายังไม่มีความชัดเจนมากพอ การแจ้งเตือนนี้ได้ปรากฏขึ้นในระหว่างเหตุการณ์ของบริการ Epic Games Launcher ซึ่งในขณะที่ทีมงานมากมายคุ้นเคยกับความหมายของการแจ้งเตือนนี้อยู่แล้ว แต่คำอธิบายและการแจ้งเตือนกลับไม่มีความไม่ชัดเจนมากพอ และไม่มีใครทราบว่าเงื่อนไขนี้จะทำให้เกิดการสูญเสียแพคเก็ตไปยังการเชื่อมต่อทั้งหมดของโฮสต์นี้ รวมถึงการเชื่อมต่อที่มายังคลัสเตอร์ Redis ภายใน นี่เป็นช่วงเวลาที่ตึงเครียดสำหรับทีมงานที่ต้องตรวจสอบสิ่งที่อาจเกิดขึ้น ขณะที่การเชื่อมต่อกับคลัสเตอร์ Redis มีประสิทธิภาพลดลง กลไกการทำงานของแคชชิ่งก็เป็นที่น่าสงสัยว่าเป็นส่วนหนึ่งของต้นเหตุด้วยเช่นกัน สิ่งนี้พิสูจน์ได้ในภายหลังว่า มาจากการสูญเสียแพคเก็ตจากตารางการติดตามการเชื่อมต่อที่เต็ม ขณะที่มีการเชื่อมต่อหลายแสนรายการที่ใช้งานอยู่ ต่อมา เราได้เพิ่มขีดจำกัดการติดตามการเชื่อมต่อของเราขึ้นมากกว่า หนึ่งล้านต่อโหนด แต่การติดตามการเชื่อมต่อที่เพิ่มขึ้นในโครงสร้างพื้นฐานของเรานั้นไม่ได้เกิดขึ้นทันทีและใช้เวลาพอสมควร เราจะอัปเดตการแจ้งเตือนของเราให้ชัดเจนขึ้น เพราะสิ่งนี้จะส่งผลกับปัญหาเครือข่ายอย่างมากจนกว่าจะได้รับการแก้ไข 

การปรับขยายเพิ่มจะส่งผลให้โหนดใหม่ถึงขีดจำกัดการติดตามการเชื่อมต่อโดยทันที เนื่องจากระบบของเรามีการเชื่อมต่อมากเกินไป ซึ่งทำให้เกิดการสูญเสียแพคเก็ตอย่างรุนแรง เราจำเป็นต้องลดปริมาณการใช้งานโดยรวมไปที่ระบบ และค่อยๆ เพิ่มปริมาณการใช้งานกลับเข้าไป เราได้ทดลองใช้ AWS WAF (Web Application Firewall) ครั้งแรกเพื่อจำกัดซับเซ็ตของปริมาณการใช้งานขาเข้า แต่การกำหนดค่าของเราไม่สามารถจำกัดปริมาณการใช้งานได้มากพอ นี่ไม่ใช่ปัญหากับ AWS WAF แต่เป็นปัญหาในชุดกฎของเราเอง ในช่วงเวลาที่น่าสนใจนี้ เราจึงใช้โหลดบาลานเซอร์เฉลี่ยน้ำหนักเป้าหมาย AWS เพื่อย้ายปริมาณการใช้งานบางส่วน ซึ่งควบคู่ไปกับการเพิ่มขีดจำกัดการติดตามการเชื่อมต่อของเรา ซึ่งในที่สุดก็ประสบความสำเร็จ การใช้ WAF ในสถานการณ์นี้ทำให้การกู้คืนบริการ Epic Games Launcher ล่าช้า แต่ก็ไม่ใช่ความผิดของ AWS เราจะพัฒนากระบวนการมาตรฐานเพื่อเร่งปริมาณการใช้งานในสถานการณ์วิกฤตอย่างเร่งด่วนเช่นนี้ โดยใช้ AWS WAF, โหลดบาลานเซอร์เฉลี่ยน้ำหนักเป้าหมาย AWS หรือเทคโนโลยี AWS อื่นๆ

 

3) เว็บไซต์ Epic Games Store เกิดแอสเซทที่ไม่ถูกต้อง

เวลา 15:12 น. ตามเวลา UTC การต่ออายุใบรับรองของเราและบริการ Epic Games Launcher ของเราได้รับการกู้คืนกลับมา เราจึงดำเนินการปลดบล็อกลูกค้าทั้งหมดที่ส่งคำขอไปที่ Epic Games Store เนื่องจากการหยุดให้บริการเป็นเวลานานทำให้มีลูกค้ามากกว่าคำขอเนื้อหาปกติจาก Epic Games Store อย่างมาก ซึ่งได้เริ่มสะสมเพิ่มขึ้นเมื่อเวลาผ่านไป เราเริ่มประเมินผลกระทบที่เหลือในช่วงเวลาประมาณ 15:30 น. ตามเวลา UTC

ในตอนแรก ทุกๆ อย่างดูปกติดี แต่เราเริ่มได้รับรายงานภายในเกี่ยวกับปัญหาด้านการจัดวางรูปแบบและข้อผิดพลาดต่างๆ ภายในร้านค้า ซึ่งเราสามารถตรวจสอบยืนยันและแก้ไขได้ ในการสอบสวนรายละเอียด เราพบว่าไคลเอนต์เว็บ (วิธีการที่ผู้ใช้ที่เข้าชม epicgames.com มีปฏิสัมพันธ์กับร้านค้า) พยายามที่จะดึงข้อมูล ID แอสเซทเฉพาะที่ไม่แสดงใน CDN ของเรา เราตรวจสอบเวอร์ชันของคอนเทนเนอร์ของเราทั่วทั้งระบบ และพบว่าทั้งหมดนั้นเหมือนกัน แต่หากเรื่องดังกล่าวเป็นจริง ทำไมเวอร์ชันของแอปพลิเคชันจึงคืนค่าแอสเซทคงที่ที่แตกต่างกัน 

มีสิ่งผิดปกติบางอย่างเกิดขึ้น ช่วงเวลานี้เป็นช่วงเวลาที่สับสนมากและสัญญาณต่างๆ ที่เราได้รับ (เช่น เวอร์ชันที่ใช้) มากมายที่กลายเป็นสัญญาณเตือนที่เกิดขึ้นโดยความผิดพลาด เราสามารถที่จะแก้ไขการปรับขนาดของ Epic Games Store เพื่อเพิ่มข้อผิดพลาด 403 แก่ CDN ซึ่งช่วยสร้างหนทางในการสอบสวนรายละเอียดให้ลึกยิ่งขึ้น ในระหว่างที่มีการถ่ายโอนเนื้อหาในอุปกรณ์บนอินสแตนซ์ใหม่ เราพบว่าเนื้อหาที่ส่งกลับมานั้นไม่ถูกต้อง เราสามารถที่จะตรวจสอบได้ว่าความผิดพลาดดังกล่าวนี้เกิดจากคอนเทนเนอร์ส่งสัญญาณพุชไปยังกระบวนการงาน CI/CD ใหม่โดยความผิดพลาด ทำให้วันก่อนหน้าและวันอื่นๆ ทั้งหมดนั้นไม่เกี่ยวข้องกับทุกๆ สิ่งที่เราดำเนินการในระหว่างเหตุการณ์นี้ ผลลัพธ์เหล่านี้เป็นสิ่งที่น่าประหลาดใจ แต่หลังจากที่เราค้นพบแล้ว เราสามารถที่จะเรียกคืนเวอร์ชันของคอนเทนเนอร์ หยุดการทำงานของอินสแตนซ์ที่ไม่ถูกต้อง และกู้คืนการรับส่งข้อมูลได้อย่างรวดเร็ว

ปัญหาควรจะปรากฏขึ้นระหว่างการปรับขยายขนาดใหญ่ที่เกิดขึ้นในช่วงเวลานี้ โดยปกติแล้ว เราได้เผื่อค่าสำหรับความผิดพลาดเอาไว้อย่างมาก ปัญหาเหล่านี้จะไม่ปรากฏขึ้นจนกระทั่งมีการปรับขยายขนาดใหญ่ของ Epic Games Store เนื่องจากปริมาณการเข้าใช้งานของ Epic Games Launcher

 

ปัจจัยที่มีส่วน


การไม่มีใบรับรองได้ก่อให้เกิดปัญหาขึ้นกับ Epic Games Launcher ซึ่งหลังจากที่กู้คืนมาได้แล้ว ก็เกิดมีคำขอเข้ามายัง Epic Games Store ในปริมาณมหาศาล จนส่งผลให้มีการปรับขยายระบบ Epic Games Store ขึ้น นี่เป็นเรื่องที่เราคาดการณ์ไว้แล้ว และพร้อมรับมือ

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

การเปลี่ยนแปลงต่อเส้นทางการส่งข้อมูล CI/CD สำหรับ Epic Games Store มีการกำหนดค่าผิดพลาดที่ก่อให้ให้เกิดการปรับข้อมูลอาร์ทิแฟกต์แอปพลิเคชันโดยไม่ได้คาดคิด เราแก้ไขปัญหานี้ด้วยการปรับแต่งเส้นทาง CI/CD เพื่อคืนค่าการเปลี่ยนแปลงที่ไม่ได้คาดคิด การเปลี่ยนแปลงสกีมเวอร์ชันจะปกป้องเรา หากมีปัญหานี้เกิดขึ้นอีกครั้ง


ไทม์ไลน์

  • 12:00 น. ตามเวลา UTC - ใบอนุญาตภายในหมดอายุ
  • 12:06 น. ตามเวลา UTC - รายงานเหตุการณ์ และเริ่มกระบวนการจัดการเหตุการณ์
  • 12:15 น. ตามเวลา UTC - เตรียมข้อความแรกสำหรับลูกค้า
  • 12:21 น. ตามเวลา UTC - ทีมหลายทีมยืนยันว่าบริการขนาดใหญ่หลายรายการเกิดข้อผิดพลาด
  • 12:25 น. ตามเวลา UTC - ยืนยันการเริ่มกระบวนการออกใบรับรองใหม่
  • 12:37 น. ตามเวลา UTC - ยืนยันว่าจะออกใบรับรองใหม่
  • 12:46 น. ตามเวลา UTC - ยืนยันการกู้คืนบริการบางรายการ
  • 12:54 น. ตามเวลา UTC - ค้นพบปัญหาการติดตามการเชื่อมต่อสำหรับบริการ Epic Games Launcher
  • 13:41 น. ตามเวลา UTC - รีสตาร์ทโหนด Epic Games Launcher
  • 15:05 น. ตามเวลา UTC - เพิ่มขีดจำกัดการติดตามการเชื่อมต่อสำหรับบริการ Epic Games Launcher
  • 15:12 น. ตามเวลา UTC - สัญญาณแรกของการกู้คืนบริการ Epic Games Launcher
  • 15:34 น. ตามเวลา UTC - ปรับขยายบริการเว็บ Epic Games Store
  • 15:59 น. ตามเวลา UTC - รายงานแอสเซทที่หายไปบน Epic Games Store ครั้งแรก
  • 16:57 น. ตามเวลา UTC - ค้นพบปัญหาเวอร์ชันบริการเว็บ Epic Games Store ไม่ตรงกัน
  • 17:22 น. ตามเวลา UTC - แก้ไขเวอร์ชันบริการเว็บ Epic Games Store
  • 17:35 น. ตามเวลา UTC - กู้คืนเต็มรูปแบบ


ขั้นตอนต่อไป

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

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

แม้ว่าเราจะดำเนินการแก้ไขปัญหานี้ด้วยระบบการตรวจสอบใบรับรองใหม่ของเรา และตรวจสอบใบรับรองต่า ๆ ที่มีอยู่แล้ว เราก็จะศึกษาปัญหาเพิ่มเติมในด้านการตรวจสอบใบรับรองและการตรวจสอบในอนาคต เช่น การเพิ่มการตรวจสอบการแก้ไข AWS Config สำหรับใบรับรองที่ใช้งาน AWS ACM ทั้งหมดด้วย ทั้งนี้เราจะมีการดำเนินการเพื่อลดขนาดของผลกระทบจากใบรับรองต่างๆ ด้วย

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

สำหรับ Epic Games Store เราได้ปรับใช้การแก้ไขที่ช่วยหลีกเลี่ยงการดัดแปลงออบเจ็กต์แอปพลิเคชันไลฟ์ และด้วยการดำเนินการดังกล่าว เรายังได้เรียนรู้และได้ดำเนินการแก้ไขข้อผิดพลาดในการสร้างแอสเซทของเราด้วย

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


มาร่วมกับเรา!

โพสต์นี้เขียนโดยทีมวิศวกรด้านความเชื่อถือของเรา พร้อมด้วยความช่วยเหลือมากมายจากทีมวิศวกรที่ยอดเยี่ยมของเราที่ Epic

คุณสนใจในปัญหาเหล่านี้หรือไม่ หลงใหลเกี่ยวกับเกมและบริการเกมรึเปล่า Epic มองหาผู้ที่มีพรสวรรค์ และจ้างงานผู้ที่มีทักษะความสามารถต่างๆ จากทั่วโลกเสมอ หากคุณกำลังมองหาตำแหน่งงานว่างของเรา โปรดไปที่ ฮับ Epic Games Career

โพสต์นี้สามารถช่วยคุณได้หรือไม่ หรือคุณคิดว่าโพสต์นี้น่าสนใจรึเปล่า โปรดบอกให้เราทราบได้ที่ [email protected]