Data Safety

골덕·2024년 11월 26일
  • 클라이언트 A가 데이터를 쓰면, 클라이언트 B는 변경된 데이터를 곧바로 읽을 수 있어야 함.

    • 여러 클라이언트가 동시에 작업(다중 쓰기)하거나, 읽기와 쓰기를 섞어서 사용하는 경우 실시간 데이터 일관성이 필요.
    • 이러한 일관성을 위한 동기화는 공유 스토리지에서나 가능하다!!
  • Synchronization과 Safety를 분리

  1. 라이언트 A가 데이터를 /shared_data에 씀.
    • 공유 스토리지의 Primary OSD가 데이터를 받고, 복제본 포함 모든 osd의 in-memory buffer cache에 update apply가 완료 되면, 즉시 클라이언트 A에 우선 쓰기 성공 응답(acknowledgment).
    • 이 시점에서 클라이언트 B는 새로운 데이터를 읽을 수 있음(Synchronization).
    • 만약 모든 osd가 다죽어버리면 데이터 loss이기 때문에, 이 경우를 대비하여 디스크 커밋 전까진 client에서 업데이트 요청에 대한 버퍼링을 해둠
    • 장애 발생시, 새로운 업데이트를 잠시 허용하지 않고, 버퍼링해둔 업데이트 요청을 replay함으로서 recovery 진행
profile
다시 시작하는 개발자

0개의 댓글