12 คะแนน โดย GN⁺ 2024-05-27 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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-Chrome
  • ไลบรารีนามธรรมของสถานะ:
    • 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 ความคิดเห็น

 
GN⁺ 2024-05-27
ความคิดเห็นบน Hacker News

สรุปความคิดเห็นจาก Hacker News

  • เตรียมเปิดตัวไลบรารี braid-text ใหม่

    • แนะนำไลบรารีที่ช่วยเพิ่มความสามารถในการแก้ไขร่วมกันให้เว็บแอปได้อย่างง่ายดาย
    • เพิ่มเข้าไปในแอป Node.js ได้ง่าย และไม่ต้องใช้ WebSocket
    • ใช้ชนิดการรวม simpleton จึงไม่มีโอเวอร์เฮดด้านประวัติฝั่งไคลเอนต์
    • สามารถดูประวัติเวอร์ชันได้ผ่านส่วนขยาย Braid-Chrome
  • ไม่มีหมายเลขเวอร์ชันอยู่ใน URL

    • หมายเลขเวอร์ชันจะไม่อยู่ใน URL แต่ส่งผ่านเฮดเดอร์แยกต่างหาก
    • ทำให้ลิงก์ไปยังเวอร์ชันใดเวอร์ชันหนึ่งได้ยาก
    • มีข้อสงสัยว่าการซิงก์ควรผูกกับ HTTP อย่างใกล้ชิดหรือไม่
  • ชอบใช้มาตรฐานที่มีอยู่มากกว่าการขยาย HTTP

    • อาจดีกว่าหากใช้มาตรฐานที่มีอยู่แล้วแทนการขยาย HTTP
    • การใช้ PATCH อาจเหมาะสมกว่าการใช้ partial PUT
  • เหมาะกับโครงสร้างพื้นฐานแบบกระจายศูนย์

    • Braid อาจช่วยลดต้นทุนในการซิงก์สถานะระหว่างอุปกรณ์ได้แม้ไม่มีคลาวด์
    • เหมาะกับโครงสร้างพื้นฐานแบบกระจายศูนย์
  • อาจมุ่งไปสู่ event streaming ที่ทั่วไปกว่า

    • สามารถสมัครรับการเปลี่ยนแปลงของทรัพยากรแต่ละรายการได้
    • มีคำถามว่าอาจมุ่งไปสู่เป้าหมายด้าน event streaming ที่ทั่วไปกว่านี้หรือไม่
  • การเปรียบเทียบกับ WebDAV

    • คล้ายกับ WebDAV แต่มีความสามารถที่ทรงพลังกว่า
    • อาจดีกว่าหากสร้างเป็นเลเยอร์บน HTTP
  • คำถามเกี่ยวกับกรณีใช้งาน

    • มีคำถามว่าไลบรารีนี้สามารถนำไปใช้กับอะไรได้บ้าง
    • กรณีใช้งานยังไม่ชัดเจน
  • ลิงก์ที่เกี่ยวข้อง

    • มีการแชร์ลิงก์ที่เกี่ยวข้องกับ Braid: Synchronization for HTTP
  • เป็นระบบสำหรับเรียลไทม์เท่านั้นหรือไม่

    • มีคำถามว่าใช้ได้เฉพาะงานเรียลไทม์หรือไม่ และมีฟังก์ชันจัดการประวัติหรือไม่
    • มีความกังวลเกี่ยวกับกรณีที่ไคลเอนต์เชื่อมต่อไม่บ่อย
  • ลักษณะของ HTTP

    • HTTP เป็นโปรโตคอลแบบ request-response และไม่ได้จัดการการส่งผ่านสถานะ
    • คำอธิบายที่ว่า Braid-HTTP เป็นส่วนขยายไปสู่โปรโตคอลซิงก์สถานะนั้นดูแปลกอยู่บ้าง