GN⁺: Braid: HTTP 동기화 기술
(braid.org)- Braid는 상호운용 가능한 상태 동기화를 위한 알고리듬, 애플리케이션, 도구 및 표준을 만드는 오픈 작업 그룹임.
- 목표는 네트워크 컴퓨팅 시스템 전반에서 분산 상태를 로컬 변수처럼 쉽게 읽고 쓸 수 있도록 하는 것임.
- 매 2주마다 오픈 미팅을 통해 애플리케이션 및 시스템 요구사항을 논의하고, 공통점을 식별하며, 공유 프로토콜에 대한 합의를 찾음.
Braid-HTTP: HTTP를 위한 동기화
- Braid-HTTP는 HTTP를 상태 전송에서 상태 동기화 프로토콜로 일반화하는 확장임.
- HTTP에 다음 기능을 추가함:
- HTTP 리소스 버전 관리
- GET 요청에 대한 구독(Subscription)
- Range 요청에 대한 PATCH
- OT 또는 CRDT 동작을 지정하는 Merge-Type
- 이러한 기능을 통해 웹 리소스는 여러 클라이언트, 서버 및 프록시 간에 자동으로 동기화되고, 여러 작성자가 임의의 네트워크 지연 및 분할 하에서도 일관성을 보장하며 동시에 편집할 수 있음.
- 웹 애플리케이션은 Braid 확장을 사용하여 협업 편집, 서버리스 오프라인 모드 및 P2P 네트워킹을 제공할 수 있음.
- 표준 라이브러리를 사용하면 기존 웹 애플리케이션 및 브라우저에 이러한 기능을 쉽게 추가할 수 있음.
- 자세한 내용은 IETF 인터넷 초안에서 확인할 수 있음.
Braid 프로토콜 사용하기
- Braid는 현재의 웹과 호환되며, 현재의 브라우저에서 작동하고, 기존 웹 애플리케이션에 쉽게 추가할 수 있음.
- 다양한 언어에 대한 라이브러리가 있음:
- Javascript: braid-http, braid-protocol
- Haskell: wai-braid
- Lua: Paul Kulchenko가 개발 중
- Chrome에서는 Braid-Chrome 확장을 사용하여 Braid 기능을 사용할 수 있음.
Braid 동기화 모델
-
프로토콜 구현:
- braid-http
- braid-protocol
- wai-braid
-
브라우저 확장:
- Braid-Chrome
-
상태 추상화 라이브러리:
- Braid-Text (텍스트용)
- Redwood
- Statebus
- Statecraft
-
알고리듬:
- Diamond Types: 세계에서 가장 빠른 텍스트 CRDT
- Antimatter: 세계 최초의 히스토리 프루닝 텍스트 CRDT
- Sync9: 텍스트 및 JSON을 위한 CRDT+OT
- SyncX: Sync9
- Shelf: 매우 간단하고 유용한 JSON CRDT
- Diffsync: 재귀적 3방향 병합을 사용하는 CRDT+OT
- Tiny-Merge: 실용적인 CRDT의 잘 설계된 라이브러리
- CR-SQLite: SQLite를 매우 유용한 CRDT로 변환
- Portals: 모든 OT 또는 CRDT에 대한 복사, 이동 및 랩 작업
- Simpleton: 모든 CRDT에 대한 매우 간단하고 빠른 경량 클라이언트
-
호환성:
- Automerge 호환성
- ShareDB 및 Sync9 호환성
애플리케이션
- 이 웹사이트 자체
- Peery View: Braid 기반 P2P 평판 시스템
- Quiet: torDT를 사용한 P2P 채팅
- Wiki
함께 일하기
- 오픈 그룹임.
- 매 2주마다 Zoom 링크에서 일반 회의를 가짐.
- 새로운 진행 상황을 데모하고, 표준을 논의하며, 분산 웹 구축 접근 방식을 논의함.
- 특별 주제에 대한 중간 회의도 주기적으로 일정에 추가됨.
표준 만드는 방법
- IETF에서 공개적으로 작업함.
- Braid 및 HTTP 메일링 리스트에서 사양을 논의함.
- Github에서 Braid 사양을 편집할 수 있음.
- 문제가 있으면 Github에 파일을 제출할 수 있음.
- 아이디어가 있으면 사양에 작성하고 Pull Request를 발행할 수 있음.
- 거친 합의에 도달하면 Pull Request가 수락됨.
- 표준 논의에 대한 최신 정보를 얻으려면 메일링 리스트를 구독하고 Github를 클릭할 수 있음.
- 도움이 필요하면 Michael Toomim에게 이메일을 보내면 도움을 받을 수 있음.
Braid 프로토콜
- Braid 프로토콜은 여러 동기화 알고리듬이 공통 네트워크 프로토콜을 통해 상호 운용할 수 있도록 함.
- 오늘날의 동기화 장치들은 서로 다른 프로토콜을 사용하지만, 그들의 네트워크 메시지는 시간의 버전, 공간의 위치 및 시간의 범위에 걸친 공간의 패치를 전달함.
- 패치 집합의 구성은 수학적 구조인 브레이드를 형성함.
- Braid 프로토콜은 모든 동기화 장치가 시간의 변화를 표현하고 일관된 상태로 해결할 수 있는 표준 메시지 형식임.
- 데이터 모델을 탐색할 수 있는 인터랙티브 데모:
- 브레이드와 상호작용하기
- 랜덤 브레이드 생성하기
- HTTP를 통한 동기화에 관심이 있다면 프로토콜 사양을 검토하고 메일링 리스트에 의견을 제공할 수 있음.
프로토콜 로드맵
- 현재 Braid 사양은 HTTP를 두 가지 동기화 차원으로 확장함:
- 레벨 0: 오늘날의 HTTP
- 레벨 1: 푸시 업데이트가 있는 구독
- 레벨 2: P2P 일관성 (패치, 버전, 병합)
- 또한 다음 P2P 기능을 프로토타이핑 중이지만 아직 표준화되지 않음:
- 레벨 3: P2P 의미론 (메서드, 검증, 확인)
- 레벨 4: P2P 전송 (URL, 명명, 암호화, 라우팅)
- 설명은 meeting-2에서 Mike의 발표를 참조할 수 있음.
- 네 가지 모든 영역에서 협력을 환영함.
Braid가 동기화 장치를 상호 운용 가능하게 함
- Rafie Walker는 Braid 프로토콜을 사용하여 OT 시스템과 CRDT를 동기화함.
- 웹소켓에 바벨피쉬가 있어 ShareDB의 네트워크 메시지를 Braid 메시지로 변환하고 그 반대도 가능함.
-
ShareDB와 Sync9 간의 바벨피쉬:
- 라이브로 시도해볼 수 있음.
- ShareDB 프로토콜에 대한 통찰력을 제공한 Seph Gentle에게 감사함.
- 이 바벨피쉬는 대부분 완성되었지만, 두 동기화 장치가 다른 정렬 순서로 충돌을 해결하는 경우를 처리하지 않음.
- 이를 위해 동일한 병합 유형을 구현해야 함 (프로토콜 사양 참조).
- Automerge, CRDT 시스템을 위한 바벨피쉬 설계도 시작함.
- 동기화 장치가 있다면 Braid 호환성 레이어를 개발하기 위해 함께 작업할 수 있음.
왜 "Braid"인가?
- Braid는 비디오 게임 Braid처럼 웹에 역사적 시간 여행을 추가함.
- 월드 와이드 웹의 각 가닥을 꼬아 웹을 더 두껍고 강력하며 견고하게 만듦.
- 웹 표준에서 동기화 및 분산 기술에 대한 여러 관점을 함께 엮음.
- 브레이드는 동기화 장치에 필요한 정보를 포함하는 수학적 구조이자 컴퓨터 데이터 구조임.
- 편집을 브레이드의 패치로 표현함으로써 여러 동기화 장치가 상호 운용할 수 있게 함.
GN⁺의 의견
- Braid 프로토콜은 다양한 동기화 알고리즘을 통합할 수 있는 강력한 도구로, 분산 시스템에서 일관성을 유지하는 데 큰 도움이 될 수 있음.
- CRDT와 OT를 모두 지원하는 점은 협업 애플리케이션 개발자에게 매우 유용할 것임.
- Braid-HTTP의 확장은 기존 웹 애플리케이션에 쉽게 통합할 수 있어, 개발자들이 새로운 기술을 도입하는 데 큰 장벽이 없을 것임.
- Braid의 오픈 미팅은 커뮤니티 참여를 장려하고, 다양한 의견을 수렴하여 더 나은 표준을 만들 수 있는 기회를 제공함.
- 다양한 언어 지원은 개발자들이 자신이 선호하는 언어로 Braid를 사용할 수 있게 하여, 더 많은 개발자들이 참여할 수 있는 환경을 조성함.
Hacker News 의견
해커뉴스 댓글 모음 요약
-
새로운 braid-text 라이브러리 출시 예정
- 웹 앱에 협업 편집 기능을 쉽게 추가할 수 있는 라이브러리 소개.
- Node.js 앱에 간단히 추가 가능하며, WebSocket이 필요 없음.
-
simpleton
병합 타입을 사용하여 클라이언트의 히스토리 오버헤드가 없음. - Braid-Chrome 확장을 통해 버전 히스토리 확인 가능.
-
URL에 버전 번호 포함 안 함
- URL에 버전 번호가 포함되지 않고, 별도의 헤더로 전송됨.
- 특정 버전에 링크하기 어려움.
- 동기화가 HTTP와 밀접하게 연결되어야 하는지 의문.
-
HTTP 확장 대신 기존 표준 사용 선호
- HTTP를 확장하기보다는 기존 표준을 사용하는 것이 더 나을 수 있음.
-
partial PUT
대신PATCH
사용이 더 적절할 수 있음.
-
분산 인프라에 유리
- Braid가 클라우드 없이도 기기 간 상태 동기화 비용을 낮출 수 있음.
- 탈중앙화된 인프라에 유리함.
-
일반적인 이벤트 스트리밍 목표 가능성
- 개별 리소스 변경 구독 가능.
- 더 일반적인 이벤트 스트리밍 목표 가능성에 대한 질문.
-
WebDAV와의 비교
- WebDAV와 유사하지만 더 강력한 기능 제공.
- HTTP 위에 계층을 쌓는 것이 더 나을 수 있음.
-
사용 용도에 대한 질문
- 이 라이브러리를 어디에 사용할 수 있는지에 대한 질문.
- 사용 사례가 명확하지 않음.
-
관련 링크
- Braid: Synchronization for HTTP 관련 링크 제공.
-
실시간 전용 여부
- 실시간 전용인지, 히스토리 정리 기능이 있는지에 대한 질문.
- 클라이언트가 드물게 연결되는 경우에 대한 우려.
-
HTTP의 특성
- HTTP는 요청-응답 프로토콜로 상태 전송을 다루지 않음.
- Braid-HTTP가 상태 동기화 프로토콜로 확장된다는 설명이 이상함.