การแก้ไขปัญหาความไม่เสถียรของบริการ Kagi.com
- กำลังตรวจสอบ - หลังการปล่อยใช้งานเกิดปัญหาขึ้น และทีมกำลังดำเนินการแก้ไขอยู่ (12 มกราคม 16:45 UTC)
- เฝ้าติดตาม - ได้ย้อนกลับการเปลี่ยนแปลงค่าตั้งที่คาดว่าเป็นสาเหตุของปัญหา และกำลังเฝ้าติดตามอย่างต่อเนื่องว่าบริการกลับสู่ภาวะปกติแล้วหรือไม่ (12 มกราคม 18:30 UTC)
- อัปเดต - เพื่อกู้คืนเสถียรภาพอย่างสมบูรณ์ จะหยุดทราฟฟิกชั่วคราวและเปลี่ยนเส้นทางผู้ใช้มายังหน้านี้ โดยจะให้รายละเอียดเพิ่มเติมตามความคืบหน้าระหว่างการค่อยๆ คืนโหลดกลับสู่บริการอย่างมีการควบคุม (12 มกราคม 20:26 UTC)
- เฝ้าติดตาม - ทราฟฟิกได้รับการกู้คืนแล้ว และกำลังเฝ้าติดตามต่อเนื่องว่าบริการกลับสู่ภาวะปกติเต็มที่หรือไม่ (12 มกราคม 21:14 UTC)
- แก้ไขแล้ว - ทุกบริการกลับมาทำงานตามปกติ ขอบคุณผู้ใช้ที่รอระหว่างการแก้ไขปัญหา
การวิเคราะห์หลังเหตุการณ์
- Zac ผู้นำด้านเทคนิคของ Kagi ได้แบ่งปันการวิเคราะห์หลังเหตุการณ์อย่างละเอียดเกี่ยวกับการหยุดให้บริการเมื่อสัปดาห์ที่แล้ว
- Seth วิศวกรอาวุโส และ Luan วิศวกร DevOps ได้ร่วมกันรับมือกับเหตุการณ์นี้
- มีผู้ไม่หวังดีที่ใช้งานบริการในทางที่ผิดและอาศัยคอขวดของอินฟราสตรักเจอร์ ทีมจึงได้ออกมาตรการบรรเทาผลกระทบทันที และกำลังปรับปรุงทั้งโค้ดและการสื่อสารในหลายด้าน
ลำดับเหตุการณ์
- ราว 17:30 น. ของวันที่ 12 มกราคม ทีมรับรู้ว่ามีปัญหาอินฟราสตรักเจอร์จากการมอนิเตอร์ภายในและรายงานปัญหาจากผู้ใช้
- ลักษณะของปัญหาทำให้ผู้ใช้ในหลายภูมิภาคพบการโหลดช้าหรือหน้าเว็บหมดเวลา
- การแก้ปัญหาใช้เวลาค่อนข้างนาน และมีการอธิบายทั้งภูมิหลัง ความคืบหน้า และแผนต่อจากนี้
กระบวนการแก้ปัญหาทางเทคนิค
- ในตอนแรก ปัญหาเกิดขึ้นพร้อมกับการอัปเกรดทรัพยากร RAM เพิ่มให้ VM โดยบังเอิญ
- ระบบมอนิเตอร์รายงานค่า latency สูงและปัญหาเกี่ยวกับ database connection pool ของแอปพลิเคชัน
- connection pool เข้าสู่ภาวะอิ่มตัว ซึ่งหมายความว่าจำนวนการเชื่อมต่อทั้งหมดเกินขีดจำกัดสูงสุดที่ตั้งไว้
- ระหว่างประเมินสุขภาพภายในของฐานข้อมูลและประสิทธิภาพของคิวรี ทีมได้ทดลองเปลี่ยนบางอินสแตนซ์เพื่อดูผลในการลดความแออัด
- เมื่อดูเหมือนว่าการเปลี่ยนบางอินสแตนซ์ช่วยได้ จึงหยุดทราฟฟิกของผู้ใช้ชั่วคราวเพื่อรีเซ็ต connection pool ทั้งหมดพร้อมกันอย่างสมบูรณ์
- หลังจากตรวจสอบสถานะฐานข้อมูล ก็ชัดเจนว่าต้นตอของปัญหาคือการแย่งกันใช้งานแถวในตารางผู้ใช้สูงผิดปกติ
- การแย่งกันใช้งานนี้ทำให้ latency ของการเขียนเพิ่มสูงขึ้นอย่างมาก สร้าง backpressure ให้กับ connection pool ของแอปพลิเคชัน และสุดท้ายทำให้การเชื่อมต่อที่มีอยู่ทั้งหมดถูกใช้จนหมด
- ก่อนหน้านี้ Kagi ใช้ฐานข้อมูลแบบ single-core ที่ถูกที่สุดบน GCP ซึ่งมีความเสี่ยงที่จะทำให้ฐานข้อมูลล่มได้ง่าย
- ทีมระบุตัวผู้ไม่หวังดีได้ โดยพบทั้งบัญชีที่สร้างภายใน 24 ชั่วโมง และบัญชีผู้ใช้เดี่ยวที่ทำการค้นหามากกว่า 60,000 ครั้งในช่วงเวลาสั้นๆ
- ได้ปิดความสามารถในการค้นหาของบัญชีนั้น และออก hotfix เพื่อปิดการเขียนบางอย่างที่เป็นต้นเหตุของปัญหา
- ภายในเที่ยงคืน ปัญหาถูกแก้ไขอย่างสมบูรณ์ และทีมยังคงเฝ้าติดตามอย่างใกล้ชิดว่าผู้กระทำการเหล่านั้นจะกลับมาหรือไม่
มาตรการต่อจากนี้
- ทีมได้เรียนรู้มากจากเหตุการณ์นี้ และได้เริ่มดำเนินแผนทันทีเพื่อเสริมความแข็งแกร่งให้ระบบ รวมถึงปรับปรุงกระบวนการสื่อสารเมื่อเกิดเหตุ
- อย่างแรก ทีมยอมรับว่าการอัปเดตหน้า status ทำได้ไม่รวดเร็วพอ
- จะย้ายไปใช้แพลตฟอร์มหน้า status ที่เปิดเผยข้อมูลจากระบบมอนิเตอร์ภายในแบบอัตโนมัติให้ผู้ใช้เห็นได้ง่ายขึ้น เพื่อให้รับรู้สุขภาพของแพลตฟอร์มแบบเรียลไทม์
- กำลังบรรเทาคิวรีที่เป็นปัญหาโดยตรง และรันการทดสอบโหลดเพื่อค้นหาว่ายังมีจุดบกพร่องลักษณะคล้ายกันอีกหรือไม่
- จะติดตั้งระบบมอนิเตอร์เพิ่มเติมเพื่อชี้ตำแหน่งที่ถูกต้องในอินฟราสตรักเจอร์ได้เร็วขึ้น และไม่ต้องเสียเวลาไล่ตามสัญญาณที่ผิดเหมือนครั้งนี้
- กำลังเสริมความแข็งแกร่งให้ระบบตรวจจับการใช้งานในทางที่ผิดลักษณะนี้ และจำเป็นต้องตั้งข้อจำกัดอัตโนมัติเพื่อบังคับใช้ เพราะสิ่งนี้ไม่เพียงกระทบประสิทธิภาพ แต่ยังก่อให้เกิดต้นทุนโดยตรงด้วย
- ข้อจำกัดใหม่มีผลบังคับใช้แล้ว ณ เวลาที่เขียนโพสต์นี้ และทีมจะเฝ้าติดตามผลกระทบพร้อมปรับแต่งต่อไปตามความจำเป็น
- หากคิดว่าการเข้าถึง Kagi ของตนถูกบล็อกโดยผิดพลาด ขอให้ติดต่อ support@kagi.com
ความเห็นของ GN⁺
- Kagi ประสบปัญหา latency ในการเขียนจากการแย่งกันใช้งานแถวในตารางผู้ใช้ ซึ่งสร้าง backpressure ให้กับ connection pool ของแอปพลิเคชันและนำไปสู่การหยุดให้บริการ
- ปัญหานี้เป็นผลจากความเสี่ยงที่เกิดขึ้นเพราะ Kagi ใช้ฐานข้อมูลแบบ single-core ที่ถูกที่สุดบน GCP
- จากเหตุการณ์ครั้งนี้ ทีม Kagi แสดงให้เห็นถึงความพยายามในการยกระดับเสถียรภาพและความโปร่งใสของบริการ ด้วยการเสริมระบบ ปรับปรุงการสื่อสารกับผู้ใช้ และตั้งข้อจำกัดอัตโนมัติเพื่อป้องกันการใช้งานในทางที่ผิด ความพยายามเหล่านี้สะท้อนถึงความตั้งใจของ Kagi ในการมอบบริการที่น่าเชื่อถือยิ่งขึ้นแก่ผู้ใช้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ความเห็นเกี่ยวกับเหตุการณ์ที่เกิดขึ้นพร้อมกับการอัปเกรดโครงสร้างพื้นฐาน
ประสบการณ์ของผู้ใช้กับหน้าสถานะของ Kagi
คอมเมนต์ที่แชร์ประสบการณ์ส่วนตัว
คอมเมนต์เกี่ยวกับประสบการณ์ของสตาร์ทอัป
คอมเมนต์เกี่ยวกับการสังเกตการณ์ระบบภายใน
ความเห็นของผู้ใช้แบบชำระเงินเกี่ยวกับความน่าเชื่อถือของ Kagi
คอมเมนต์เกี่ยวกับ scraper ที่ทำให้บริการหยุดชะงัก
คอมเมนต์เกี่ยวกับประสบการณ์การใช้ Kagi และบทวิเคราะห์หลังเหตุการณ์
คอมเมนต์เกี่ยวกับฐานข้อมูล single-core ที่ใช้บน GCP
คอมเมนต์เกี่ยวกับ automated scraping