Tôi đã sai. CRDT mới là tương lai.
(josephg.com)Câu chuyện về Conflict-free Replicated Data Types do một nhà phát triển Google Wave kể lại
→ CRDT: cấu trúc dữ liệu hỗ trợ chỉnh sửa đồng thời trong các công cụ cộng tác thời gian thực
-
Wave dựa trên OT (Operational Transform): lưu danh sách theo thứ tự thời gian của mọi thay đổi. Giống như
git rebasethời gian thực -
Một trong những vấn đề của OT là cần máy chủ/DB tập trung
→ Có lẽ đây là lý do Google Docs (cũng dựa trên OT) hiện thông báo kiểu “Tài liệu này đang quá tải nên không thể chỉnh sửa” khi có quá nhiều người cùng vào một tài liệu?
→ Có thể né tránh bằng cách chia nhỏ tài liệu hoặc dùng vòng lặp retry cho DB transaction (tức là đẩy vấn đề serialization sang DB)
→ Nhưng vẫn không hoàn hảo. Wave cho phép nhiều người chỉnh sửa đồng thời và nhìn chung hoạt động được, nhưng có rất nhiều bug. Quá phức tạp
- Sự trỗi dậy của CRDT
→ Thuật toán mà Wave dùng được phát minh từ năm 1995. Người ta đã tiếp tục nghiên cứu để OT hoạt động tốt hơn, nhưng CRDT có triển vọng hơn nhiều
→ CRDT chọn một cách tiếp cận khác, cho phép chỉnh sửa thời gian thực mà không cần DB trung tâm
→ Tốc độ/dung lượng/tính năng/độ phức tạp, những thứ từng bị xem là vấn đề, giờ đều đã được cải thiện
-
Tốc độ: các CRDT hiện nay (Automerge / RGA hoặc y.js / YATA) có thể truy vấn ở mức
log(n) -
Dung lượng: mã hóa Columnar của Martin có thể lưu ở kích thước khoảng 1.5~2 lần kích thước tài liệu
-
Tính năng: về mặt lý thuyết có thể rewinding và replaying. Tất nhiên, vẫn chưa có ai hiện thực hóa điều này
-
Độ phức tạp: kích thước implementation của CRDT có thể lớn hơn OT, nhưng chênh lệch không nhiều
→ Những cải tiến trên sẽ sớm được cung cấp trong Automerge
- Trong chỉnh sửa thời gian thực, đáng tiếc nhưng các công việc liên quan đến OT có lẽ sẽ không còn cần thiết nữa
→ Mọi tính năng của OT đều có thể đưa vào CRDT, nhưng chiều ngược lại thì không thể
→ Ưu điểm của OT là phù hợp với phần mềm tập trung, nhưng thuật toán phân tán cũng hoạt động tốt ngay cả trong mô hình tập trung
→ Một CRDT chất lượng cao chạy trên WASM sẽ nhanh hơn implementation OT bằng JS
- Đã đến lúc tạo ra những CRDT nhẹ và nhanh.
→ Phần học thuật gần như đã hoàn thiện, và giờ là lúc cần những implementation thật xuất sắc
10 bình luận
Tôi là Hong Young-taek, đang phát triển dự án Yorkie.
Kho lưu trữ tài liệu Yorkie dành cho các ứng dụng chỉnh sửa cộng tác theo thời gian thực cũng được xây dựng dựa trên CRDT.
https://github.com/yorkie-team/yorkie
Tôi đã sai. CRDT mới là tương lai.
Với OT thì có thể “ăn sẵn” undo/redo được... còn CRDT thì dường như chẳng có cách nào ngoài snapshot...
Trong trường hợp như Automerge, bản thân thư viện cũng hỗ trợ undo/redo. Người triển khai thì có lẽ sẽ thấy khó, nhưng ở góc độ người dùng thư viện thì cũng ổn thôi haha
https://www.notion.so/sihawn/CRDT-1dc1af26d60144c09eadd178e0ae6e0d
Trước đó mình đã dịch toàn văn rồi mà quên đăng lên ;m; Mình đọc lại dựa trên bản của Papago và chỉ chỉnh những chỗ nghe chưa tự nhiên. Nếu ai muốn xem thử cảm giác tổng thể ra sao khi đọc thì hãy xem ở link bên trên nhé~
Đăng trực tiếp trong khung bình luận thì... dài quá ;m; nên mình cung cấp bằng link Notion.
Nghĩ lại thì có lẽ Notion cũng đang dùng CRDT đấy nhỉ!
Những thứ dùng OT là Google Wave/Google Docs/MS Office365
Những thứ dùng CRDT là Figma/Apple Notes cũng như Riak/Redis, v.v.
Tôi đã sai. CRDT mới là tương lai.
Công nghệ đa người dùng của Figma hoạt động như thế nào https://vi.news.hada.io/topic?id=814
Video "CRDTs: The Hard Parts" của Martin Kleppmann, một trong những nhà phát triển Automerge được liên kết trong bài, giải thích thực sự rất hay.
Ở phần đầu, video so sánh và giải thích rất tốt giữa OT và CRDT. Phần sau đi sâu vào câu chuyện triển khai CRDT.
https://www.youtube.com/watch?v=x7drE24geUw
Thư viện CRDT dùng khi tạo công cụ cộng tác bằng JS
Tôi đã sai. CRDT mới là tương lai.
Hướng tới hệ thống cộng tác: từ thuật toán OT sang hệ thống CRDT
https://deview.kr/2013/detail.nhn?topicSeq=66
Trong số các bài thuyết trình trong nước, đây gần như là nội dung duy nhất đề cập đến CRDT.
Ngài Hyun-geol, người đã thực hiện bài thuyết trình này, chính là người đã tạo ra RGA được nhắc đến trong bài.
Yorkie cũng đã triển khai kiểu dữ liệu dạng danh sách dựa trên RGA.
https://github.com/yorkie-team/yorkie/issues/2