Mengoptimalkan permintaan metadata yang dikirim ossfs 2.0 ke OSS mengurangi biaya panggilan API, meningkatkan konkurensi, dan mempercepat operasi baca/tulis pada titik pemasangan.
Prinsip dasar
ossfs 2.0 dibangun di atas kerangka FUSE (Filesystem in Userspace). Kerangka ini menerjemahkan operasi metadata sistem file menjadi permintaan OSS, sehingga Anda dapat mengakses sumber daya penyimpanan OSS melalui antarmuka sistem file standar.
|
Perintah |
Aturan konversi antarmuka |
|
|
Saat menjalankan operasi Jika permintaan GetObjectMeta mengembalikan respons 404 (menunjukkan objek tidak ada), ossfs 2.0 akan mengirim permintaan ListObject(max-keys=1) lebih lanjut untuk mengecek apakah terdapat objek folder virtual dengan nama yang sama. |
|
|
|
|
|
Saat menjalankan operasi Perhatikan bahwa ossfs 2.0 mengaktifkan fitur |
|
|
Analisis skenario
Mengakses file melalui sistem file sangat berbeda dibandingkan dengan mengakses objek yang sesuai secara langsung di OSS.
Metode akses file
ossfs mengurai path file dari direktori root ke bawah. Sebagai contoh, untuk memperoleh atribut /dir/object, perintah stat /dir/object dijalankan sebagai berikut:
-
Pertama, lakukan operasi pada /dir dengan mengirim permintaan GetObjectMeta dir. Jika responsnya 404 Not Found, artinya objek tersebut tidak ada; kemudian kirim permintaan ListObject (max-keys=1) dir/. Jika responsnya 200 OK, artinya folder virtual yang sesuai tersedia.
-
Lanjutkan dengan operasi pada /dir/object dengan mengirim permintaan GetObjectMeta dir/object. Jika responsnya 200 OK, informasi atribut objek berhasil diperoleh.
Satu perintah stat /dir/object menghasilkan dua permintaan GetObjectMeta dan satu permintaan ListObject. Karena setiap komponen path memerlukan pencarian metadata tersendiri, jumlah permintaan OSS meningkat seiring dengan kedalaman path file, sehingga menurunkan kinerja.
Dampak caching metadata file
ossfs 2.0 mengaktifkan caching metadata file secara default dengan periode validitas cache selama 60 detik. Kapasitas cache metadata diimplementasikan berdasarkan FUSE low-level API, dan kernel sistem operasi menentukan kapan entri cache harus dihapus. Mesin dengan memori lebih besar biasanya dapat menyimpan lebih banyak informasi metadata dalam cache.
Contoh berikut menunjukkan bagaimana caching metadata memengaruhi kinerja saat membaca atribut 100 file anak dalam direktori /dir/.
-
Tanpa caching metadata
-
Mengakses file dengan daftar file yang diketahui:
Saat menjalankan perintah
stat /dir/object-<i>dalam loop, setiap operasistatdikonversi menjadi satu permintaan GetObjectMeta, sehingga menghasilkan 100 permintaan GetObjectMeta ke OSS untuk memperoleh atribut file—jumlah permintaan metadata yang berlebihan ini berdampak negatif terhadap kinerja. -
Mengakses file dengan daftar file yang tidak diketahui:
Saat menjalankan perintah
ls, operasi tersebut dikonversi menjadi satu permintaan ListObject ke OSS untuk memperoleh daftar file, lalu menjalankan perintahstat /dir/object-<i>dalam loop untuk memperoleh atribut file berdasarkan daftar tersebut. Hal ini menghasilkan satu permintaan ListObject dan 100 permintaan GetObjectMeta ke OSS, sehingga permintaan metadata yang berlebihan memengaruhi kinerja.
-
-
Dengan caching metadata
-
Mengakses file dengan daftar file yang diketahui:
Saat menjalankan perintah
stat /dir/object-<i>dalam loop, setiap operasistatdikonversi menjadi satu permintaan GetObjectMeta. Namun, selama periode validitas cache, ke-100 permintaan tersebut langsung mengenai cache metadata lokal untuk memperoleh atribut file, sehingga secara efektif mengurangi jumlah permintaan yang dikirim ke OSS. -
Mengakses file dengan daftar file yang tidak diketahui:
Saat menjalankan perintah
ls, operasi tersebut dikonversi menjadi satu permintaan ListObject ke OSS sekaligus memperbarui cache metadata lokal. Setelah cache diperbarui, saat menjalankan perintahstat /dir/object-<i>dalam loop, metadata sudah tersedia di cache lokal sehingga tidak ada permintaan tambahan yang dikirim ke OSS.
-
Caching metadata secara efektif mengurangi permintaan berulang ke OSS. Saat melakukan traversal semua file dalam sebuah folder, menjalankan perintah ls terlebih dahulu akan memuat cache dan menghilangkan permintaan OSS per file berikutnya.
Metode optimasi
Gunakan metode berikut untuk mengurangi permintaan metadata ke OSS dan meningkatkan kinerja:
Perpanjang waktu cache metadata
Jika data Anda tidak berubah setelah diunggah atau jarang berubah relatif terhadap durasi cache, tingkatkan opsi pemasangan attr_timeout untuk memperpanjang periode validitas cache metadata dan mengurangi permintaan berulang.
-
Skenario bisnis: Dalam skenario anotasi data, sistem membaca batch data mentah yang telah dikumpulkan sebelumnya, memprosesnya, lalu menghasilkan batch data baru. Dalam skenario ini, data mentah tidak akan dimodifikasi setelah diunggah ke OSS.
-
Konfigurasi pemasangan: Dalam file konfigurasi ossfs 2.0, atur periode validitas cache metadata menjadi 7200 detik.
# Titik akhir bucket (node wilayah) --oss_endpoint=https://oss-cn-hangzhou-internal.aliyuncs.com # Nama bucket --oss_bucket=bucketName # Periode validitas cache metadata --attr_timeout=7200 # Kunci akses ID AccessKey dan AccessKey Secret (opsional untuk versi ossfs 2.0.1 dan yang lebih baru) --oss_access_key_id=LTAI****************** --oss_access_key_secret=8CE4**********************
Lakukan operasi setelah memperoleh daftar file
Sebelum mengakses file individual dalam direktori, jalankan perintah ls atau kirim permintaan ListObject untuk memuat semua metadata file ke cache lokal terlebih dahulu. Dikombinasikan dengan periode validitas cache yang lebih panjang, hal ini menghilangkan permintaan berulang per file ke OSS.
Anda dapat mengganti perintah ls dengan program apa pun yang membaca isi direktori. Contoh berikut mencantumkan file dalam direktori /mnt/data/.
Python
os.listdir('/mnt/data/')
Go
entries, err := os.ReadDir("/mnt/data/")
C
dir = opendir("/mnt/data/");
if (dir != NULL) {
struct dirent *entry;
while((entry = readdir(dir)) != NULL) {}
closedir(dir);
}
Gunakan cache negatif untuk mempercepat pembuatan file
Untuk membuat file baru, sistem file menjalankan dua panggilan sistem secara berurutan: lookup dan create.
-
Operasi
lookupmenentukan apakah file yang sesuai ada. Di ossfs 2.0, operasi ini diurai menjadi permintaan GetObjectMeta dan permintaan ListObjects. -
Jika responsnya error 404 Not Found, ossfs membuat file menggunakan operasi
create. Saat ossfs 2.0 menjalankancreate, ia juga mengirim permintaan GetObjectMeta dan ListObjects untuk memverifikasi keberadaan file di OSS.
Dengan demikian, proses pembuatan file baru melibatkan empat operasi kueri metadata OSS.
ossfs 2.0 mendukung caching respons `404` yang dikembalikan oleh OSS untuk mengurangi permintaan duplikat berikutnya. Untuk mengaktifkan fitur ini, tentukan opsi berikut saat memasang sistem file:
-
--oss_negative_cache_timeout=30(Nilai default adalah 0 detik. Kami menyarankan agar nilai ini lebih kecil daripada nilaiattr_timeout.) -
--oss_negative_cache_size=10000(Nilai default: 10000)
Saat cache negatif OSS diaktifkan, respons 404 dari operasi lookup untuk file baru akan disimpan dalam cache. Akibatnya, kueri berikutnya selama operasi create akan mengenai cache negatif sehingga tidak ada permintaan yang dikirim ke OSS. Hal ini mengurangi jumlah permintaan OSS untuk proses pembuatan file dari empat menjadi dua.
Setelah Anda mengaktifkan cache negatif OSS, jika entri cache 404 untuk file bernama object-A disimpan dalam cache, file tersebut hanya akan terlihat di titik pemasangan setelah entri cache kedaluwarsa, meskipun Anda segera membuat object-A di OSS. Periode validitas cache ditentukan oleh oss_negative_cache_timeout. Fitur ini tidak disarankan untuk skenario yang memerlukan konsistensi data tinggi.
Perbandingan kinerja
Metode pengujian: Pasang Bucket OSS dengan ossfs 2.0 pada Instance ECS di wilayah yang sama menggunakan titik akhir internal dengan caching metadata diaktifkan, lalu baca metadata 10.000 file dalam direktori yang dipasang.
Hasil pengujian
|
Operasi |
Waktu yang dibutuhkan |
|
Tanpa memuat cache metadata terlebih dahulu (membaca metadata file dalam folder secara langsung tanpa menjalankan perintah |
111 detik |
|
Dengan memuat cache metadata terlebih dahulu (menjalankan perintah |
18 detik |
Kesimpulan pengujian: Memuat cache metadata sebelum akses file massal, dikombinasikan dengan periode validitas cache yang sesuai, secara signifikan mengurangi permintaan metadata OSS dan meningkatkan kinerja keseluruhan.