- Braid là một nhóm làm việc mở tạo ra các thuật toán, ứng dụng, công cụ và tiêu chuẩn cho việc đồng bộ hóa trạng thái có thể tương tác.
- Mục tiêu là giúp việc đọc và ghi trạng thái phân tán trên toàn bộ các hệ thống điện toán mạng trở nên dễ dàng như với biến cục bộ.
- Cứ mỗi 2 tuần, nhóm tổ chức các cuộc họp mở để thảo luận yêu cầu của ứng dụng và hệ thống, xác định điểm chung và tìm kiếm sự đồng thuận về giao thức dùng chung.
Braid-HTTP: Đồng bộ hóa cho HTTP
- Braid-HTTP là một phần mở rộng khái quát hóa HTTP từ giao thức truyền trạng thái thành giao thức đồng bộ hóa trạng thái.
- Nó bổ sung cho HTTP các tính năng sau:
- Quản lý phiên bản tài nguyên HTTP
- Đăng ký (Subscription) cho các yêu cầu GET
- PATCH cho các yêu cầu Range
- Merge-Type để chỉ định hành vi OT hoặc CRDT
- Nhờ các tính năng này, tài nguyên web có thể được đồng bộ tự động giữa nhiều client, server và proxy; nhiều tác giả có thể cùng chỉnh sửa đồng thời mà vẫn đảm bảo tính nhất quán ngay cả khi có độ trễ mạng tùy ý hoặc phân đoạn mạng.
- Ứng dụng web có thể dùng phần mở rộng Braid để cung cấp chỉnh sửa cộng tác, chế độ offline không cần server và mạng P2P.
- Với thư viện chuẩn, có thể dễ dàng thêm các tính năng này vào ứng dụng web và trình duyệt hiện có.
- Có thể xem thêm chi tiết trong bản thảo Internet của IETF.
Sử dụng giao thức Braid
- Braid tương thích với web hiện tại, hoạt động trên các trình duyệt hiện nay và có thể dễ dàng thêm vào các ứng dụng web hiện có.
- Có thư viện cho nhiều ngôn ngữ khác nhau:
- Javascript: braid-http, braid-protocol
- Haskell: wai-braid
- Lua: đang được Paul Kulchenko phát triển
- Trên Chrome, có thể sử dụng các tính năng của Braid thông qua tiện ích mở rộng Braid-Chrome.
Mô hình đồng bộ hóa của Braid
- Triển khai giao thức:
- braid-http
- braid-protocol
- wai-braid
- Tiện ích mở rộng trình duyệt:
- Thư viện trừu tượng hóa trạng thái:
- Braid-Text (cho văn bản)
- Redwood
- Statebus
- Statecraft
- Thuật toán:
- Diamond Types: CRDT văn bản nhanh nhất thế giới
- Antimatter: CRDT văn bản đầu tiên trên thế giới có khả năng cắt tỉa lịch sử
- Sync9: CRDT+OT cho văn bản và JSON
- SyncX: Sync9
- Shelf: JSON CRDT rất đơn giản và hữu ích
- Diffsync: CRDT+OT sử dụng hợp nhất đệ quy 3 chiều
- Tiny-Merge: thư viện được thiết kế tốt cho CRDT thực dụng
- CR-SQLite: biến SQLite thành một CRDT rất hữu ích
- Portals: thao tác sao chép, di chuyển và bao bọc cho mọi OT hoặc CRDT
- Simpleton: client siêu nhẹ, rất đơn giản và nhanh cho mọi CRDT
- Khả năng tương thích:
- Tương thích với Automerge
- Tương thích với ShareDB và Sync9
Ứng dụng
- Chính website này
- Peery View: hệ thống danh tiếng P2P dựa trên Braid
- Quiet: chat P2P dùng torDT
- Wiki
Cùng làm việc
- Đây là một nhóm mở.
- Cứ mỗi 2 tuần lại có một cuộc họp chung qua liên kết Zoom.
- Nhóm demo các tiến triển mới, thảo luận tiêu chuẩn và trao đổi về cách tiếp cận để xây dựng web phân tán.
- Các cuộc họp giữa kỳ về chủ đề chuyên biệt cũng được bổ sung vào lịch một cách định kỳ.
Cách tạo ra tiêu chuẩn
- Làm việc công khai tại IETF.
- Thảo luận đặc tả trên các mailing list của Braid và HTTP.
- Có thể chỉnh sửa đặc tả Braid trên Github.
- Nếu có vấn đề, có thể gửi file lên Github.
- Nếu có ý tưởng, có thể viết vào đặc tả và tạo Pull Request.
- Khi đạt được đồng thuận rộng rãi, Pull Request sẽ được chấp nhận.
- Để cập nhật thảo luận mới nhất về tiêu chuẩn, có thể đăng ký mailing list và theo dõi Github.
- Nếu cần trợ giúp, có thể gửi email cho Michael Toomim để nhận hỗ trợ.
Giao thức Braid
- Giao thức Braid cho phép nhiều thuật toán đồng bộ hóa tương tác với nhau thông qua một giao thức mạng chung.
- Các công cụ đồng bộ hóa ngày nay dùng những giao thức khác nhau, nhưng thông điệp mạng của chúng đều truyền các bản vá trong không gian trải dài theo phiên bản của thời gian, vị trí trong không gian và phạm vi của thời gian.
- Cấu trúc của tập hợp các bản vá tạo thành một cấu trúc toán học gọi là braid.
- Giao thức Braid là định dạng thông điệp tiêu chuẩn để mọi công cụ đồng bộ hóa có thể biểu diễn thay đổi theo thời gian và giải quyết về trạng thái nhất quán.
- Demo tương tác để khám phá mô hình dữ liệu:
- Tương tác với braid
- Tạo braid ngẫu nhiên
- Nếu quan tâm đến việc đồng bộ hóa qua HTTP, có thể xem đặc tả giao thức và đưa ý kiến trên mailing list.
Lộ trình giao thức
- Đặc tả Braid hiện tại mở rộng HTTP theo hai chiều đồng bộ hóa:
- Cấp 0: HTTP ngày nay
- Cấp 1: đăng ký với cập nhật push
- Cấp 2: tính nhất quán P2P (patch, version, merge)
- Ngoài ra, nhóm cũng đang thử nghiệm nguyên mẫu cho các tính năng P2P sau nhưng chưa tiêu chuẩn hóa:
- Cấp 3: ngữ nghĩa P2P (method, validation, acknowledgement)
- Cấp 4: truyền tải P2P (URL, naming, encryption, routing)
- Phần giải thích có thể tham khảo bài trình bày của Mike tại meeting-2.
- Hoan nghênh hợp tác ở cả bốn lĩnh vực.
Braid giúp các công cụ đồng bộ hóa có thể tương tác
- Rafie Walker dùng giao thức Braid để đồng bộ hóa hệ thống OT và CRDT.
- Có một babelfish trên websocket để chuyển đổi thông điệp mạng của ShareDB sang thông điệp Braid và ngược lại.
- Babelfish giữa ShareDB và Sync9:
- Có thể thử trực tiếp.
- Cảm ơn Seph Gentle vì đã cung cấp góc nhìn sâu sắc về giao thức ShareDB.
- Babelfish này phần lớn đã hoàn thiện, nhưng không xử lý trường hợp hai công cụ đồng bộ hóa giải quyết xung đột theo thứ tự sắp xếp khác nhau.
- Để làm được điều đó, cần triển khai cùng một merge type (xem đặc tả giao thức).
- Thiết kế babelfish cho Automerge, một hệ thống CRDT, cũng đã bắt đầu.
- Nếu bạn có một công cụ đồng bộ hóa, có thể cùng hợp tác để phát triển lớp tương thích Braid.
Tại sao là "Braid"?
- Braid bổ sung khả năng du hành thời gian lịch sử cho web, giống như game Braid.
- Nó xoắn các sợi của World Wide Web lại với nhau để làm web dày hơn, mạnh hơn và vững chắc hơn.
- Nó đan kết nhiều góc nhìn về công nghệ đồng bộ hóa và phân tán trong các tiêu chuẩn web.
- Braid là một cấu trúc toán học đồng thời cũng là cấu trúc dữ liệu máy tính chứa thông tin cần thiết cho các công cụ đồng bộ hóa.
- Bằng cách biểu diễn các chỉnh sửa dưới dạng patch của braid, nhiều công cụ đồng bộ hóa có thể tương tác với nhau.
Ý kiến của GN⁺
- Giao thức Braid là một công cụ mạnh mẽ có thể hợp nhất nhiều thuật toán đồng bộ hóa khác nhau và có thể rất hữu ích trong việc duy trì tính nhất quán trong các hệ thống phân tán.
- Việc hỗ trợ cả CRDT và OT sẽ rất hữu ích cho các nhà phát triển ứng dụng cộng tác.
- Phần mở rộng Braid-HTTP có thể được tích hợp dễ dàng vào các ứng dụng web hiện có, nên sẽ không tạo ra rào cản lớn cho các nhà phát triển khi áp dụng công nghệ mới.
- Các cuộc họp mở của Braid khuyến khích sự tham gia của cộng đồng và tạo cơ hội tập hợp nhiều ý kiến để xây dựng tiêu chuẩn tốt hơn.
- Hỗ trợ nhiều ngôn ngữ giúp các nhà phát triển có thể dùng Braid bằng ngôn ngữ họ ưa thích, từ đó tạo môi trường để nhiều nhà phát triển tham gia hơn.
1 bình luận
Ý kiến trên Hacker News
Tóm tắt các bình luận trên Hacker News
Sắp ra mắt thư viện
braid-textmớisimpletonnên không có overhead lịch sử ở phía client.Không đưa số phiên bản vào URL
Ưu tiên dùng tiêu chuẩn hiện có thay vì mở rộng HTTP
PATCHcó thể phù hợp hơnpartial PUT.Có lợi cho hạ tầng phân tán
Khả năng hướng tới mục tiêu event streaming tổng quát hơn
So sánh với WebDAV
Câu hỏi về mục đích sử dụng
Liên kết liên quan
Có phải chỉ dành cho thời gian thực hay không
Đặc tính của HTTP