12P by neo 20일전 | favorite | 댓글 1개
  • 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가 상태 동기화 프로토콜로 확장된다는 설명이 이상함.