4 บทเรียนที่เราเรียนรู้จากการอัปเกรดโครงสร้างพื้นฐานล่าสุดของเรา

เผยแพร่แล้ว: 2022-05-04

การอัพเกรดโครงสร้างพื้นฐาน งานทั่วไป โดยเฉพาะอย่างยิ่งสำหรับบริษัท SaaS อย่างเรา ใช่ไหม

อันล่าสุดของเราไม่ใช่การอัปเกรดซอฟต์แวร์ทั่วไป เนื่องจากเราได้เพิ่มส่วนต่างเล็กน้อยเข้าไป

เป้าหมายหลักคือการอัปเกรดซอฟต์แวร์ของเราเป็นเวอร์ชันล่าสุด แต่คราวนี้ เราได้รวมอีกสองขั้นตอนไว้ในโปรเจ็กต์ - การลดจำนวน IP ที่ลูกค้าของเราต้องอนุญาตและบรรลุความซ้ำซ้อนของฐานข้อมูล

และในขณะที่การอัปเดตส่วนใหญ่ดำเนินไปอย่างราบรื่น เรายังประสบปัญหาการหยุดชะงักของบริการบางอย่างระหว่างทาง

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

มาเข้าเรื่องกันเลย!


เหตุใดเราจึงทำการอัปเกรดตั้งแต่แรก & สิ่งที่รวมอยู่ในนั้น

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

การอัพเกรดโครงสร้างพื้นฐานของเราเป็นประจำเป็นหนึ่งในหลาย ๆ วิธีที่จะทำให้แน่ใจได้ทั้งหมด และดังที่ได้กล่าวไว้ก่อนหน้านี้ การอัพเกรดนี้มีสามส่วน:


1. อัปเดตซอฟต์แวร์ของเราเป็นเวอร์ชันเสถียรล่าสุด

ในฐานะโซลูชันบนคลาวด์ การเพิ่มประสิทธิภาพทั้งหมดที่ NitroPack ทำสำหรับไซต์ลูกค้ากว่า 100,000 แห่งของเรานั้นดำเนินการบนโครงสร้างพื้นฐานของเรา ปัจจุบันเราใช้เซิร์ฟเวอร์มากกว่า 100 เซิร์ฟเวอร์เพื่อให้บริการ ด้วยการอัปเดตนี้ เราต้องอัปเกรดซอฟต์แวร์ที่จัดกลุ่มเซิร์ฟเวอร์ของเราให้เป็นเวอร์ชันเสถียรล่าสุด


2. ลดจำนวน IP ที่ลูกค้าของเราต้องอนุญาต

พูดง่ายๆ ก็คือ กระบวนการอนุญาต IP ของเราไม่เป็นมิตรกับผู้ใช้

ก่อนการอัปเดต ลูกค้าของเราต้องอนุญาตที่อยู่ IP มากกว่า 40 รายการที่ให้บริการรับส่งข้อมูล (คำขอ) ขาออกของ NitroPack ไปยังไซต์ของลูกค้า ยิ่งไปกว่านั้น IP เหล่านี้ไม่ได้รับการแก้ไข หมายความว่าเมื่อหนึ่งในเซิร์ฟเวอร์ของเราเลิกใช้งาน จะมีที่อยู่ IP ใหม่ปรากฏขึ้นมา

ขั้นตอนการสร้าง IP ใหม่นี้ทำให้ลูกค้าของเราต้องอนุญาตที่อยู่ใหม่หลายสิบรายการเป็นประจำ เพื่อให้ NitroPack สามารถเพิ่มประสิทธิภาพไซต์ของตนได้สำเร็จ

หลังการอัปเดต ลูกค้าของเราจำเป็นต้องอนุญาต IP คงที่และไม่มีวันเปลี่ยนแปลงเพียงสามรายการเท่านั้น


3. บรรลุความซ้ำซ้อนของฐานข้อมูล

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

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

ขั้นตอนที่ 1: (4 พฤศจิกายน): การลดจำนวน IPs
ขั้นตอนที่ 2: (6 พฤศจิกายน): ความซ้ำซ้อนของฐานข้อมูล & การอัปเดตซอฟต์แวร์เซิร์ฟเวอร์

แต่ไม่ใช่ทุกอย่างเป็นไปตามความคาดหวังของเรา


อะไรไม่เป็นไปตามแผน

แม้ว่าเราจะเตรียมการอย่างถี่ถ้วน แต่เราประสบปัญหาที่ไม่คาดคิดในการอัปเดตทั้งสาม นี่คือสิ่งที่เกิดขึ้น:

ปัญหา #1: ปัญหาการเชื่อมต่อระหว่างกระบวนการอัปเดต IP

ในวันที่ 4 พฤศจิกายน เรามีกำหนดจะดำเนินการอัปเดตบริการเบื้องต้นโดยมีเป้าหมายเพื่อลดจำนวนที่อยู่ IP สำหรับการรับส่งข้อมูลขาออกของ NitroPack

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

ข่าวดีก็คือทีมผู้พัฒนาของเราจัดการเพื่อบรรเทาปัญหาในทันทีโดยอัปเดตซอฟต์แวร์ของไคลเอนต์ HTTP ของเรา


ปัญหา #2: การสำรองข้อมูลฐานข้อมูลใช้เวลานานกว่าที่คาดไว้

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

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


ปัญหา #3: ข้อผิดพลาดของเซิร์ฟเวอร์ทำให้กระบวนการอัปเกรดซอฟต์แวร์ช้าลง

เมื่อเราเริ่มปรับใช้การอัปเกรดซอฟต์แวร์เซิร์ฟเวอร์ในวันที่ 7 พฤศจิกายน เซิร์ฟเวอร์จำนวนเล็กน้อย (น้อยกว่า 1%) เริ่มแสดงข้อผิดพลาดที่ไม่คาดคิดซึ่งทำให้ไม่สามารถปรับใช้การอัปเดตได้ในที่สุดและทำให้กระบวนการทั้งหมดช้าลง ไม่มีทางแก้ไขปัญหาได้ด้วยตัวเอง และเราถูกบังคับให้ส่งต่อไปยังผู้ให้บริการเซิร์ฟเวอร์ของเรา

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


ปัญหา #4: ข้อผิดพลาด 502 CDN ที่ไม่คาดคิดทำให้เกิดความไม่เสถียรของบริการ

เมื่อเราคิดว่าเราอัปเกรดเสร็จแล้ว - ระบบการตรวจสอบของเราเริ่มลงทะเบียนข้อผิดพลาด CDN ที่เกิดขึ้นบ่อยครั้งด้วยรหัสสถานะ HTTP 502

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

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

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

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

อย่างไรก็ตาม เรารู้ว่าการตบหลังตัวเองและจดจ่อกับสิ่งที่ถูกต้องทั้งหมดไม่ได้ทำให้เราก้าวไปข้างหน้าในฐานะบริษัทและบริการ

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

สภาพแวดล้อมการแสดงละครที่สามารถทดสอบความเครียดได้

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


ระบบตรวจสอบและแจ้งเตือนที่ดีขึ้น

จากปัญหาที่เกิดขึ้นระหว่างการอัปเกรดนี้ เราสามารถระบุพื้นที่ที่เราขาดทั้งการตรวจสอบและการแจ้งเตือน ข่าวดีก็คือเราได้กำหนดค่าทั้งสองสำหรับพื้นที่เหล่านี้แล้ว


การทำงานร่วมกันข้ามทีมที่ดีขึ้น & การสื่อสารไคลเอนต์เชิงรุกมากขึ้น

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

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


การประสานงานที่ดีขึ้นกับผู้ให้บริการเซิร์ฟเวอร์ของเรา

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

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