
Fly.io는 Sprites의 저장소를 자체 파일시스템에서 Sprites Block Device(SBD)로 교체한다. SBD는 객체 저장소의 데이터를 리눅스 커널에 블록 장치로 제공하며, Fly.io는 자체 테스트에서 기존 방식보다 신뢰성이 크게 높아졌다고 밝혔다.
기존 방식은 JuiceFS를 수정해 사용했다. 객체 저장소의 데이터와 이를 설명하는 메타데이터 데이터베이스를 별도로 관리하고, 체크포인트 정보도 별도 데이터베이스에 기록했다. 각 구성 요소가 따로 저장되면서 서로 일치하지 않을 수 있었다. JuiceFS의 쓰기 되돌림 모드에서는 메타데이터에 청크를 먼저 기록한 뒤 데이터를 업로드했기 때문에, 두 단계 사이에 머신이 종료되면 존재하지 않는 청크를 가리킬 수 있었다. 이런 경우 파일시스템이 읽기 전용으로 전환될 수 있고, 체크포인트도 청크를 공유해 복원에 도움이 되지 않을 수 있었다.
SBD는 버킷의 데이터를 NBD를 통해 블록 장치처럼 리눅스 커널에 제공한다. Sprite는 이 장치를 ext4로 포맷해 마운트한다. 데이터 블록과 이를 설명하는 메타데이터가 같은 버킷에 저장되며, Sprite 내부의 sbd serve 데몬이 로컬 캐시에서 읽기·쓰기를 처리하고 변경된 블록을 백그라운드에서 객체 저장소로 올린다. 데이터가 저장소에 기록됐다는 보장이 필요할 때는 쓰기를 강제로 반영한다.
체크포인트는 볼륨 전체의 블록 스냅샷으로 기록된다. 복원할 때는 파일시스템을 마운트 해제하고 볼륨을 체크포인트 버전으로 되돌린 뒤 다시 마운트한다. Fly.io는 복원 비용이 재시작과 비슷하다고 설명한다. SBD는 객체 저장소에서 읽어온 각 블록을 기록 당시의 값과 대조하며, SBD가 종료되면 신뢰할 수 있는 디스크 상태로 돌아가기 위해 Sprite 전체를 재시작한다.
Fly.io는 반복적인 쓰기·체크포인트·절전·깨우기·복원 테스트를 수행하는 도구로 JuiceFS 기반 Sprite 400개를 약 5,000회 시험했다. 회사는 일부 Sprite가 체크포인트 기능을 영구적으로 잃었다고 전했으며, 개척 단계의 설계 파트너 의견과 추가 테스트를 바탕으로 SBD가 자체 제작 파일시스템보다 훨씬 신뢰성이 높다고 밝혔다.
10/6 이전에 만든 Sprite는 저장소 업그레이드 안내에 따라 마이그레이션할 수 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요