- Braid คือกลุ่มทำงานแบบเปิดที่สร้างอัลกอริทึม แอปพลิเคชัน เครื่องมือ และมาตรฐานสำหรับการซิงก์สถานะที่ทำงานร่วมกันได้
- เป้าหมายคือทำให้สามารถอ่านและเขียนสถานะแบบกระจายในระบบคอมพิวเตอร์เครือข่ายได้ง่ายราวกับเป็นตัวแปรภายในเครื่อง
- มีการประชุมแบบเปิดทุก 2 สัปดาห์เพื่อหารือความต้องการของแอปพลิเคชันและระบบ ระบุจุดร่วม และหาฉันทามติเกี่ยวกับโปรโตคอลที่ใช้ร่วมกัน
Braid-HTTP: การซิงก์สำหรับ HTTP
- Braid-HTTP คือส่วนขยายที่ทำให้ HTTP ทั่วไปจากโปรโตคอลสำหรับถ่ายโอนสถานะ กลายเป็นโปรโตคอลสำหรับซิงก์สถานะ
- เพิ่มความสามารถต่อไปนี้ให้กับ HTTP:
- การจัดการเวอร์ชัน ของทรัพยากร HTTP
- การสมัครรับข้อมูล (Subscription) สำหรับคำขอ GET
- PATCH สำหรับคำขอ Range
- Merge-Type สำหรับกำหนดพฤติกรรมของ OT หรือ CRDT
- ด้วยความสามารถเหล่านี้ ทรัพยากรบนเว็บจะสามารถซิงก์กันโดยอัตโนมัติระหว่างไคลเอนต์ เซิร์ฟเวอร์ และพร็อกซีหลายตัว และเปิดให้ผู้เขียนหลายคนแก้ไขพร้อมกันได้โดยยังคงความสอดคล้อง แม้อยู่ภายใต้ความหน่วงหรือการแบ่งแยกของเครือข่ายแบบใดก็ตาม
- เว็บแอปพลิเคชันสามารถใช้ส่วนขยายของ Braid เพื่อให้มีการแก้ไขร่วมกัน โหมดออฟไลน์แบบ serverless และเครือข่าย P2P ได้
- การใช้ไลบรารีมาตรฐานช่วยให้เพิ่มความสามารถเหล่านี้ให้กับเว็บแอปและเบราว์เซอร์เดิมได้ง่าย
- ดูรายละเอียดเพิ่มเติมได้จาก Internet-Draft ของ IETF
การใช้โปรโตคอล Braid
- Braid เข้ากันได้กับเว็บปัจจุบัน ทำงานได้บนเบราว์เซอร์ปัจจุบัน และเพิ่มเข้าไปในเว็บแอปเดิมได้ง่าย
- มีไลบรารีสำหรับหลายภาษา:
- Javascript: braid-http, braid-protocol
- Haskell: wai-braid
- Lua: อยู่ระหว่างการพัฒนาโดย Paul Kulchenko
- บน Chrome สามารถใช้ความสามารถของ Braid ได้ผ่านส่วนขยาย Braid-Chrome
โมเดลการซิงก์ของ Braid
- การติดตั้งใช้งานโปรโตคอล:
- braid-http
- braid-protocol
- wai-braid
- ส่วนขยายเบราว์เซอร์:
- ไลบรารีนามธรรมของสถานะ:
- Braid-Text (สำหรับข้อความ)
- Redwood
- Statebus
- Statecraft
- อัลกอริทึม:
- Diamond Types: text CRDT ที่เร็วที่สุดในโลก
- Antimatter: text CRDT แบบ history-pruning ตัวแรกของโลก
- Sync9: CRDT+OT สำหรับข้อความและ JSON
- SyncX: Sync9
- Shelf: JSON CRDT ที่เรียบง่ายและใช้งานได้ดีมาก
- Diffsync: CRDT+OT ที่ใช้ recursive 3-way merge
- Tiny-Merge: ไลบรารี CRDT เชิงปฏิบัติที่ออกแบบมาอย่างดี
- CR-SQLite: แปลง SQLite ให้เป็น CRDT ที่ใช้งานได้อย่างมาก
- Portals: งานคัดลอก ย้าย และห่อสำหรับ OT หรือ CRDT ทุกชนิด
- Simpleton: ไคลเอนต์ขนาดเบา ที่เรียบง่ายและรวดเร็วมาก สำหรับ CRDT ทุกชนิด
- ความเข้ากันได้:
- ความเข้ากันได้กับ Automerge
- ความเข้ากันได้กับ ShareDB และ Sync9
แอปพลิเคชัน
- เว็บไซต์นี้เอง
- Peery View: ระบบชื่อเสียง P2P ที่สร้างบน Braid
- Quiet: แชต P2P ที่ใช้ torDT
- Wiki
การทำงานร่วมกัน
- เป็น กลุ่มเปิด
- มีการประชุมทั่วไปทุก 2 สัปดาห์ผ่านลิงก์ Zoom
- มีการเดโมความคืบหน้าใหม่ ๆ หารือมาตรฐาน และพูดคุยแนวทางในการสร้างเว็บแบบกระจาย
- ยังมีการเพิ่มการประชุมคั่นระหว่างรอบตามกำหนดการเป็นระยะสำหรับหัวข้อเฉพาะด้วย
วิธีสร้างมาตรฐาน
- ทำงานกันแบบเปิดเผยที่ IETF
- หารือสเปกกันใน mailing list ของ Braid และ HTTP
- สามารถแก้ไขสเปกของ Braid ได้บน Github
- หากมีปัญหา สามารถส่ง issue บน Github ได้
- หากมีไอเดีย สามารถเขียนลงในสเปกและเปิด Pull Request ได้
- เมื่อได้ฉันทามติคร่าว ๆ แล้ว Pull Request จะถูกรับเข้า
- หากต้องการติดตามความคืบหน้าล่าสุดของการหารือมาตรฐาน สามารถสมัคร mailing list และติดตาม Github ได้
- หากต้องการความช่วยเหลือ สามารถส่งอีเมลถึง Michael Toomim ได้
โปรโตคอล Braid
- โปรโตคอล Braid ช่วยให้อัลกอริทึมการซิงก์หลายแบบทำงานร่วมกันได้ผ่านโปรโตคอลเครือข่ายร่วมกัน
- อุปกรณ์ซิงก์ในปัจจุบันใช้โปรโตคอลต่างกัน แต่ข้อความเครือข่ายของพวกมันล้วนส่งแพตช์ของพื้นที่ครอบคลุมเวอร์ชันของเวลา ตำแหน่งในพื้นที่ และช่วงของเวลา
- องค์ประกอบของชุดแพตช์ก่อให้เกิดโครงสร้างทางคณิตศาสตร์ที่เรียกว่า braid
- โปรโตคอล Braid คือรูปแบบข้อความมาตรฐานที่ทำให้อุปกรณ์ซิงก์ทุกชนิดสามารถแสดงการเปลี่ยนแปลงตามเวลาและคลี่คลายให้เป็นสถานะที่สอดคล้องกันได้
- เดโมแบบโต้ตอบเพื่อสำรวจโมเดลข้อมูล:
- โต้ตอบกับ braid
- สร้าง braid แบบสุ่ม
- หากสนใจการซิงก์ผ่าน HTTP สามารถดูสเปกของโปรโตคอลและแสดงความคิดเห็นใน mailing list ได้
โรดแมปของโปรโตคอล
- ปัจจุบันสเปกของ Braid ขยาย HTTP ไปใน 2 มิติของการซิงก์:
- ระดับ 0: HTTP ในปัจจุบัน
- ระดับ 1: การสมัครรับข้อมูลพร้อม push update
- ระดับ 2: ความสอดคล้องแบบ P2P (patch, version, merge)
- นอกจากนี้ยังมีการทำต้นแบบความสามารถ P2P ต่อไปนี้อยู่ แต่ยังไม่ได้ทำให้เป็นมาตรฐาน:
- ระดับ 3: semantics ของ P2P (method, validation, acknowledgement)
- ระดับ 4: การขนส่งของ P2P (URL, naming, encryption, routing)
- สำหรับคำอธิบาย สามารถดูการนำเสนอของ Mike ใน meeting-2
- ยินดีต้อนรับความร่วมมือในทั้ง 4 ด้าน
Braid ทำให้อุปกรณ์ซิงก์ทำงานร่วมกันได้
- Rafie Walker ใช้โปรโตคอล Braid เพื่อซิงก์ระบบ OT และ CRDT เข้าด้วยกัน
- มี babelfish บน WebSocket ที่สามารถแปลงข้อความเครือข่ายของ ShareDB เป็นข้อความของ Braid และแปลงกลับได้
- babelfish ระหว่าง ShareDB กับ Sync9:
- สามารถลองแบบสดได้
- ขอขอบคุณ Seph Gentle ที่ให้ข้อมูลเชิงลึกเกี่ยวกับโปรโตคอลของ ShareDB
- babelfish นี้เกือบเสร็จสมบูรณ์แล้ว แต่ยังไม่รองรับกรณีที่อุปกรณ์ซิงก์สองตัวแก้ความขัดแย้งด้วยลำดับการเรียงที่ต่างกัน
- เพื่อรองรับกรณีนี้ จำเป็นต้องติดตั้งใช้งาน merge type เดียวกัน (ดูสเปกของโปรโตคอล)
- ยังได้เริ่มออกแบบ babelfish สำหรับ Automerge ซึ่งเป็นระบบ CRDT แล้วด้วย
- หากคุณมีอุปกรณ์ซิงก์อยู่ ก็สามารถมาร่วมกันพัฒนา compatibility layer สำหรับ Braid ได้
ทำไมต้องชื่อ "Braid"?
- Braid เพิ่มการเดินทางย้อนเวลาเชิงประวัติศาสตร์ให้กับเว็บ เหมือนกับวิดีโอเกม Braid
- มันถักเกลียวแต่ละเส้นของเวิลด์ไวด์เว็บเข้าด้วยกัน ทำให้เว็บหนาขึ้น ทรงพลังขึ้น และแข็งแรงขึ้น
- มันถักทอหลายมุมมองเกี่ยวกับเทคโนโลยีการซิงก์และการกระจายตัวในมาตรฐานเว็บเข้าด้วยกัน
- braid เป็นทั้งโครงสร้างทางคณิตศาสตร์และโครงสร้างข้อมูลคอมพิวเตอร์ที่บรรจุข้อมูลที่จำเป็นสำหรับอุปกรณ์ซิงก์
- ด้วยการแทนการแก้ไขเป็นแพตช์ของ braid จึงทำให้อุปกรณ์ซิงก์หลายชนิดทำงานร่วมกันได้
ความเห็นของ GN⁺
- โปรโตคอล Braid เป็นเครื่องมือทรงพลังที่สามารถรวมอัลกอริทึมการซิงก์ที่หลากหลายเข้าด้วยกัน และอาจช่วยอย่างมากในการรักษาความสอดคล้องในระบบแบบกระจาย
- การรองรับทั้ง CRDT และ OT น่าจะมีประโยชน์มากสำหรับนักพัฒนาแอปพลิเคชันแบบทำงานร่วมกัน
- ส่วนขยายของ Braid-HTTP สามารถผสานเข้ากับเว็บแอปเดิมได้ง่าย จึงไม่น่าจะเป็นอุปสรรคใหญ่สำหรับนักพัฒนาในการนำเทคโนโลยีใหม่มาใช้
- การประชุมแบบเปิดของ Braid ช่วยส่งเสริมการมีส่วนร่วมของชุมชน และเปิดโอกาสให้รวบรวมความคิดเห็นที่หลากหลายเพื่อนำไปสู่มาตรฐานที่ดียิ่งขึ้น
- การรองรับหลายภาษา ช่วยให้นักพัฒนาสามารถใช้ Braid ด้วยภาษาที่ตนถนัด และสร้างสภาพแวดล้อมที่เอื้อต่อการเข้าร่วมของนักพัฒนาจำนวนมากขึ้น
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
สรุปความคิดเห็นจาก Hacker News
เตรียมเปิดตัวไลบรารี braid-text ใหม่
simpletonจึงไม่มีโอเวอร์เฮดด้านประวัติฝั่งไคลเอนต์ไม่มีหมายเลขเวอร์ชันอยู่ใน URL
ชอบใช้มาตรฐานที่มีอยู่มากกว่าการขยาย HTTP
PATCHอาจเหมาะสมกว่าการใช้partial PUTเหมาะกับโครงสร้างพื้นฐานแบบกระจายศูนย์
อาจมุ่งไปสู่ event streaming ที่ทั่วไปกว่า
การเปรียบเทียบกับ WebDAV
คำถามเกี่ยวกับกรณีใช้งาน
ลิงก์ที่เกี่ยวข้อง
เป็นระบบสำหรับเรียลไทม์เท่านั้นหรือไม่
ลักษณะของ HTTP