𝗥𝗲𝗰𝗼𝘃𝗲𝗿𝗶𝗻𝗴 𝗦𝘁𝗮𝗹𝗲 𝗕𝗿𝗼𝘄𝘀𝗲𝗿 𝗣𝗿𝗼𝗳𝗶𝗹𝗲 𝗟𝗼𝗰𝗸𝘀
การล็อกโปรไฟล์เบราว์เซอร์ (browser profile lock) ช่วยป้องกันไม่ให้ worker สองตัวเปิดบัญชีเดียวกันพร้อมกัน
ระบบอัตโนมัติส่วนใหญ่มักล้มเหลวในขั้นตอนการกู้คืน เมื่อ worker เกิดการ crash หรือการเชื่อมต่อเครือข่ายขาดหาย ระบบจะตรวจพบ lock เก่าและลบทิ้ง ซึ่งทำให้คิวขยับต่อไปได้ แต่จะทำให้สถานะของบัญชี (account state) เกิดความเสียหาย
Stale lock ไม่ใช่แค่ไฟล์ที่ต้องลบทิ้ง แต่มันคือการทำงานที่ยังไม่เสร็จสิ้น ซึ่งจำเป็นต้องมีเส้นทางการกู้คืนที่ได้รับการควบคุม
เลิกปฏิบัติกับ lock เหมือนเป็นแค่ไฟล์ธรรมดา แต่ให้มองว่ามันคือ "สิทธิ์การใช้งาน" (lease)
Lease ที่ปลอดภัยต้องมี:
- เจ้าของ (owner)
- เวลาหมดอายุ (expiry time)
- สัญญาณชีพ (heartbeat)
- หมายเลขเวอร์ชัน (fencing token)
หมายเลขเวอร์ชันมีความสำคัญอย่างยิ่ง ทุกการเขียนข้อมูล (write) ต้องระบุ token ล่าสุดเสมอ หาก worker ตัวเก่ากลับมาทำงานหลังจากที่มี worker ตัวใหม่เข้ามาแทนที่ ระบบจะปฏิเสธ token เก่า วิธีนี้จะช่วยป้องกันความเสียหายที่เกิดขึ้นโดยไม่รู้ตัว (silent corruption)
อย่าข้ามจากสถานะ locked ไปเป็น available ทันที แต่ควรใช้ state machine เพื่อเปลี่ยนผ่านสถานะเหล่านี้:
- Held (ถือครอง)
- Suspected stale (สงสัยว่าค้าง)
- Quarantined (กักกัน)
- Inspected (ตรวจสอบแล้ว)
- Available | Resume pending | Manual review (พร้อมใช้งาน | รอการเริ่มใหม่ | ตรวจสอบด้วยตนเอง)
ขั้นตอนการกักกัน (quarantine) นั้นสำคัญมาก เพราะจะช่วยป้องกันไม่ให้ worker ตัวที่สองเข้ามาแตะต้องโปรไฟล์ในขณะที่คุณกำลังตรวจสอบ
ในระหว่างการตรวจสอบ คุณต้องเก็บรวบรวมหลักฐาน:
- กระบวนการของเบราว์เซอร์ (browser process) ยังทำงานอยู่หรือไม่?
- URL ล่าสุดที่ทราบคืออะไร?
- งานนั้นอยู่ในขั้นตอนที่ละเอียดอ่อน เช่น การชำระเงิน (checkout) หรือการเปลี่ยนการตั้งค่า (settings changes) หรือไม่?
- มีภาพหน้าจอ (screenshot) ของความล้มเหลวหรือไม่?
หากงานหยุดลงระหว่างการดำเนินการที่ละเอียดอ่อน ห้ามสั่งเริ่มใหม่โดยอัตโนมัติ (auto-resume) แต่ให้ส่งไปที่การตรวจสอบด้วยตนเอง (manual review) ระบบอัตโนมัติควรมีขอบเขตเพื่อป้องกันการตัดสินใจที่ผิดพลาด
ข้อผิดพลาดทั่วไปที่ควรหลีกเลี่ยง:
- การลบ lock โดยไม่ตรวจสอบความปลอดภัยของโปรไฟล์
- การไม่ใช้ fencing tokens เพื่อปฏิเสธการเขียนข้อมูลที่ล่าช้าจาก worker ตัวเก่า
- การพยายามส่งฟอร์มซ้ำ (retrying form submissions) โดยไม่มีจุดตรวจสอบที่ปลอดภัย (safe checkpoint)
- การเปลี่ยน proxy ในระหว่างกระบวนการกู้คืน
เป้าหมายไม่ใช่การทำให้การกู้คืนซับซ้อน แต่คือการทำให้มันชัดเจน (explicit)
Lock เป็นเพียงอาการหนึ่งเท่านั้น ระบบของคุณต้องปกป้องสภาพแวดล้อมของบัญชีที่อยู่เบื้องหลัง lock นั้น
หนึ่งโปรไฟล์ หนึ่งสิทธิ์การใช้งานของเจ้าของ หนึ่งงานที่กำลังทำงานอยู่ หนึ่งร่องรอยหลักฐาน หนึ่งการตัดสินใจในการกู้คืน