- ซอฟต์แวร์แบบ Local-First: ซอฟต์แวร์ที่เก็บข้อมูลไว้ในเครื่องเป็นหลัก และจะซิงก์หรือสำรองข้อมูลผ่านอินเทอร์เน็ตเมื่อจำเป็นเท่านั้น
- ปัญหาของ Local-First
- ข้อดีคือผู้ใช้เป็นเจ้าของและควบคุมข้อมูลได้เอง
- แต่การซิงก์ออนไลน์ระหว่างอุปกรณ์หลายเครื่องก็ยังต้องมีเซิร์ฟเวอร์ซิงก์อยู่ดี
- ถ้าบริษัทล้ม เซิร์ฟเวอร์ซิงก์ก็หายไป ทำให้ซิงก์ไม่ได้อีก
- แล้วจะแก้ปัญหานี้อย่างไร?
วิธีแก้ด้วย Dropbox
- การซิงก์ผ่านคลาวด์: สามารถใช้โซลูชันซิงก์ไฟล์บนคลาวด์ได้หลากหลาย เช่น Dropbox, iCloud Drive, OneDrive, Google Drive
- ข้อดี: หลายคนใช้อยู่แล้ว และมีหลายผู้ให้บริการจึงสามารถทดแทนกันได้
- ข้อเสีย: การซิงก์ไฟล์เป็นโปรโตคอลที่ค่อนข้างเรียบง่าย จึงขาดฟีเจอร์อย่างอีเวนต์การซิงก์หรือการจัดการความขัดแย้ง
เวอร์ชัน 1: วิธีที่ง่ายมาก
- บันทึกสถานะลงไฟล์แล้วซิงก์ผ่าน Dropbox
- หากมีการเปลี่ยนสถานะจากสองอุปกรณ์พร้อมกัน จะเกิดไฟล์ conflict
- ถ้าใช้ CRDT (Conflict-free Replicated Data Types) ก็สามารถแก้ conflict ได้
- CRDT คือชุดของชนิดข้อมูลที่สามารถ merge ได้เสมอ
- วิธีแก้คือเปิดไฟล์ conflict ขึ้นมา merge สถานะ แล้วบันทึกกลับลงไปอีกครั้ง
เวอร์ชัน 2: ไฟล์แยกตามไคลเอนต์
- กำหนดไฟล์เฉพาะให้แต่ละไคลเอนต์เพื่อป้องกัน conflict
- เมื่อตรวจพบว่าไฟล์ของไคลเอนต์อื่นมีการเปลี่ยนแปลง ก็ทำการ merge
- เพราะแก้ไขเฉพาะในเครื่อง Dropbox จึงไม่รายงาน conflict
เวอร์ชัน 3: แบบอิงโอเปอเรชัน
- หาก CRDT เป็นแบบ Operation-based ก็สามารถบันทึกงานลงในไฟล์ append-only แยกต่างหากได้
- แต่ละไคลเอนต์จะเขียนลงไฟล์ของตัวเอง จึงหลีกเลี่ยง conflict ได้
- ถ้า operation log ยาวเกินไป ก็แบ่งไฟล์ออกเป็นชังก์เพื่อเพิ่มประสิทธิภาพในการซิงก์
บทสรุป
- หากต้องการสร้างแอปพลิเคชัน Local-First ที่ผู้ใช้มีการควบคุมและความเป็นเจ้าของอย่างสมบูรณ์ ก็จำเป็นต้องมีการซิงก์ข้อมูล
- บริการซิงก์ไฟล์อย่าง Dropbox เป็นวิธีซิงก์ที่เรียบง่ายแต่มีประสิทธิภาพ
- แม้จะไม่เรียลไทม์เท่าโซลูชันที่ออกแบบเฉพาะ แต่ก็เพียงพอสำหรับการซิงก์ในชีวิตประจำวัน
- ตัวอย่างเช่น ระดับที่เพียงพอคือแบบ Apple Photos ที่ทำให้คุณดูรูปของตัวเองได้จากที่ไหนก็ได้เมื่อจบวัน
- ผู้ใช้สามารถใช้คลาวด์ของตนเองเพื่อซิงก์แบบถาวรได้ฟรี
ความเห็นของ GN⁺
- ความสำคัญของซอฟต์แวร์ Local-First: ผู้ใช้สามารถเป็นเจ้าของและควบคุมข้อมูลได้โดยตรง จึงเป็นประโยชน์ต่อความเป็นส่วนตัวและความปลอดภัยของข้อมูล
- ข้อจำกัดของบริการซิงก์: บริการอย่าง Dropbox ทำการซิงก์พื้นฐานได้ แต่มีข้อจำกัดเมื่อเจอสถานการณ์ซิงก์ที่ซับซ้อน
- การใช้ CRDT: การใช้ CRDT ช่วยให้แก้ conflict ได้ง่ายขึ้น และเพิ่มความน่าเชื่อถือของการซิงก์
- โซลูชันทดแทน: โซลูชันซิงก์แบบโอเพนซอร์สอย่าง Syncthing ก็เป็นตัวเลือกที่ควรพิจารณา
- สิ่งที่ควรพิจารณาเมื่อนำเทคโนโลยีไปใช้: เมื่อนำซอฟต์แวร์ Local-First ไปใช้ ควรตรวจสอบความเสถียรของเซิร์ฟเวอร์ซิงก์และแนวทางจัดการ data conflict ให้รอบคอบ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
การทำให้สามารถโฮสต์เซิร์ฟเวอร์ซิงก์แบ็กเอนด์ของแอปพลิเคชันแบบ local-first ไว้บนเครื่องได้เป็นสิ่งสำคัญ: การซิงก์ไฟล์อย่างเดียวไม่เพียงพอสำหรับการให้ฟีเจอร์บางอย่าง ผู้ใช้ควรสามารถบันทึก "workspace.zip" และดาวน์โหลด "server.exe/.bin" เพื่อโฮสต์แบ็กเอนด์ด้วยตนเองได้ทุกเมื่อ
ความยากในการสร้างรายได้จากแอปพลิเคชันแบบ local-first: มีโมเดลแบบ Obsidian ที่ให้แอปหลักใช้ฟรีและคิดค่าบริการสำหรับความสามารถด้านเครือข่าย แนะนำให้ใช้ Yjs เพื่อสร้างแอปแบบ local-first + collaborative
CRDTs ไม่ใช่ตัวเลือกที่ดีที่สุดเสมอไป: อาจเหมาะกับการซิงก์ไฟล์ แต่การให้เซิร์ฟเวอร์ส่วนกลางตรวจสอบ business logic และแก้ไข merge conflicts อาจดีกว่า แนวทาง distributed state machine อาจซับซ้อนและดูแลรักษายาก
โปรโตคอล RemoteStorage: ทุกแอปพลิเคชันสามารถรองรับสิ่งนี้ได้ และผู้ใช้สามารถระบุ URL ของ RemoteStorage ของตนเองได้ อย่างไรก็ตาม implementation ส่วนใหญ่ไม่ได้รับการบำรุงรักษาแล้ว
ข้อจำกัดของโซลูชันซิงก์ไฟล์บนคลาวด์: ไม่เหมาะกับซอฟต์แวร์ทำงานร่วมกันหรือซอฟต์แวร์แบบเรียลไทม์ จำเป็นต้องมีโมเดลที่ให้ความสามารถในการทำงานร่วมกันได้โดยไม่ผูกติดกับผู้ให้บริการ
ข้อดีของซอฟต์แวร์แบบ local-first: ทำให้พัฒนาได้ง่ายขึ้นและยกระดับประสบการณ์ผู้ใช้ คาดว่าจะมีเฟรมเวิร์ก local-first ที่มอบประสบการณ์นักพัฒนาใกล้เคียงกับ Nuxt หรือ Next ปรากฏขึ้น
ความเสี่ยงของ cloud storage: ผู้ให้บริการคลาวด์อาจลบข้อมูลหรือบล็อกการเข้าถึงได้ เมื่อต้องใช้ cloud storage แบบ local-first ควรตั้งค่าให้ดาวน์โหลดทุกไฟล์
ประสบการณ์การซิงก์ด้วย PWA: เคยสร้าง PWA ที่ซิงก์โดยใช้ AWS และ WebDAV การลดเวลาอ่านและเขียนให้น้อยที่สุดเป็นสิ่งสำคัญเพื่อลดเวลาซิงก์
ข้อจำกัดของแนวคิด cloud-first: หากเกิดเหตุเครือข่ายล่มในระดับทวีป ปัญหาของแนวคิด cloud-first จะปรากฏชัด
ความยากของการซิงก์แบบ local-first บนมือถือ: iPhone จัดการการซิงก์ไฟล์แบบ Dropbox ในเบื้องหลังได้ยาก