8 điểm bởi GN⁺ 2024-06-26 | 1 bình luận | Chia sẻ qua WhatsApp
  • Phần mềm Local-First: phần mềm lưu trữ dữ liệu chủ yếu ở máy cục bộ, và chỉ đồng bộ hoặc sao lưu qua Internet khi cần
  • Vấn đề của Local-First
    • Việc người dùng có thể sở hữu và kiểm soát dữ liệu là một điểm tốt
    • Nhưng để đồng bộ trực tuyến giữa nhiều thiết bị, vẫn cần có máy chủ đồng bộ
    • Nếu công ty phá sản thì máy chủ đồng bộ cũng biến mất, khiến việc đồng bộ không còn khả thi
    • Nên giải quyết điều này như thế nào?

Giải pháp dùng Dropbox

  • Đồng bộ đám mây: có thể dùng nhiều giải pháp đồng bộ tệp dựa trên đám mây như Dropbox, iCloud Drive, OneDrive, Google Drive
  • Ưu điểm: rất nhiều người đã dùng sẵn, và có nhiều lựa chọn triển khai nên có thể thay thế lẫn nhau
  • Nhược điểm: đồng bộ tệp là một giao thức đơn giản, thiếu các sự kiện đồng bộ hay tính năng giải quyết xung đột

Phiên bản 1: cách rất đơn giản

  • Lưu trạng thái vào tệp và đồng bộ bằng Dropbox
  • Nếu thay đổi trạng thái trên hai thiết bị, sẽ xuất hiện tệp xung đột
  • Có thể giải quyết xung đột bằng CRDT(Conflict-free Replicated Data Types)
    • CRDT là một tập hợp các kiểu dữ liệu luôn có thể được hợp nhất
  • Cách xử lý là mở tệp xung đột, hợp nhất trạng thái rồi lưu lại

Phiên bản 2: tệp theo từng client

  • Gán một tệp riêng cho mỗi client để tránh xung đột
  • Khi tệp của client khác thay đổi, phát hiện điều đó rồi hợp nhất
  • Vì chỉ chỉnh sửa cục bộ nên Dropbox không báo xung đột

Phiên bản 3: dựa trên phép toán

  • Nếu CRDT là operation-based thì có thể ghi các thao tác vào một tệp append-only riêng
  • Mỗi client ghi vào tệp của riêng mình để tránh xung đột
  • Khi nhật ký thao tác trở nên dài, có thể chia tệp thành các chunk để tăng hiệu quả đồng bộ

Kết luận

  • Để xây dựng ứng dụng local-first nơi người dùng có toàn quyền kiểm soát và sở hữu, cần có đồng bộ dữ liệu
  • Các dịch vụ đồng bộ tệp như Dropbox cung cấp một cách đồng bộ đơn giản nhưng hiệu quả
  • Dù không phải đồng bộ thời gian thực như các giải pháp tùy biến, nó vẫn đủ cho nhu cầu đồng bộ hằng ngày
  • Ví dụ, giống như Apple Photos, chỉ cần đủ để có thể xem ảnh của chính mình ở mọi nơi vào cuối ngày
  • Người dùng có thể dùng đám mây của chính mình để có đồng bộ vĩnh viễn miễn phí

Ý kiến của GN⁺

  • Tầm quan trọng của phần mềm Local-First: người dùng có thể trực tiếp sở hữu và kiểm soát dữ liệu, có lợi cho quyền riêng tư và bảo mật dữ liệu.
  • Giới hạn của dịch vụ đồng bộ: các dịch vụ như Dropbox có thể đáp ứng đồng bộ cơ bản, nhưng có giới hạn trong các kịch bản đồng bộ phức tạp.
  • Ứng dụng của CRDT: dùng CRDT giúp việc giải quyết xung đột dễ dàng hơn, từ đó tăng độ tin cậy của đồng bộ.
  • Giải pháp thay thế: cũng đáng cân nhắc các giải pháp đồng bộ mã nguồn mở như Syncthing.
  • Điểm cần lưu ý khi áp dụng công nghệ: khi áp dụng phần mềm Local-First, cần xem xét kỹ độ ổn định của máy chủ đồng bộ và phương án xử lý xung đột dữ liệu.

1 bình luận

 
GN⁺ 2024-06-26
Ý kiến trên Hacker News
  • Điều quan trọng là phải cho phép tự lưu trữ máy chủ đồng bộ backend của các ứng dụng local-first ngay trên máy cục bộ: Đồng bộ tệp đơn thuần là không đủ để cung cấp một số tính năng nhất định. Cần cho phép người dùng bất cứ lúc nào cũng có thể lưu workspace.zip và tải server.exe/.bin về để tự lưu trữ backend.

  • Khó khăn trong việc kiếm tiền từ ứng dụng local-first: Có mô hình như Obsidian, trong đó ứng dụng cơ bản được cung cấp miễn phí và tính phí cho các tính năng mạng. Khuyến nghị dùng Yjs để xây dựng ứng dụng local-first + cộng tác.

  • CRDTs không phải lúc nào cũng là lựa chọn tốt nhất: Chúng có thể phù hợp cho đồng bộ tệp, nhưng trong nhiều trường hợp, việc máy chủ trung tâm xác thực logic nghiệp vụ và giải quyết xung đột khi hợp nhất có thể tốt hơn. Cách tiếp cận máy trạng thái phân tán có thể phức tạp và khó bảo trì.

  • Giao thức RemoteStorage: Mọi ứng dụng đều có thể triển khai giao thức này và người dùng có thể cung cấp URL RemoteStorage của riêng mình. Tuy nhiên, phần lớn các triển khai hiện không còn được bảo trì.

  • Giới hạn của các giải pháp đồng bộ tệp dựa trên đám mây: Chúng không phù hợp với phần mềm cộng tác hay phần mềm thời gian thực. Cần có một mô hình cung cấp tính năng cộng tác mà không bị khóa vào nhà cung cấp.

  • Ưu điểm của phần mềm local-first: Việc phát triển trở nên dễ hơn và trải nghiệm người dùng được cải thiện. Dự đoán sẽ xuất hiện các framework local-first mang lại trải nghiệm cho lập trình viên tương tự như Nuxt hay Next.

  • Rủi ro của lưu trữ đám mây: Nhà cung cấp đám mây có thể xóa dữ liệu hoặc chặn quyền truy cập. Khi dùng lưu trữ đám mây local-first, nên cấu hình để tải xuống toàn bộ tệp.

  • Trải nghiệm đồng bộ bằng PWA: Đã xây dựng một PWA đồng bộ bằng AWS và WebDAV. Để rút ngắn thời gian đồng bộ, điều quan trọng là phải giảm thiểu thời gian đọc và ghi.

  • Giới hạn của ý tưởng cloud-first: Khi xảy ra sự cố mạng trên quy mô cả châu lục, các vấn đề của tư duy cloud-first sẽ bộc lộ.

  • Khó khăn của đồng bộ local-first trên thiết bị di động: iPhone gặp khó khăn trong việc xử lý đồng bộ tệp kiểu Dropbox ở chế độ nền.