Transcript
00:00:00이것은 Juice.FS입니다. 고성능 오픈 소스 분산 파일 시스템으로, 클라우드 객체 스토리지의 무한한 확장성과 로컬 파일 시스템의 모든 기능 및 속도를 제공하도록 설계되었습니다.
00:00:14이번 영상에서는 Juice.FS를 살펴보고, 어떻게 작동하는지 알아본 뒤, Juice.FS를 사용하여 나만의 로컬 고성능 NAS(Network Attached Storage) 솔루션을 구축하는 방법을 보여드리겠습니다.
00:00:24정말 흥미로울 테니 바로 시작해보죠.
00:00:30S3, Google Cloud Storage, Backblaze B2와 같은 표준 객체 스토리지는 비용 효율성이 매우 뛰어나지만, 이를 사용하려면 일반적으로 기존 애플리케이션 워크플로를 깨뜨리는 특수 API나 도구가 필요합니다.
00:00:48Juice.FS는 투명한 추상화 계층 역할을 합니다.
00:00:51데이터와 메타데이터를 분리하여 원시 데이터 청크는 클라우드 제공업체에 직접 보내고, 파일 시스템 레이아웃, 권한, 디렉터리 구조는 Redis, Postgres, TIKV와 같은 빠른 데이터베이스 내에서 관리합니다.
00:01:07Juice.FS가 기존 클라우드 게이트웨이나 일반 네트워크 파일 공유와 완전히 다른 점은 이러한 엄격한 아키텍처 분리와 강력한 다중 계층 캐싱 엔진에 있습니다.
00:01:19애플리케이션이 파일에 접근할 때마다 지연 시간이 긴 클라우드 네트워크 요청을 기다리게 하는 대신,
00:01:26Juice.FS는 파일을 작고 최적화된 블록으로 나누고 로컬 NVMe 또는 SSD 파티션을 핫 스크래치 공간으로 활용합니다.
00:01:35애플리케이션이 처음 데이터를 읽거나 쓸 때는 네트워크를 통해 통신하지만, 두 번째로 요청할 때는 로컬 스토리지에서 하드웨어 라인 속도로 즉시 제공합니다.
00:01:47이를 통해 레거시 애플리케이션, 데이터베이스, 머신러닝 학습 파이프라인, 컨테이너 환경을 코드를 한 줄도 수정하지 않고 객체 스토리지 위에서 직접 실행할 수 있습니다.
00:01:59이론적으로는 훌륭하게 들리는데, 직접 테스트해서 어떻게 작동하는지 확인해 봅시다.
00:02:04이번 데모에서는 로컬 NAS를 설정할 예정이며, 모든 데이터는 원격 S3 버킷에 저장하고 메타데이터 엔진으로는 Redis를 사용하겠습니다.
00:02:16가장 먼저 해야 할 일은 Docker로 Redis 인스턴스를 실행하는 것인데, 이 명령어로 쉽게 할 수 있습니다.
00:02:24그다음 juice.FS format 명령어를 실행하여 파일 시스템을 초기화해야 합니다.
00:02:29이 단계는 데이터베이스와 스토리지 버킷을 매핑하는 방법을 Juice.FS에 정확히 알려줍니다.
00:02:34Redis 연결 문자열, AWS S3 버킷 이름, 클라우드 액세스 자격 증명을 전달합니다.
00:02:41하지만 이 명령어를 실행하기 전에 S3 버킷과 액세스 키, 비밀 키를 미리 생성해 두었는지 확인하세요.
00:02:48저는 미리 만들어 두었습니다.
00:02:50이제 이 명령어를 실행해도 Juice.FS는 아직 S3 버킷 내부의 내용을 바꾸지는 않습니다.
00:02:56Redis 내부에 스토리지 스키마를 구성하고 새로운 가상 파일 시스템에 고유한 UUID를 할당할 뿐입니다.
00:03:03포맷 단계가 완료되면 juice.FS mount 명령어를 사용하여 로컬 머신에 장치를 마운트합니다.
00:03:10Juice.FS에 Redis 인스턴스를 지정하고 로컬 디렉터리 경로를 제공합니다.
00:03:15제 경우에는 홈 디렉터리 안의 폴더입니다.
00:03:18실행하기 전에 중요한 주의 사항이 하나 있습니다.
00:03:21Mac은 기본적으로 사용자 지정 파일 시스템을 지원하지 않기 때문에, Mac Fuse라는 커널 확장 유틸리티를 먼저 설치해야 합니다.
00:03:30이것이 Juice.FS가 Mac 운영 체제와 통신하는 데 필요한 기반 소프트웨어 훅을 제공합니다.
00:03:37그리고 여유 공간 비율 플래그를 함께 설정하는데, 기본값이 전체 드라이브의 20%로 설정되어 있어 꽤 높은 편이기 때문입니다.
00:03:47기본적으로 이는 캐시를 호스팅하는 로컬 드라이브의 용량이 특정 비율 아래로 떨어지면,
00:03:55새로운 캐시 파일 쓰기를 중단하고 가장 오래되었거나 가장 적게 액세스한 블록부터 적극적으로 삭제하도록 합니다.
00:04:01이렇게 하면 로컬 운영 체제의 디스크 공간이 완전히 부족해지는 것을 방지할 수 있습니다.
00:04:05좋습니다.
00:04:06이제 이 명령어를 실행해 보죠.
00:04:07실행하는 즉시 운영 체제는 표준 POSIX 호환 파일 시스템 마운트를 등록합니다.
00:04:15컴퓨터 입장에서는 1테라바이트의 사용 가능한 공간을 가진 거대한 외장 하드 드라이브를 연결한 것처럼 보입니다.
00:04:23이제 외장 드라이브처럼 이 디렉터리로 파일을 쉽게 드래그할 수 있습니다.
00:04:28S3 버킷 대시보드로 이동하면, Juice.FS가 파일을 저장하고 데이터 청크로 분할한 것을 볼 수 있습니다.
00:04:37이 모든 작업이 백그라운드에서 이루어지므로 사용자가 직접 힘든 작업을 할 필요가 없습니다.
00:04:42캐싱이 어떻게 작동하는지 보여드리기 위해 고전적인 터미널 명령어 DD를 사용하여 파일 시스템을 벤치마킹하겠습니다.
00:04:49DD를 사용해 본 적이 없다면, 이는 원시 데이터 복사에 사용되는 내장 유틸리티입니다.
00:04:55이 명령어에서 'if'는 입력 파일인데, Juice.FS 드라이브에 추가한 대형 영상 파일 중 하나를 가리킵니다.
00:05:03'of'는 출력 파일입니다.
00:05:06데이터를 실제로 복사하는 것이 아니라 벤치마크를 수행하는 것이므로, 데이터를 즉시 폐기하는 운영 체제의 블랙홀인 dev/null로 라우팅합니다.
00:05:17이번 예제에서는 벤치마크만 수행하는 것입니다.
00:05:19또한 Juice.FS가 데이터를 청크로 나누는 방식에 맞춰 블록 크기를 4메가바이트로 설정합니다.
00:05:25마지막으로 파일 전송에 정확히 얼마가 걸리는지 확인하기 위해 전체 라인 앞에 'time' 유틸리티를 붙입니다.
00:05:32엔터를 누르면 파일이 막 업로드되었기 때문에 '콜드 리드(Cold Read)'라고 불리는 과정이 시작됩니다.
00:05:38로컬 머신에는 아직 파일 복사본이 없기 때문입니다.
00:05:41그래서 Juice.FS는 인터넷을 통해 S3 버킷으로 접속하여 4메가바이트 데이터 청크를 하나씩 가져와 스트리밍해야 합니다.
00:05:50보시다시피 제 연결 환경에서는 첫 번째 실행에 상당히 오랜 시간이 걸립니다.
00:05:55하지만 같은 명령어를 두 번째로 실행할 때 무슨 일이 일어나는지 보세요.
00:05:59짠.
00:06:00여기 있습니다.
00:06:01터미널 프롬프트가 거의 즉시 반환됩니다.
00:06:03두 번째 실행은 1초도 걸리지 않았습니다. 이제 캐시에 저장되어 유기적으로 읽어오고 있기 때문입니다.
00:06:10이것이 바로 다중 계층 캐싱 엔진이 실제로 작동하는 방식입니다.
00:06:14Juice.FS는 첫 번째 실행 중에 청크를 다운로드하면서 조용히 로컬 NVMe 스크래치 디스크에 복사하고 있었습니다.
00:06:22하지만 두 번째 단계에서는 인터넷을 완전히 우회하여 로컬 하드웨어 라인 속도로 데이터를 직접 가져옵니다.
00:06:29즉, 클라우드의 무한하고 저렴한 저장 용량과 로컬 드라이브의 제로 지연 속도를 모두 누릴 수 있는 것입니다.
00:06:37이 데모에서는 영상 파일을 사용하여 기능을 보여드렸지만, 이는 거의 모든 실제 인프라 시나리오에 적용됩니다.
00:06:45컨테이너 환경을 관리하는 DevOps 엔지니어라면 Juice.FS를 사용하여 Kubernetes 클러스터 전반에 공유 영구 스토리지를 제공할 수 있습니다.
00:06:54모든 노드에 비싼 클라우드 블록 스토리지를 구매할 필요 없이, 모든 파드가 동일한 Juice.FS 볼륨을 동시에 마운트할 수 있습니다.
00:07:03설정 파일, 애플리케이션 자산, 사용자 업로드 파일을 전역적으로 공유하면서 비용은 매우 낮게 유지할 수 있습니다.
00:07:10또한 머신러닝과 데이터 과학 파이프라인에도 엄청난 이점이 있습니다.
00:07:14S3 버킷에 수백 기가바이트의 학습 이미지나 텍스트 데이터셋이 있을 때, ML 모델을 학습시키려면 일반적으로 전체 데이터셋을 먼저 로컬로 다운로드해야 하는데, 이는 시간과 저장 공간을 낭비하게 합니다.
00:07:30하지만 Juice.FS를 사용하면 학습 스크립트가 즉시 실행되기 시작합니다.
00:07:35파이프라인은 마운트를 통해 데이터를 순차적으로 읽고, Juice.FS는 백그라운드에서 고처리량 스트리밍과 로컬 캐싱을 처리하여 로컬 스토리지 병목 현상 없이 GPU를 완전히 활용하게 합니다.
00:07:49하나 더 보여드리고 싶은 멋진 기능이 있습니다.
00:07:51Better Stack을 사용하여 파일 시스템에 쉽게 메트릭을 연동할 수 있습니다.
00:07:55Juice.FS 볼륨을 마운트할 때마다 백그라운드에서 로컬 Prometheus 호환 메트릭 서버가 조용히 실행됩니다.
00:08:03브라우저에서 해당 URL로 이동하면 모든 메트릭을 일반 텍스트로 볼 수 있으며, 각 캐시 적중, 읽기 시간, S3 요청 오류가 실시간으로 추적됩니다.
00:08:13이 원격 측정 데이터를 대시보드로 직접 보내기 위해 Better Stack의 기본 Prometheus 스크래핑 기능을 사용할 수 있습니다.
00:08:21먼저 소스로 이동하여 Juice.FS를 소스로 연결해야 합니다.
00:08:25메트릭 탭에서 Prometheus 스크래프를 선택하고 소스 연결을 클릭하세요.
00:08:31이제 로그를 수집해야 합니다.
00:08:33그 전에 ngrok과 같은 도구를 사용하여 로컬 메트릭 포트에 대한 안전한 공개 터널을 열고 ngrok URL을 붙여넣어야 합니다.
00:08:43하지만 ngrok에서 작동하게 하려면 고급 옵션으로 이동하여 'ngrok-skip-browser-warning'이라는 사용자 지정 HTTP 헤더를 추가하고 true로 설정해야 합니다.
00:08:53이것이 ngrok에 경고 페이지를 완전히 우회하라고 지시하여 Better Stack이 몇 초마다 원시 메트릭을 안전하게 스크래핑할 수 있게 합니다.
00:09:01이제 메트릭이 자동으로 수집되기 시작할 것입니다.
00:09:05가장 멋진 부분을 보여드리겠습니다.
00:09:07이제 Better Stack의 AI SRE로 이동하여 AI SRE에게 캐시 성능이나 지연 시간, 시스템 처리량을 모니터링하는 대시보드를 만들어 달라고 요청할 수 있습니다.
00:09:19몇 초 안에 AI SRE가 Juice.FS에서 들어오는 모든 메트릭을 포함한 멋진 맞춤형 대시보드를 제작해 줄 것입니다.
00:09:27실시간으로 업데이트되는 것도 확인할 수 있습니다.
00:09:32정말 멋지지 않나요?
00:09:34이 작은 데모를 통해 Juice.FS가 최신 인프라 모니터링과 결합되었을 때 얼마나 강력한지 보여드렸기를 바랍니다.
00:09:41저렴한 표준 클라우드 스토리지 버킷을 하드웨어 라인 속도로 작동하는 무한 확장 가능한 로컬 드라이브로 바꾸고, 완전 자동화된 관찰 대시보드에 단 몇 분 만에 연결했습니다.
00:09:57자, 여기까지입니다.
00:09:58이것이 바로 Juice.FS의 핵심입니다.
00:10:00Juice.FS에 대해 어떻게 생각하시나요?
00:10:02써보셨나요?
00:10:03앞으로 사용하실 건가요?
00:10:04아래 댓글 섹션에 알려주세요.
00:10:06이런 기술적인 분석 영상이 마음에 드셨다면 영상 아래의 좋아요 버튼을 눌러주세요.
00:10:12그리고 저희 채널 구독도 잊지 마시고요.
00:10:15Better Stack의 Andrus였고, 다음 영상에서 뵙겠습니다.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video