7 คะแนน โดย GN⁺ 2023-10-19 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Reflect คือเฟรมเวิร์กใหม่สำหรับสร้างเว็บแอปพลิเคชันแบบหลายผู้เล่นที่คล้ายกับ Figma, Notion และ Google Sheets
  • มันเป็นเวอร์ชันที่พัฒนาต่อจาก Replicache ซึ่งเป็นเฟรมเวิร์กการซิงก์ฝั่งไคลเอนต์ โดยเพิ่มเซิร์ฟเวอร์แบบจัดการครบวงจรเพื่อให้การพัฒนาแอปหลายผู้เล่นทำได้ง่ายขึ้น
  • ตอนนี้ Reflect เปิดให้ใช้งานสาธารณะเป็นครั้งแรกแล้ว
  • เฟรมเวิร์กนี้จัดการปัญหาการแก้ความขัดแย้งในการแก้ไขร่วมกัน โดยทำให้ผู้ใช้ทุกคนเห็นข้อมูลเดียวกันและความขัดแย้งถูกแก้ไขอย่างเป็นธรรมชาติ
  • ต่างจากเครื่องมือยอดนิยมในระบบนิเวศเว็บอย่าง CRDTs (Conflict-Free Replicated Data Types) Reflect ใช้เทคนิค Transactional Conflict Resolution ที่ได้รับความนิยมในอุตสาหกรรมวิดีโอเกม
  • จุดเด่นและความแตกต่างเฉพาะตัวของ Reflect เกิดจากการเลือกแกนหลักของเอนจินซิงก์นี้
  • Reflect ใช้ฟังก์ชัน JavaScript ที่เรียกว่า mutators ในการทำให้เกิดการเปลี่ยนแปลง และสร้าง mutation record ที่เรียกใช้ mutator
  • Mutation จะถูกนำไปใช้ในเครื่องก่อนและสตรีมไปยังเซิร์ฟเวอร์ โดยเซิร์ฟเวอร์จะทำให้ mutation เป็นลำดับเชิงเส้นตามเวลาที่มาถึง เพื่อสร้างสถานะถัดไปที่เป็นแหล่งอ้างอิงหลัก
  • Reflect สามารถรองรับแอปพลิเคชันที่เคลื่อนไหวรวดเร็วได้ และยังเพิ่ม mutation ต่อไปได้ขณะรอการยืนยันของรายการก่อนหน้า
  • เฟรมเวิร์กนี้ต้องการที่เก็บข้อมูลที่รวดเร็วซึ่งสามารถย้อนกลับ สร้าง fork และแตก branch ได้ รวมถึงที่เก็บข้อมูลฝั่งเซิร์ฟเวอร์ที่รวดเร็วซึ่งสามารถตาม mutation ที่เข้ามาได้ทัน
  • แนวทางของ Reflect สามารถทำให้เป็นทั่วไปได้ดี จึงเหมาะกับงานหลากหลาย เช่น การคำนวณเลขคณิต การจัดการรายการ และการบังคับใช้ข้อกำหนดระดับสูง
  • เซิร์ฟเวอร์ของ Reflect เป็นผู้มีอำนาจตัดสิน โดยจะคำนวณผลของ mutation ซ้ำด้วยตัวเอง และทำให้ไคลเอนต์ทั้งหมดเห็นผลลัพธ์นั้น
  • อำนาจของเซิร์ฟเวอร์นี้ทำให้สามารถทำ authentication แบบละเอียด และรันโค้ดอื่น ๆ บนเซิร์ฟเวอร์ได้
  • Reflect ยังมีข้อดีเพิ่มเติม เช่น การตรวจสอบสคีมาและการทำ migration
  • กลยุทธ์การซิงก์ของ Reflect ที่เรียกว่า Transactional Conflict Resolution นั้นเรียบง่าย ยืดหยุ่น และทรงพลัง จึงเป็นตัวเลือกที่ดีสำหรับการสร้างแอปพลิเคชันแบบหลายผู้เล่น

1 ความคิดเห็น

 
GN⁺ 2023-10-19
ความคิดเห็นจาก Hacker News
  • บทความนี้พูดถึง Reflect ซึ่งเป็นเฟรมเวิร์กเว็บแอปแบบหลายผู้ใช้ที่มีการซิงก์สไตล์เกม
  • เดโม Reflect บนหน้าโฮมเพจมีความโต้ตอบได้สูง และดูเหมือนว่าผู้ใช้จะแสดงความตื่นเต้นเมื่อทำงานเสร็จ ทำให้น่าสนใจมาก
  • Reflect ไม่ได้เป็นโอเพนซอร์ส จึงอาจจำกัดการนำไปใช้ในบริษัทที่ให้ความสำคัญกับซอฟต์แวร์โอเพนซอร์สสำหรับโครงสร้างพื้นฐานหลัก
  • ก่อนหน้านี้ Reflect เป็นที่รู้จักในชื่อ Replicache และตอนนี้มีเซิร์ฟเวอร์ซิงก์ความเร็วสูงรวมอยู่ด้วย
  • เฟรมเวิร์กนี้เปิดให้ผู้ใช้ตัดสินใจได้ว่าจะจัดการกับความขัดแย้งอย่างไรด้วยโค้ดที่เรียบง่ายและเป็นลำดับ ซึ่งถูกมองว่าได้เปรียบกว่า CRDTs
  • โมเดลข้อมูลและโมเดลการเขียนโค้ดของ Reflect ได้รับคำชมเพราะความเรียบง่ายของมัน
  • มีการพูดคุยถึงความท้าทายของการทำงานกับรายการใน Reflect โดยเฉพาะในสถานการณ์ที่มีการอัปเดตพร้อมกันจากผู้ใช้หลายคน
  • ผู้ใช้คนหนึ่งชี้ว่าคำศัพท์ที่ใช้ใน Reflect ชวนให้สับสน และเสนอให้ใช้คำว่า "หลายผู้ใช้" แทน "มัลติเพลเยอร์" สำหรับซอฟต์แวร์ที่ไม่ใช่เกม
  • มีคำถามว่า Reflect จัดการการยืนยันตัวตนอย่างไร เนื่องจากไลบรารี CRDT มักขาดอำนาจส่วนกลางในการตรวจสอบการเปลี่ยนแปลง
  • กลยุทธ์ของ Reflect ถูกเปรียบเทียบกับ "การซิงก์แบบกำหนดแน่นอน" ที่ใช้ในการพัฒนาเกมเพื่อซิงก์สถานะของเอนทิตีจำนวนมาก
  • มีการตั้งคำถามว่า Reflect จัดการกับการอัปเกรดของ mutators อย่างไร และรับมือกับความไม่สอดคล้องที่อาจเกิดขึ้นระหว่างการทำงานฝั่งไคลเอนต์กับฝั่งเซิร์ฟเวอร์อย่างไร
  • ผู้ใช้คนหนึ่งแสดงความเห็นว่าเอนจินมัลติเพลเยอร์จำเป็นต้องมีโปรโตคอล UDP ภายในเบราว์เซอร์เพื่อรองรับการส่งข้อความความถี่สูง และวิจารณ์โอเวอร์เฮดของ TCP และ WebSocket