Saat menggunakan ossfs 2.0 untuk berinteraksi dengan OSS (Object Storage Service), mengoptimalkan jumlah permintaan metadata yang dikirim ke server OSS tidak hanya mengurangi biaya pemanggilan layanan tetapi juga meningkatkan kemampuan pemrosesan bersamaan sistem, serta kinerja baca/tulis titik pemasangan.
Prinsip dasar
ossfs 2.0 dibangun di atas kerangka FUSE (Filesystem in Userspace), yang mengubah operasi metadata sistem file menjadi permintaan OSS yang sesuai, memungkinkan akses ke sumber daya penyimpanan OSS melalui operasi sistem file.
Perintah | Aturan konversi antarmuka |
| Saat menjalankan operasi Jika permintaan GetObjectMeta mengembalikan respons 404 (menunjukkan objek tidak ada), maka akan mengirim permintaan ListObject(max-keys=1) lebih lanjut untuk menanyakan apakah objek folder virtual dengan nama yang sama ada. |
| |
| Saat menjalankan operasi Catatan bahwa ossfs 2.0 mengaktifkan fitur |
|
Analisis skenario
Perbedaan signifikan terdapat antara mengakses file dalam sistem file dan mengakses objek dengan nama yang sama di OSS.
Metode akses file
OSS menggunakan metode akses top-down dari Direktori root untuk mengakses file. Sebagai contoh, untuk mendapatkan informasi atribut file objek yang terletak di jalur /dir/object, alur eksekusi perintah stat /dir/object adalah sebagai berikut:
Pertama, lakukan operasi pada /dir, mengirim permintaan GetObjectMeta dir. Jika mengembalikan 404 Not Found, itu menunjukkan bahwa objek tidak ada, lalu permintaan ListObject (max-keys=1)dir/ dikirim. Jika mengembalikan 200 OK, itu menunjukkan bahwa folder virtual yang sesuai ada.
Lakukan operasi pada /dir/object, mengirim permintaan GetObjectMeta dir/object. Jika mengembalikan 200 OK, informasi atribut objek berhasil diperoleh.
Berdasarkan analisis di atas, satu eksekusi perintah stat /dir/object akhirnya dikonversi menjadi dua permintaan GetObjectMeta dan satu permintaan ListObject. Selain itu, permintaan metadata sistem file dikonversi menjadi beberapa permintaan OSS, dan jumlahnya meningkat seiring kedalaman file, menyebabkan penurunan kinerja yang signifikan.
Dampak caching metadata file
ossfs 2.0 mengaktifkan caching metadata file secara default, dengan periode validitas cache metadata default selama 60 detik. Kapasitas cache metadata diimplementasikan berdasarkan API level rendah FUSE dan ditentukan oleh kernel sistem operasi kapan harus dievakuasi. Mesin dengan lebih banyak memori biasanya dapat menyimpan lebih banyak informasi metadata.
Berikut ini adalah contoh mendapatkan informasi atribut untuk 100 file anak di direktori /dir/ untuk menggambarkan dampak caching metadata file terhadap kinerja.
Tanpa caching metadata
Mengakses file dengan daftar file yang diketahui:
Saat menjalankan perintah
stat /dir/object-<i>dalam loop, setiap operasistatakan dikonversi menjadi satu permintaan GetObjectMeta, akhirnya menghasilkan 100 permintaan GetObjectMeta yang dikirim ke OSS untuk mendapatkan atribut file, menghasilkan terlalu banyak permintaan metadata yang mempengaruhi kinerja.Mengakses file dengan daftar file yang tidak diketahui:
Saat menjalankan perintah
ls, operasi ini akan dikonversi menjadi satu permintaan ListObject yang dikirim ke OSS untuk mendapatkan daftar file, lalu menjalankan perintahstat /dir/object-<i>dalam loop untuk mendapatkan atribut file berdasarkan daftar file yang diperoleh. Ini akan menghasilkan satu permintaan ListObject dan 100 permintaan GetObjectMeta yang dikirim ke OSS, menghasilkan terlalu banyak permintaan metadata yang mempengaruhi kinerja.
Dengan caching metadata
Mengakses file dengan daftar file yang diketahui:
Saat menjalankan perintah
stat /dir/object-<i>dalam loop, setiap operasistatakan dikonversi menjadi satu permintaan GetObjectMeta, akhirnya menghasilkan 100 permintaan GetObjectMeta. Permintaan 100 ini akan langsung mengenai cache metadata lokal untuk mendapatkan atribut file dalam periode validitas cache, sehingga secara efektif mengurangi jumlah permintaan yang dikirim ke OSS.Mengakses file dengan daftar file yang tidak diketahui:
Saat menjalankan perintah
ls, operasi ini akan dikonversi menjadi satu permintaan ListObject yang dikirim ke OSS sambil memperbarui cache metadata lokal. Setelah menyelesaikan pembaruan cache, saat menjalankan perintahstat /dir/object-<i>dalam loop, karena metadata sudah ada di cache lokal, tidak ada permintaan OSS tambahan yang akan dikirim.
Berdasarkan analisis di atas, mekanisme caching metadata dapat secara efektif mengurangi jumlah permintaan berulang yang dikirim ke OSS. Saat melintasi semua file dalam folder, menggunakan ls dapat memuat cache metadata terlebih dahulu, sehingga secara efektif mengurangi permintaan OSS berikutnya untuk file anak.
Metode optimisasi
Anda dapat mengurangi jumlah permintaan metadata yang dikirim ke OSS dan meningkatkan kinerja keseluruhan dengan cara-cara berikut:
Perpanjang waktu cache metadata
Jika data yang dibaca tidak akan dimodifikasi setelah diunggah ke OSS, atau jika interval modifikasi jauh lebih lama daripada waktu cache metadata, Anda dapat mengonfigurasi periode validitas cache metadata yang lebih lama melalui opsi pemasangan attr_timeout untuk mengurangi permintaan metadata berulang dan meningkatkan kinerja. Contoh konfigurasi opsi pemasangan adalah sebagai berikut.
Skema bisnis: Dalam skenario anotasi data, sistem membaca batch data mentah yang sebelumnya dikumpulkan, 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, konfigurasikan periode validitas cache metadata menjadi 7200 detik.
# Bucket Endpoint (region node) --oss_endpoint=https://oss-cn-hangzhou-internal.aliyuncs.com # Nama Bucket --oss_bucket=bucketName # Periode validitas cache metadata --attr_timeout=7200 # Access keys AccessKey ID dan AccessKey Secret (opsional untuk ossfs 2.0.1 dan versi berikutnya) --oss_access_key_id=LTAI****************** --oss_access_key_secret=8CE4**********************
Operasikan setelah mendapatkan daftar file
Saat melintasi semua file dalam direktori, Anda dapat terlebih dahulu menggunakan perintah ls atau mengirim permintaan ListObject untuk memuat metadata semua file dalam folder target ke dalam cache metadata lokal, dikombinasikan dengan periode validitas cache yang lebih lama, untuk mengurangi permintaan metadata berulang dan pada akhirnya meningkatkan kinerja keseluruhan.
Perintah ls dapat diganti dengan program bahasa tingkat tinggi apa pun yang digunakan untuk membaca isi folder. Berikut ini adalah contoh umum untuk mendapatkan daftar file di 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 kesalahan 404 Not Found dikembalikan, ossfs membuat file menggunakan operasi
create. Saat ossfs 2.0 menjalankancreate, ia juga mengirim permintaan GetObjectMeta dan permintaan ListObjects untuk menanyakan apakah file ada di OSS.
Oleh karena itu, proses pembuatan file baru melibatkan empat operasi kueri metadata OSS.
ossfs 2.0 mendukung caching permintaan `404` yang dikembalikan oleh OSS untuk mengurangi permintaan duplikat berikutnya. Untuk mengaktifkan fitur ini, tentukan opsi berikut saat Anda memasang sistem file:
--oss_negative_cache_timeout=30(Nilai default adalah 0 detik. Kami sarankan Anda mengatur nilai ini kurang dari nilaiattr_timeout.)--oss_negative_cache_size=10000(Nilai default: 10000)
Saat cache negatif OSS diaktifkan, permintaan 404 dari operasi lookup untuk file baru disimpan dalam cache. Akibatnya, kueri berikutnya selama operasi create mengenai cache negatif, dan tidak ada permintaan yang dikirim ke OSS. 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, 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. Kami tidak merekomendasikan Anda mengaktifkan fitur ini dalam skenario yang memerlukan konsistensi data tinggi.
Perbandingan kinerja
Metode pengujian: Di Instance ECS di wilayah yang sama dengan Bucket OSS target, gunakan alat ossfs 2.0 untuk memasang Bucket OSS melalui endpoint internal wilayah yang sama dengan caching metadata diaktifkan, lalu baca metadata dari 10.000 file di direktori Bucket yang dipasang.
Hasil Pengujian
Operasi | Waktu yang diperlukan |
Tanpa memuat cache metadata terlebih dahulu (membaca metadata file dalam folder tanpa menjalankan perintah | 111 detik |
Dengan memuat cache metadata terlebih dahulu (menjalankan perintah | 18 detik |
Kesimpulan Pengujian: Dalam skenario dengan banyak pembacaan metadata file, memuat cache metadata terlebih dahulu dikombinasikan dengan periode validitas cache metadata yang masuk akal dapat secara signifikan mengurangi jumlah permintaan metadata yang dikirim ke OSS, sehingga meningkatkan kinerja keseluruhan.