0006 — การโฮสต์คัดลอกได้รับการประสานงานโดยลีสฐานข้อมูลอะตอมิก
บริบท
โปรไฟล์คัดลอกที่กำลังทำงานจะต้องได้รับการโฮสต์โดย โหนดหนึ่ง — ผู้โฮสต์สองคนบนโปรไฟล์เดียวกันหมายถึงทุกการค้นหาแหล่งที่มาจะสะท้อนสองครั้ง (เงินจริงหายไป) โหนดมาและไป (การปรับขนาด การ crash การอัปเดต rolling) และเราไม่ต้องการบริการผู้ประสานงานแยกต่างหากเพื่อรันและมีชีวิต
การตัดสินใจ
แต่ละ CopyEngineSupervisor อ้างสิทธิ์โปรไฟล์ด้วย ลีสฐานข้อมูลอะตอมิก บนตาราง CopyProfiles:
- อ้างสิทธิ์ —
ExecuteUpdateอะตอมิก (หรือFOR UPDATE SKIP LOCKEDเมื่อจำกัด per-node) ใช้โปรไฟล์ที่ไม่ได้มอบหมายหรือลีสของพวกเขาได้หมดอายุ ความเป็นอะตอมิกหมายถึงผู้ดูแล supervisors สองคนที่แข่งขันกันอย่างไม่ได้เรียกร้องแถวเดียวกัน - ต่ออายุ — โหนดที่มีชีวิตจะรีเฟรชลีสของมันในแต่ละรอบ เพื่อให้มันรักษาอ้างสิทธิ์ไว้
- อ้างสิทธิ์อีกครั้ง — ลีสของโหนดที่ค้างค้วนหมดอายุ และผู้รอดชีวิตเลือกโปรไฟล์ขึ้นในรอบถัดไป (self-heal) ในการปิดอย่างสุภาพ โหนดจะ ปล่อย ลีสของมันทันทีเพื่อให้ failover เร็ว
- Watchdog — โฮสต์ที่ tasks ออกไปในขณะที่โปรไฟล์ยังคงของเรา
- Reconcile ถูก jittered เพื่อหลีกเลี่ยงฝูงของ
UPDATEs ที่ระดับ
ผลที่ตามมา
- ไม่มีผู้ประสานงานแบบสแตนด์อโลนเพื่อจัดเตรียมหรือรักษาสุขภาพ — Postgres เป็นแหล่งที่มาเดี่ยวของความจริง
- การคัดลอกสองครั้งป้องกันได้โดยความ atomic ในระดับแถว ไม่ใช่โดยการล็อกระดับแอปพลิเคชัน
- Failover latency ถูก bounded โดย lease TTL (ลบเส้นทางเร็วปล่อยสุภาพ)
- นี่คือเส้นทางเงิน; มันจะได้รับการปกป้องโดยชุดความเครียด Deterministic (DST) — ไม่เคยทำให้สถานการณ์ DST อ่อนแอเพื่อให้มันผ่าน