
ระบบกระจายส่วนใหญ่ยังส่งซอฟต์แวร์แบบเดิม: คนที่มี credential push binary ไปทุกเครื่อง ใช้ได้เมื่อคุณเป็นเจ้าของทุกโฮสต์ มันพังทันทีเมื่อโหนดอยู่บนเครือข่ายของคนอื่น หลังอัปลิงก์ช้า หรืออยู่กับผู้ให้บริการที่ไม่ควรได้ deploy key ของคุณ
บน PolitiCap — แพลตฟอร์มตลาดการเมืองของ 3DN — โหนดแลกเปลี่ยนภูมิภาค (ECN, electronic communication network) รันในหลายเมืองและหลายประเทศ บางโฮสต์เป็นของเรา บางโฮสต์อาจไม่ใช่ เราจึงกลับค่าเริ่มต้น: โหนดเป็นฝ่าย pull; ฮับไม่ push เลย
บทความนี้คือเรื่องราววิศวกรรมของโครง pull นั้น: ซอฟต์แวร์ ใบรับรอง TLS สคีมาฐานข้อมูล แคตตาล็อกตลาด และแบทช์เทรด — พร้อมกราฟการสื่อสารที่ทำให้ production ซื่อสัตย์
กฎในหนึ่งประโยค
ถ้าเครื่องไม่อยู่ภายใต้การควบคุมของ 3DN เต็มที่ ฮับต้องไม่เปิดเชลล์ไปหา โหนดยืนยันตัวตนออกไป ถามว่ามีอะไรเปลี่ยน แล้วใช้อัปเดตตามจังหวะของตัวเอง นั่นคือ digital sovereignty สำหรับ infrastructure: แต่ละภูมิภาคถือกุญแจประตูของตัวเอง
ห้าลูป ไม่ใช่ตัวอัปเดตก้อนเดียว
แต่ละโปรเซส API ภูมิภาคคือ managed hosting compute ธรรมดา: หนึ่งบริการ หนึ่งหน้าสาธารณะของเมืองนั้น ข้างในมีห้าลูปพื้นหลังคู่กับ HTTP — หน่วยงานพร้อมกัน (goroutine ใน Go) ไม่ใช่ “หน้าต่าง deploy กลางคืน”
- Hello — ping ยืนยันตัวตนเป็นระยะให้ฮับรู้ว่าโหนดยังมีชีวิตและรัน build ใด
- Binary pull — ถ้าฮับประกาศ artifact ใหม่กว่า ให้ดาวน์โหลดข้าง binary ที่รัน ตรวจแฮช แลกแบบอะตอมิก แล้วแทนที่โปรเซส
- Certificate pull — ดึงคู่ TLS ของ hostname เมื่อลายนิ้วมือต่างหรือใกล้หมดอายุ
- Catalog delta — แถวติ๊กเกอร์และคอมโพสิตแบบเพิ่มทีละน้อย (ไม่ใช่ดัมพ์ฐานข้อมูลเต็ม)
- 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 เลย
ฮับเก็บอะไรจริงๆ
ฮับไม่ใช่ไปป์ไลน์ 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 ลูกศรบอกว่าใครพูดก่อนได้
ใส่ความเห็น