Cloud Storage FUSE

Halaman ini menyediakan ringkasan Cloud Storage FUSE, yaitu adaptor FUSE yang dapat Anda gunakan untuk memasang dan mengakses bucket Cloud Storage sebagai sistem file lokal, sehingga aplikasi dapat membaca dan menulis objek di bucket Anda menggunakan semantik sistem file standar. Cloud Storage FUSE adalah produk open source yang didukung oleh Google.

Lihat dokumentasi berikut untuk mengetahui petunjuk cara menggunakan Cloud Storage FUSE:

Dokumentasi ini selalu mencantumkan Cloud Storage FUSE versi terbaru. Untuk mengetahui detail tentang versi terbaru, lihat rilis Cloud Storage FUSE di GitHub.

Cara kerja Cloud Storage FUSE

Cloud Storage FUSE menggunakan FUSE dan Cloud Storage API untuk mengekspos bucket secara transparan sebagai folder yang terpasang secara lokal di sistem file Anda.

Cloud Storage FUSE berfungsi dengan mengubah nama penyimpanan objek menjadi file dan sistem direktori, yang menafsirkan karakter garis miring ("/") dalam nama objek sebagai pemisah direktori, sehingga objek dengan imbuhan umum yang sama dianggap sebagai file di direktori yang sama. Aplikasi dapat berinteraksi dengan bucket yang terpasang seperti sistem file, yang menyediakan penyimpanan file hampir tanpa batas yang berjalan di cloud. Cloud Storage FUSE dapat dijalankan dari mana saja dengan konektivitas ke Cloud Storage, termasuk Google Kubernetes Engine, VM Compute Engine, atau sistem lokal.

Cloud Storage FUSE cocok untuk kasus penggunaan jika Cloud Storage memiliki karakteristik performa dan skalabilitas yang tepat untuk aplikasi yang membutuhkan semantik sistem file. Misalnya, Cloud Storage FUSE berguna untuk project machine learning (ML) karena menyediakan cara untuk menyimpan data, model, checkpoint, dan log langsung di Cloud Storage. Untuk informasi selengkapnya, lihat Cloud Storage FUSE untuk workload ML.

Cloud Storage FUSE terintegrasi dengan layanan Google Cloud lainnya. Misalnya, dengan driver FUSE CSI Cloud Storage, Anda dapat menggunakan Google Kubernetes Engine (GKE) API untuk menggunakan bucket sebagai volume, sehingga Anda dapat membaca dari dan menulis ke Cloud Storage dari dalam pod Kubernetes Anda. Untuk informasi lebih lanjut mengenai integrasi lainnya, lihat Integrasi.

Batasan

Meskipun Cloud Storage FUSE memiliki antarmuka sistem file, FUSE tidak seperti sistem file NFS atau CIFS di backend. Selain itu, Cloud Storage FUSE tidak mematuhi persyaratan POSIX. Untuk produk sistem file POSIX di Google Cloud, lihat Filestore.

Saat menggunakan Cloud Storage FUSE, perhatikan keterbatasan dan semantiknya, yang berbeda dengan sistem file POSIX. Cloud Storage FUSE hanya boleh digunakan sesuai dengan kemampuannya.

Keterbatasan dan perbedaan dari sistem file POSIX

Daftar berikut menjelaskan batasan Cloud Storage FUSE:

  • Metadata: Cloud Storage FUSE tidak mentransfer metadata objek saat mengupload file ke Cloud Storage, kecuali untuk target mtime dan symlink. Artinya, Anda tidak dapat menetapkan metadata objek saat mengupload file menggunakan Cloud Storage FUSE. Jika Anda perlu mempertahankan metadata objek, sebaiknya upload file menggunakan Google Cloud CLI, JSON API, atau Konsol Google Cloud.
  • Konkurensi: Cloud Storage FUSE tidak memberikan kontrol konkurensi untuk beberapa penulisan ke file yang sama. Jika beberapa operasi tulis mencoba mengganti sebuah file, operasi tulis terakhir yang menang dan semua operasi tulis sebelumnya akan hilang. Tidak ada penggabungan, kontrol versi, atau notifikasi pengguna untuk timpaan berikutnya.
  • Penautan: Cloud Storage FUSE tidak mendukung hard link.
  • Penguncian file dan patching file: Cloud Storage FUSE tidak mendukung penguncian file atau patching file. Dengan demikian, Anda tidak boleh menyimpan repositori sistem kontrol versi di direktori pemasangan Cloud Storage FUSE karena sistem kontrol versi mengandalkan penguncian dan patching file. Selain itu, Anda tidak boleh menggunakan Cloud Storage FUSE sebagai pengganti filer.
  • Semantik: Semantik di FUSE Cloud Storage berbeda dengan semantik di sistem file konvensional. Misalnya, metadata seperti waktu akses terakhir tidak didukung, dan beberapa operasi metadata seperti penggantian nama direktori tidak bersifat atomik. Untuk mengetahui daftar perbedaan antara semantik FUSE Cloud Storage dan semantik sistem file konvensional, lihat Semantik dalam dokumentasi GitHub FUSE Cloud Storage.
  • Workload yang menerapkan patching file (atau menimpa secara langsung): Cloud Storage FUSE hanya dapat menulis seluruh objek pada satu waktu ke Cloud Storage dan tidak menyediakan mekanisme untuk patching. Jika Anda mencoba mem-patch file, Cloud Storage FUSE akan mengupload ulang seluruh file. Satu-satunya pengecualian untuk perilaku ini adalah Anda dapat menambahkan konten ke akhir file yang berukuran 2 MB atau lebih besar. Di sana, Cloud Storage FUSE hanya akan mengupload ulang konten yang ditambahkan.
  • Akses: Otorisasi untuk file diatur oleh izin Cloud Storage. Kontrol akses bergaya POSIX tidak berfungsi.
  • Performa: Cloud Storage FUSE memiliki latensi yang jauh lebih tinggi daripada sistem file lokal. Oleh karena itu, sebaiknya jangan digunakan sebagai backend untuk menyimpan database. Throughput dapat dikurangi saat membaca atau menulis satu file kecil pada satu waktu. Menggunakan file yang lebih besar atau mentransfer beberapa file sekaligus akan membantu meningkatkan throughput.
  • Ketersediaan: Error sementara terkadang dapat terjadi saat Anda menggunakan Cloud Storage FUSE untuk mengakses Cloud Storage. Sebaiknya Anda mencoba lagi operasi yang gagal menggunakan strategi coba lagi.
  • Pembuatan versi objek: Cloud Storage FUSE tidak secara resmi mendukung penggunaan dengan bucket yang mengaktifkan pembuatan versi objek. Mencoba menggunakan Cloud Storage FUSE dengan bucket yang mengaktifkan pembuatan versi objek dapat menghasilkan perilaku yang tidak dapat diprediksi.
  • Transcoding file: Objek dengan content-encoding: gzip dalam metadata: Semua objek pada direktori yang terpasang di FUSE Cloud Storage tidak akan menjalani transcoding dekompresi. Sebaliknya, objek tetap dikompresi dengan cara yang sama seperti yang disimpan di dalam bucket.
    Misalnya, file berukuran 1.000 byte, yang diupload ke bucket menggunakan perintah gcloud storage cp dengan --gzip-local flag, dapat menjadi 60 byte (ukuran terkompresi sebenarnya bergantung pada konten dan implementasi gzip yang digunakan oleh gcloud CLI) sebagai objek Cloud Storage. Jika bucket dipasang menggunakan gcsfuse, dan file yang sesuai dicantumkan atau dibaca dari direktori pemasangan, ukurannya akan ditampilkan sebagai 60 byte, dan isinya adalah versi terkompresi dari konten asli 1.000 byte.
    Hal ini berbeda dengan download yang menggunakan gcloud storage cp gs://bucket/path /local/path yang mengalami transcoding dekompresi: dalam perintah gcloud, konten didekompresi secara otomatis selama proses download, dan konten asli yang belum dikompresi akan ditayangkan.
    Catatan: Mencoba menggunakan Cloud Storage FUSE untuk mengedit atau mengubah objek dengan content-encoding: gzip dapat menghasilkan perilaku yang tidak dapat diprediksi. Hal ini dikarenakan Cloud Storage FUSE mengupload konten objek sebagaimana adanya (tanpa mengompresinya) sambil mempertahankan content-encoding: gzip, dan jika konten ini tidak dikompresi dengan benar ke gzip, konten tersebut mungkin gagal dibaca dari server oleh klien lain, seperti gcloud CLI. Hal ini terjadi karena klien lain menggunakan transcoding dekompresi saat membaca, dan metode ini gagal menampilkan konten gzip yang tidak tepat.
  • Kebijakan retensi: Cloud Storage FUSE tidak mendukung penulisan ke bucket dengan kebijakan retensi. Jika Anda mencoba menulis ke bucket dengan kebijakan retensi, operasi tulis akan gagal.

    Cloud Storage FUSE mendukung pembacaan objek dari bucket dengan kebijakan retensi, tetapi bucket harus dipasang sebagai Read-Only dengan meneruskan flag -o RO selama pemasangan bucket.

  • Penyimpanan lokal: Objek yang baru atau dimodifikasi disimpan secara keseluruhan dalam file lokal sementara sampai objek tersebut ditutup atau disinkronkan. Saat menangani file berukuran besar, pastikan Anda memiliki kapasitas penyimpanan lokal yang cukup untuk salinan file sementara, terutama jika Anda menggunakan instance Compute Engine. Untuk mengetahui informasi selengkapnya, lihat README di dokumentasi GitHub FUSE Cloud Storage.
  • Direktori: Cloud Storage beroperasi dengan namespace datar. Secara default, hanya direktori yang ditentukan secara eksplisit (artinya ada sebagai objek dalam Cloud Storage) yang dapat muncul dalam sistem file yang terpasang. Direktori implisit (yang hanya merupakan bagian dari jalur file atau direktori lain) tidak muncul secara default. Jika Anda memiliki file dengan jalur yang berisi direktori implisit, file tersebut tidak akan muncul di hierarki direktori keseluruhan, karena direktori implisit yang memuatnya tidak akan muncul. Namun, Anda dapat menggunakan flag untuk mengubah perilaku ini. Untuk mengetahui informasi selengkapnya, lihat flag --implicit-dirs di dokumentasi CLI FUSE Cloud Storage.

    Cloud Storage FUSE tidak mendukung penggantian nama direktori. Penggantian nama direktori tidak dapat dilakukan secara atomik di Cloud Storage; sebagai gantinya, mengganti nama direktori berarti menyalin objek dengan nama baru dan menghapus objek aslinya.

  • Batas penanganan file: Secara default, kernel Linux mengizinkan maksimum 1.024 handle file yang terbuka. Cloud Storage FUSE tidak boleh digunakan sebagai server yang menangani koneksi paralel serentak dari klien eksternal, karena hal ini dapat melebihi jumlah maksimum handle file yang terbuka. Beberapa kasus penggunaan umum yang harus dihindari adalah penayangan konten di web dari pemasangan FUSE Cloud Storage, mengekspos pemasangan FUSE Cloud Storage sebagai penyimpanan yang terpasang ke jaringan (NAS) menggunakan protokol berbagi file (misalnya, NFS atau SMB), dan menghosting server protokol transfer file (FTP) yang didukung oleh pemasangan Cloud Storage FUSE.

Framework, sistem operasi, dan arsitektur

Cloud Storage FUSE telah divalidasi dengan framework berikut:

  • TensorFlow V2.x

  • TensorFlow V1.x

  • PyTorch V2.x

  • PyTorch V1.x

  • JAX 0.4.x

Cloud Storage FUSE mendukung sistem operasi dan arsitektur berikut:

  • Ubuntu 18.04 atau yang lebih baru

  • Debian 10 atau yang lebih baru

  • CentOS 7.9 atau yang lebih baru

  • RHEL 7.9 atau yang lebih baru

  • x86_64

  • ARM64

Mendapatkan dukungan

Anda bisa mendapatkan dukungan, mengirimkan pertanyaan umum, dan meminta fitur baru dengan menggunakan salah satu saluran dukungan resmi Google Cloud. Anda juga bisa mendapatkan dukungan dengan melaporkan masalah di GitHub.

Untuk solusi atas masalah yang sering terjadi, lihat Pemecahan masalah di dokumentasi GitHub FUSE Cloud Storage.

Harga untuk Cloud Storage FUSE

Cloud Storage FUSE tersedia secara gratis, tetapi penyimpanan, metadata, dan I/O jaringan yang dihasilkannya ke dan dari Cloud Storage dikenai biaya seperti antarmuka Cloud Storage lainnya. Dengan kata lain, semua operasi dan transfer data yang dilakukan oleh Cloud Storage FUSE dipetakan ke transfer dan operasi Cloud Storage, serta dikenai biaya yang sesuai. Untuk mengetahui informasi selengkapnya tentang operasi umum Cloud Storage FUSE dan cara pemetaannya ke operasi Cloud Storage, lihat pemetaan operasi.

Untuk menghindari hal yang tidak diinginkan, Anda harus memperkirakan pengaruh penggunaan Cloud Storage FUSE dalam biaya Cloud Storage. Misalnya, jika Anda menggunakan Cloud Storage FUSE untuk menyimpan file log, Anda dapat dikenai biaya dengan cepat jika log dihapus secara agresif di ratusan atau ribuan komputer secara bersamaan.

Lihat Harga Cloud Storage untuk mengetahui informasi mengenai biaya seperti penyimpanan, penggunaan jaringan, dan operasi.

Peta operasi Cloud Storage FUSE ke operasi Cloud Storage

Saat menjalankan operasi menggunakan Cloud Storage FUSE, Anda juga menjalankan operasi Cloud Storage yang terkait dengan operasi Cloud Storage FUSE. Tabel berikut ini menjelaskan perintah umum Cloud Storage FUSE dan operasi Cloud Storage JSON API terkaitnya. Anda dapat menampilkan informasi tentang operasi Cloud Storage FUSE dengan menggunakan flag --debug_gcs.

Perintah Operasi JSON API
gcsfuse --debug_gcs example-bucket mp Objects.list (untuk memeriksa kredensial)
cd mp t/a
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"), untuk membuat objek kosong

Objects.insert("subdir/local.txt"), saat menutup setelah selesai menulis

rm -rf subdir

Objects.list("subdir")

Objects.list("subdir/")

Objects.delete("subdir/local.txt")

Objects.list("subdir/")

Objects.delete("subdir/")

Masalah umum

Untuk mengetahui daftar masalah umum di Cloud Storage FUSE, lihat GitHub.

Langkah berikutnya