จัดการระบบแจ้งเตือนมาร์เก็ตด้วย Node.js Feature Flag
แนวทางควบคุมระบบแจ้งเตือนในมาร์เก็ตเพลสด้วยเซิร์ฟเวอร์ไซด์แฟล็กเพื่อหยุดการส่งข้อความซ้ำซ้อนและรักษาข้อมูลสำคัญไว้อย่างครบถ้วน

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

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
การทำงานของระบบจะทำการตรวจสอบแฟล็กก่อนที่จะส่งคำขอออกไปภายนอกในจุดที่ปลอดภัยที่สุด ช่วยให้ระบบยังคงรับข้อมูลคำสั่งซื้อใหม่และบันทึกสถานะการเปลี่ยนแปลงได้อย่างต่อเนื่องโดยไม่สูญเสียข้อมูลหลักฐานที่จำเป็นสำหรับการกู้คืนระบบ
การนำเซิร์ฟเวอร์ไซด์แฟล็กมาใช้ในระบบมาร์เก็ตเพลสช่วยเพิ่มความยืดหยุ่นในการจัดการเหตุการณ์เฉพาะหน้าโดยไม่ต้องรีสตาร์ทเซิร์ฟเวอร์ทั้งระบบ แต่ในขณะเดียวกันก็แลกมาด้วยการเพิ่มดีเพนเดนซีให้กับเส้นทางการทำงานหลัก ซึ่งทีมพัฒนาต้องชั่งน้ำหนักระหว่างความรวดเร็วในการควบคุมผ่านศูนย์กลางกับความเสี่ยงเรื่องความพร้อมใช้งานของระบบจัดเก็บแฟล็กด้วย
ลำดับเหตุการณ์จำลองเริ่มต้นขึ้นเมื่อเวลา 14:02 น. เมื่อการส่งข้อความครั้งแรกหมดเวลาลงตามด้วยความพยายามส่งซ้ำในนาทีต่อมา จนกระทั่งถึงเวลา 14:07 น. ที่อัตราส่วนความล้มเหลวสูงเกินเกณฑ์ เจ้าหน้าที่จึงทำการปิดการทำงานรีวิชัน 18 เพื่อให้เวิร์กเกอร์เริ่มบันทึกผลลัพธ์แบบเลื่อนออกไปและช่วยให้คิวงานเพิ่มขึ้นอย่างเป็นระบบ
"A useful kill switch changes one narrow runtime decision, emits an audit event, and leaves failed jobs available for deliberate replay."
Kiernan Berg
สำหรับการเขียนข้อมูลลงระบบ ควรต้องระบุหมายเลขรีวิชันที่คาดหวังไว้ล่วงหน้าเพื่อป้องกันไม่ให้ผู้ปฏิบัติงานหลายคนเขียนทับการตั้งค่าซึ่งกันและกันในช่วงเวลาที่สถานการณ์ตึงเครียด นอกจากนี้ยังต้องระมัดระวังเรื่องปริมาณข้อมูลล็อกและการจัดเก็บป้ายกำกับเพื่อไม่ให้ระบบบันทึกข้อมูลสิ้นเปลืองเกินความจำเป็น
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น