Cloud Storage FUSE

Cloud Storage FUSE는 Cloud Storage 버킷을 Linux 또는 macOS 시스템에 파일 시스템으로 마운트할 수 있는 오픈소스 FUSE 어댑터입니다. 또한 애플리케이션에서 표준 파일 시스템 시맨틱스를 사용하여 Cloud Storage 객체를 업로드 및 다운로드하는 수단을 제공합니다. Google Compute Engine VM 또는 온프레미스 시스템1을 포함하여 Cloud Storage와 연결된 모든 위치에서 Cloud Storage FUSE를 실행할 수 있습니다.

Cloud Storage FUSE는 Google에서 개발하고 커뮤니티가 지원하는 오픈소스 도구로서 Go로 작성되었으며 GitHub에 호스팅됩니다. Cloud Storage FUSE에는 Apache 라이선스만 적용되며 다른 조건들은 관련이 없습니다. 이 도구는 어떠한 형태의 보증 없이 있는 그대로 배포됩니다. 지원은 커뮤니티를 통해 제공되며 Server Fault에서 google-cloud-platformgcsfuse 태그를 사용하면 됩니다. 이전 질문과 대답에서 문제에 대한 답변이 있는지 먼저 확인하세요.

기술 개요

Cloud Storage FUSE는 객체 저장소 이름을 파일 및 디렉토리 시스템으로 번역하여 작동합니다. 이때 객체 이름의 '/' 문자는 디렉토리 구분 기호로 해석되므로 동일한 공통 프리픽스를 가진 객체는 같은 디렉토리에 있는 파일로 취급됩니다. 애플리케이션은 단순 파일 시스템과 같이 마운트된 버킷 파일과 상호작용하므로, 클라우드에서 거의 제한이 없이 파일 저장소를 실행할 수 있습니다.

Cloud Storage FUSE에 파일 시스템 인터페이스가 있기는 하지만 백엔드의 NFS 또는 CIFS 파일 시스템과는 다릅니다. Cloud Storage FUSE는 Cloud Storage의 기본적인 특징을 그대로 유지하여 크기와 집계 성능 측면에서 Cloud Storage의 확장성을 보존하는 동시에 동일한 지연 시간과 단일 객체 성능을 유지합니다. 다른 액세스 방법과 마찬가지로 Cloud Storage는 동시 실행과 잠금을 지원하지 않습니다. 예를 들어 여러 Cloud Storage FUSE 클라이언트가 같은 파일에 쓰는 경우 마지막 쓰기 작업이 적용됩니다.

Cloud Storage FUSE 사용 또는 문제 제출에 대한 자세한 내용은 Google Cloud Platform GitHub 저장소를 참조하세요. 저장소에서 README, 시맨틱스, 설치, 마운트를 검토하세요.

Cloud Storage FUSE 사용

Cloud Storage FUSE 설치와 작업에 대한 자세한 내용은 GoogleCloudPlatform/gcsfuse GitHub 저장소에서 설명합니다. 다음 단계에서는 Cloud Storage FUSE를 양방향으로 사용하는 방법, 즉 버킷을 수동으로 마운트하는 방법을 간략하게 설명합니다.

  1. 안내에 따라 Cloud Storage FUSE와 종속 항목을 설치합니다.

  2. Cloud Storage FUSE의 사용자 인증 정보를 설정합니다.

    Cloud Storage FUSE가 애플리케이션 기본 사용자 인증 정보를 바탕으로 사용자 인증 정보를 자동으로 찾습니다.

    1. storage-full 범위를 구성하여 Google Compute Engine 인스턴스에서 실행하는 경우 Cloud Storage FUSE가 Compute Engine 기본 제공 서비스 계정을 사용할 수 있습니다. 자세한 내용은 애플리케이션에서 서비스 계정 사용을 참조하세요.

    2. Google Cloud SDK를 설치하고 gcloud auth application-default login을 실행한 경우 Cloud Storage FUSE가 이러한 사용자 인증 정보를 사용할 수 있습니다.

    3. 환경 변수 GOOGLE_APPLICATION_CREDENTIALS를 서비스 계정의 JSON 키 파일 경로로 설정하면 Cloud Storage FUSE가 이 사용자 인증 정보를 사용합니다. Google Cloud Platform Console을 사용하여 서비스 계정용 JSON 키 파일을 만드는 방법에 대한 자세한 내용은 서비스 계정 키 만들기를 참조하세요.

    사용자 인증 정보 유형이 두 가지 이상 지정된 경우 애플리케이션 기본 사용자 인증 정보 작동 방식에서 사용자 인증 정보가 사용되는 순서를 알아보세요.

  3. 디렉터리를 만듭니다.

    $ mkdir /path/to/mount
    
  4. 아직 마운트할 버킷이 없는 경우 Google Cloud Platform Console을 사용하여 버킷을 만듭니다.

  5. Cloud Storage FUSE를 사용하여 버킷을 마운트합니다(예: example-bucket).

    $ gcsfuse example-bucket /path/to/mount
    
  6. 마운트된 버킷으로 작업을 시작합니다.

    $ ls /path/to/mount
    

POSIX 파일 시스템과의 주요 차이점

Cloud Storage FUSE는 I/O 코드를 다시 쓸 필요 없이 파일 기반 애플리케이션이 Cloud Storage를 사용할 수 있게 하므로, 이를 통해 Cloud Storage를 보다 효과적으로 빠르게 사용할 수 있습니다. 이 도구는 Cloud Storage가 애플리케이션에 적합한 성능과 확장성 특성을 갖고 있지만 파일 시스템 시맨틱스만 없는 상황에서 이상적입니다. Cloud Storage FUSE가 적합한 솔루션인지 결정할 때는 로컬 파일 시스템과 비교해 몇 가지 추가적인 차이점을 고려해야 합니다.

가격 책정: Cloud Storage FUSE에 액세스하는 것은 결국 Cloud Storage에 액세스하는 것입니다. Cloud Storage FUSE가 수행하는 모든 데이터 전송과 작업은 Cloud Storage 전송과 작업에 매핑되며 그에 따라 요금이 청구됩니다. Cloud Storage FUSE를 사용하기 전에 아래 가격 책정 섹션을 참조하세요.

성능: Cloud Storage FUSE는 로컬 파일 시스템에 비해 지연 시간이 훨씬 깁니다. 따라서 작은 파일을 한 번에 하나씩 읽거나 쓰는 경우 처리량이 줄어들 수 있습니다. 큰 파일을 사용하거나 여러 파일을 한 번에 전송하면 처리량이 증가할 수 있습니다.

  • 개별 I/O 스트림은 gsutil과 비슷한 속도로 실행됩니다.
  • gsutil rsync 명령어는 파일을 한 번에 하나씩 읽고 쓰므로 특히 지연 시간의 영향을 받을 수 있습니다. 명령어와 함께 최상위 -m 플래그를 사용하면 속도가 빨라지는 경우가 많습니다.
  • 작은 임의 읽기는 첫 바이트까지의 지연 시간으로 인해 느립니다. Cloud Storage FUSE에서 데이터베이스를 실행하지 마세요.
  • 임의 쓰기는 전체 blob을 읽고, 로컬에서 수정하고, 수정된 blob 전체를 다시 Cloud Storage에 쓰는 방식으로 수행됩니다. 큰 파일에 작은 쓰기를 수행하면 정상적으로 작동하지만 속도가 느리고 비용이 많이 발생합니다.

메타데이터: Cloud Storage에 파일 업로드 시 Cloud Storage FUSE는 파일과 함께 메타데이터를 전송하지 않습니다. 즉, Cloud Storage FUSE를 업로드 도구로 사용하려면 다른 업로드 방법을 사용하는 경우와 달리 콘텐츠 유형 및 ACL과 같은 메타데이터를 설정할 수 없습니다. 메타데이터 속성이 매우 중요한 경우 gsutil, JSON API 또는 Google Cloud Platform Console을 사용하는 것이 좋습니다.

  • 예외적으로 mtime 및 symlink 대상은 Cloud Storage FUSE에서 저장합니다.

동시 실행: 파일에 대한 여러 작성자의 동시 실행 제어가 없습니다. 여러 작성자가 파일을 교체하려고 시도하면 마지막 쓰기만 성공하고 이전의 모든 쓰기는 손실됩니다. 병합, 버전 관리 또는 이후 덮어쓰기에 대한 사용자 알림이 실행되지 않습니다.

연결: Cloud Storage FUSE는 하드 링크를 지원하지 않습니다.

시맨틱스: 일부 시맨틱스는 기존 파일 시스템과 정확히 일치하지는 않습니다. 예외 목록은 여기에서 확인할 수 있습니다. 예를 들어, 마지막 액세스 시간과 같은 메타데이터는 지원되지 않으며 디렉토리 이름 바꾸기와 같은 일부 메타데이터 작업은 원자적이지 않습니다.

액세스: 파일 승인은 Cloud Storage 권한으로 제어됩니다. POSIX 스타일의 액세스 제어는 작동하지 않습니다.

가용성: Cloud Storage와 같은 분산 시스템에서 간혹 일시적 오류가 발생하므로 가용성이 100%에 이르지 못합니다. 잘린 지수 백오프 가이드라인에 따라 다시 시도하는 것이 좋습니다.

로컬 스토리지: 새로운 또는 수정된 객체는 닫히거나 동기화될 때까지 로컬 임시 파일에 온전히 저장됩니다. 대용량 파일 작업 시 특히 Google Compute Engine 인스턴스로 작업하는 경우 파일의 임시 복사본을 저장하기에 로컬 스토리지 용량이 충분한지 확인하세요. 자세한 내용은 readme 문서를 참조하세요.

디렉터리: 기본적으로 명시적으로 정의된 디렉터리만(즉, Cloud Storage에서 고유한 객체) 파일 시스템에 나타납니다. 암시적 디렉토리(즉, 다른 파일이나 디렉토리의 경로 이름 일부인 디렉토리)는 기본적으로 나타나지 않습니다. 경로 이름에 암시적 디렉토리가 포함된 파일이 있는 경우, 이러한 파일은 전체 디렉토리 트리에 나타나지 않습니다. 이는 이 파일이 포함된 암시적 디렉토리가 표시되지 않기 때문입니다. 플래그를 사용하여 이 동작을 변경할 수 있습니다. 자세한 내용은 시맨틱스 문서를 참조하세요.

Cloud Storage FUSE에서 발생하는 청구

Cloud Storage FUSE는 무료로 사용할 수 있습니다. 하지만, Cloud Storage에서 발생하는 네트워크 I/O, 저장소, 메타데이터에는 다른 Cloud Storage 인터페이스와 같이 요금이 청구됩니다. 예정이 없던 요금이 청구되지 않도록 Cloud Storage FUSE 사용으로 인한 Cloud Storage 요금이 얼마인지 파악해야 합니다. 예를 들어, Cloud Storage FUSE를 사용하여 로그 파일을 저장하는 경우, 로그가 동시에 수백 또는 수천 개의 시스템에서 공격적으로 밀려들면 요금이 빠르게 증가할 수 있습니다.

Cloud Storage FUSE 사용과 관련하여 다음 청구 카테고리를 알고 있어야 합니다.

  • 일반적인 객체 작업(만들기, 삭제, 나열)은 Cloud Storage 가격 책정 페이지의 작업 섹션의 설명에 따라 청구됩니다.

  • Nearline Storage 및 Coldline Storage 객체에는 검색 및 조기 삭제와 관련된 비용이 있습니다. Cloud Storage 가격 책정 페이지의 검색 및 조기 삭제 섹션을 참조하세요.

  • 네트워크 이그레스 비용이 청구되며, 리전 및 멀티 리전 위치 간 데이터 전송 시 비용이 발생합니다. Cloud Storage 가격 책정 페이지의 네트워크 섹션을 참조하세요.

비용 분석 예시

Cloud Storage FUSE를 사용하여 Cloud Storage 비용이 얼마나 발생하는지 쉽게 이해할 수 있도록 다음의 명령어 시퀀스와 이에 연결된 JSON API 작업을 생각해 보겠습니다. --debug_gcs 플래그를 사용하면 작업 정보를 표시할 수 있습니다.

명령어 JSON API 작업
gcsfuse --debug_gcs example-bucket mp Objects.list(사용자 인증 정보 확인)
cd mp 해당 없음
ls mp Objects.list("")
mkdir subdir Objects.get("subdir")
Objects.get("subdir/") Objects.insert("subdir/")
cp ~/local.txt subdir/ Objects.get("subdir/local.txt")
Objects.get("subdir/local.txt/")Objects.insert("subdir/local.txt"), 빈 객체 만들기Objects.insert("subdir/local.txt"), 쓰기 완료 후 닫을 때
rm -rf subdir Objects.list("subdir/")
Objects.list("subdir/") Objects.delete("subdir/local.txt") Objects.list("subdir/") Objects.delete("subdir/")

JSON API의 작업 청구를 사용하여 A 클래스 작업 8개, B 클래스 작업 4개, 자유 작업 2개 등 총 14개의 작업에 대해 청구 비용을 계산할 수 있습니다. local.txt 파일 스토리지 비용도 청구됩니다. 파일을 만든 후 바로 삭제하면 비용은 청구되지 않습니다. 청구된 작업이 12개인 경우 이 명령어 시퀀스의 비용은 $0.000084입니다.

1 Cloud Storage FUSE는 Linux 커널 버전 3.10 이상에서 지원됩니다. uname -a를 사용하여 커널 버전을 확인할 수 있습니다.