오브젝트 스토리지와 S3 · SeaweedFS — 작은 파일이 많을 때의 선택 · 실습
같은 워크로드를 두 스토리지에 넣고 비교하기
목표
동일한 코퍼스를 파일시스템, S3 호환 스토리지, SeaweedFS 세 곳에 넣고 개수·시간·지연을 직접 재어, 스토리지 선택을 취향이 아니라 숫자로 하는 법을 익힌다.
왜 중요한가
스토리지 선택은 벤치마크 표를 옮겨 적는 것으로 결정되지 않습니다. 같은 제품이 워크로드에 따라 최선이 되기도 하고 최악이 되기도 하기 때문입니다. 4KiB 파일 2,000개에서 갈리는 차이가 200MiB 파일 하나에서는 사라지고, 그 반대도 있습니다. 이 실습은 그 사실을 스스로 측정해 확인하게 합니다. 특히 4번 스텝에서 파일 2,000개가 볼륨 파일 몇 개에 담기는지를 직접 세어 보면, "소파일에 강하다"는 문장이 구체적인 구조 이야기로 바뀝니다. 마지막 결정표는 나중에 실제 선택을 할 때 그대로 꺼내 쓸 수 있는 형태로 만듭니다.
단계
1. /root/cmp/corpus/ 아래에 4096바이트 파일 2,000개를 만든다. 이름은 f0000.bin 부터 f1999.bin 이다.
2. /root/cmp/fs.txt 에 files=2000, data_bytes=8192000, disk_kb=<du -sk 결과> 세 줄을 적는다. disk_kb 는 데이터 크기보다 커야 한다.
3. 버킷 lab-cmp 를 만들어 코퍼스를 통째로 올리고 /root/cmp/s3.txt 에 objects=2000 seconds=<소수> 를 적는다.
4. 같은 코퍼스를 SeaweedFS 파일러의 /cmp/ 아래에 넣고 /root/cmp/sw.txt 에 files=2000 dat_files=<n> seconds=<소수> 를 적는다. dat_files 는 20 이하여야 한다.
5. 무작위 100개를 각 저장소에서 읽어 /root/cmp/latency.csv 에 store,avg_ms 헤더와 fs, s3, seaweedfs 세 행을 적는다.
6. 200MiB 파일 하나를 세 저장소에 넣고 읽어 /root/cmp/bigfile.csv 에 store,put_ms,get_ms 헤더와 세 행을 적는다.
7. /root/cmp/decision.md 에 마크다운 표를 쓴다. 행 제목은 소파일 대량, 대용량 소수, S3 API 필요, 운영 인력 네 개이고 추천 열이 있어야 한다.
참고
- 파일 생성:
dd if=/dev/urandom of=f0000.bin bs=4096 count=1또는 python 반복문 - 디스크 사용량:
du -sk /root/cmp/corpus - 시간 측정:
date +%s.%N앞뒤 차이 또는time - 흔한 실수 1: 세 저장소에 서로 다른 데이터를 넣고 비교하는 것.
- 흔한 실수 2: 캐시가 데워진 상태와 차가운 상태를 섞어 재는 것 — 순서를 일정하게 하세요.
단계 7개
- 비교용 코퍼스 만들기
- 파일시스템에 넣고 메타데이터 비용 재기
- S3 에 넣고 소요 시간 재기
- SeaweedFS 에 넣고 볼륨 파일 수 재기
- 무작위 읽기 지연 비교하기
- 큰 파일 하나로도 같은 비교 하기
- 선택 기준표 쓰기