Pull ไม่ push: โหนดภูมิภาค PolitiCap อัปเดตตัวเองอย่างไร

posted in: Uncategorized | 0

โหนดตลาดภูมิภาคที่ดึงอัปเดตจากฮับกลาง

ระบบกระจายส่วนใหญ่ยังส่งซอฟต์แวร์แบบเดิม: คนที่มี credential push binary ไปทุกเครื่อง ใช้ได้เมื่อคุณเป็นเจ้าของทุกโฮสต์ มันพังทันทีเมื่อโหนดอยู่บนเครือข่ายของคนอื่น หลังอัปลิงก์ช้า หรืออยู่กับผู้ให้บริการที่ไม่ควรได้ deploy key ของคุณ

บน PolitiCap — แพลตฟอร์มตลาดการเมืองของ 3DN — โหนดแลกเปลี่ยนภูมิภาค (ECN, electronic communication network) รันในหลายเมืองและหลายประเทศ บางโฮสต์เป็นของเรา บางโฮสต์อาจไม่ใช่ เราจึงกลับค่าเริ่มต้น: โหนดเป็นฝ่าย pull; ฮับไม่ push เลย

บทความนี้คือเรื่องราววิศวกรรมของโครง pull นั้น: ซอฟต์แวร์ ใบรับรอง TLS สคีมาฐานข้อมูล แคตตาล็อกตลาด และแบทช์เทรด — พร้อมกราฟการสื่อสารที่ทำให้ production ซื่อสัตย์

กฎในหนึ่งประโยค

ถ้าเครื่องไม่อยู่ภายใต้การควบคุมของ 3DN เต็มที่ ฮับต้องไม่เปิดเชลล์ไปหา โหนดยืนยันตัวตนออกไป ถามว่ามีอะไรเปลี่ยน แล้วใช้อัปเดตตามจังหวะของตัวเอง นั่นคือ digital sovereignty สำหรับ infrastructure: แต่ละภูมิภาคถือกุญแจประตูของตัวเอง

Hub artifact + cert store โหนดภูมิภาค A city.country… โหนดภูมิภาค B ขอบ WAN โหนดภูมิภาค C ขอบ LAN เส้นประเขียว = เพย์โหลดที่โหนดขอ · ทอง = เซสชันที่โหนดเริ่ม (hello, trades)
รูปที่ 1. โครง pull: โหนดเปิดเซสชัน ฮับตอบเฉพาะคำขอที่ยืนยันตัวตนแล้ว

ห้าลูป ไม่ใช่ตัวอัปเดตก้อนเดียว

แต่ละโปรเซส API ภูมิภาคคือ managed hosting compute ธรรมดา: หนึ่งบริการ หนึ่งหน้าสาธารณะของเมืองนั้น ข้างในมีห้าลูปพื้นหลังคู่กับ HTTP — หน่วยงานพร้อมกัน (goroutine ใน Go) ไม่ใช่ “หน้าต่าง deploy กลางคืน”

โปรเซส API ภูมิภาค ตลาด + HTML edge Helloชีวิต → ฮับ Binary pullอัปเดตซอฟต์แวร์ Cert pullวัสดุ TLS Catalogเดลต้าติ๊กเกอร์ Trade batchoutbox → ฮับ
รูปที่ 2. ลูปใช้โปรเซสร่วมกับ API สาธารณะ การดาวน์โหลด binary ช้าบล็อกเฉพาะลูปของมัน — การเทรดยังขึ้น
  1. Hello — ping ยืนยันตัวตนเป็นระยะให้ฮับรู้ว่าโหนดยังมีชีวิตและรัน build ใด
  2. Binary pull — ถ้าฮับประกาศ artifact ใหม่กว่า ให้ดาวน์โหลดข้าง binary ที่รัน ตรวจแฮช แลกแบบอะตอมิก แล้วแทนที่โปรเซส
  3. Certificate pull — ดึงคู่ TLS ของ hostname เมื่อลายนิ้วมือต่างหรือใกล้หมดอายุ
  4. Catalog delta — แถวติ๊กเกอร์และคอมโพสิตแบบเพิ่มทีละน้อย (ไม่ใช่ดัมพ์ฐานข้อมูลเต็ม)
  5. Trade batch — ฟิลท้องถิ่นเข้า outbox โหนดโพสต์แบทช์ไปฮับ คีย์ idempotent กัน ingest ซ้ำ ไม่ replay holdings — เฉพาะข้อเท็จจริงของฟิล

การย้ายสคีมาไปกับ binary: เมื่อสตาร์ทโปรเซส โหนดใช้ SQL แบบ expand-only ที่พกมา ฮับอธิบายเวอร์ชันสคีมาผ่าน API ได้ด้วย แต่กฎที่ยั่งยืนยังเป็น “ส่งสคีมากับซอฟต์แวร์” ไม่ใช่ “ผลัก SQL เข้าฐานของคนแปลกหน้า”

ทำไม pull อยู่รอดบนลิงก์ช้า

โหนดขอบหนึ่งของเราอยู่บน VPS ไกล เส้นทางกลับฮับช้า timeout HTTP สองนาทีดูดีบน LAN แต่ล้มทุกครั้งบนอัปลิงก์นั้น ทางแก้ไม่ใช่ “ดันจากฮับแรงขึ้น” แต่คือ:

  • แยกการเช็กเวอร์ชันเล็ก (timeout สั้น) ออกจากการดาวน์โหลดก้อนใหญ่ (ไม่มี body timeout รวม — มีแค่ header timeout ให้ฮับตายล้มเร็ว)
  • Gzip บนสายให้เพย์โหลดเล็กลง แฮชยังเป็นของ artifact ดิบ
  • สเตจข้าง binary ที่รัน (ไม่ใช่ temp ลอยๆ) ให้ออเปอเรเตอร์ดูพาธจริงระหว่างโอนยาว — ไฟล์สเตจหายหลังสำเร็จหรือตรวจไม่ผ่าน
  • ลอง pull ที่ล้มใหม่ในไม่กี่นาที ไม่ใช่ชั่วโมงละครั้ง

เมื่อโหนด เป็น ของเรา เรายังวาง binary แรกด้วยมือได้ หลังจากนั้นลูป pull เดียวกันคอยอัปเดต โฮสต์ที่ไม่ได้เป็นเจ้าของหรือเป็นเจ้าของครึ่งๆ ไม่มีช่อง push เลย

Check Download SHA-256 Swap Exec แฮชไม่ผ่าน → ลบไฟล์สเตจ · ไม่ทิ้ง binary เชื่อครึ่งๆ
รูปที่ 3. เส้นทาง self-update ของ binary โปรเซสแทนที่ตัวเองหลังแฮชตรงเท่านั้น

ฮับเก็บอะไรจริงๆ

ฮับไม่ใช่ไปป์ไลน์ CD มหัศจรรย์ยิงไปทั่วโลก มันเป็นคลังเล็กๆ เรียบๆ:

  • ตราประทับเวอร์ชันและ binary ตามแพลตฟอร์มให้โหนดดึง
  • คลังใบรับรองจาก flow ออกใบปกติ — โหนดดึงวัสดุ hostname ของตัวเอง
  • ตารางฐานข้อมูลสำหรับ hello ล่าสุด เวอร์ชันซอฟต์แวร์ที่รายงาน ลายน้ำสคีมา รุ่นแคตตาล็อก และคลังฟิลที่ซินดิเคตแล้ว

การมองเห็นฝ่าย ops ไปที่แดชบอร์ดเมตริก: hostname ไหนรัน build ไหน ว่าอยู่หลัง hub latest หรือไม่ และ hello ครั้งล่าสุดเมื่อไร เรพลิกาฮับแบบ high-availability เคยนับเมืองเดียวกันซ้ำ จนกว่าเราจะสร้างเกจใหม่จากฐานข้อมูล แทน “สิ่งที่โปรเซสนี้เห็นล่าสุด”

ทำไมเข้ากับ 3DN

3DN ขาย infrastructure และ managed hosting โดยเอนไปทางผู้ให้บริการที่ต้องการควบคุมโดยไม่วุ่นวาย อคติเดียวกันปรากฏในผลิตภัณฑ์ 3DN family — work · money · politics — ที่ PolitiCap เป็นขา politics ตลาดภูมิภาคเชื่อถือได้ก็ต่อเมื่อเส้นทางอัปเดตชัด ตรวจสอบได้ และปลอดภัยบนลิงก์ที่เราไม่ได้เป็นเจ้าของเต็มที่

เราสร้างเส้นทางนั้นในความหมายวิศวกรรมเปิด: การเปลี่ยนที่ตามใน GitLab ไมเกรชันแบบ expand-only artifact ที่ตรวจแฮช และนโยบาย pull-only สำหรับโหนดที่ไม่ได้เป็นเจ้าของ ไม่โรแมนติกเรื่อง zero-touch แค่นิสัย production ที่อยู่รอดบน VPS ช้าและแผนที่หลายเมือง

สรุป

  • Pull คือขอบเขตความปลอดภัย ไม่ใช่แฟชั่น ไม่เชื่อโฮสต์ ก็อย่า push ไป
  • แยกนาฬิกา: เวอร์ชันซอฟต์แวร์ สคีมา และรุ่นแคตตาล็อกคนละอย่าง ปนกันบังคับดัมพ์เต็มหรืออัปเกรดพัง
  • WAN ช้าเป็นข้อกำหนด ไม่ใช่เคสขอบ Timeout อยู่ที่ probe ของ control plane ไม่ใช่ body หลายเมกะไบต์
  • แบทช์สิ่งที่ทำได้: outbox เทรดและเดลต้าแคตตาล็อกทำให้ chatter เล็กและ retry ปลอดภัย
  • สังเกตจากสถานะที่ยั่งยืน: เมตริกที่อยู่ใน memory ของโปรเซสอย่างเดียวโกหกทันทีที่มีเรพลิกาฮับสองตัว

ถ้าคุณรัน multi-region API บน compute ของ 3DN — หรือออกแบบขอบแบบ ECN เอง — เริ่มจากกราฟการสื่อสาร ไม่ใช่สคริปต์ deploy ลูกศรบอกว่าใครพูดก่อนได้

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *