ossfs 2,0.9 ve sonraki sürümler, yerel geçici dizine dayalı rastgele yazmayı destekler. --temp_dir bağlama seçeneğini yapılandırarak ossfs 2,0, yazılan verileri yerel diskte aşamalandırır ve bağlantı noktasına POSIX uyumlu tam rastgele yazma semantiği (isteğe bağlı ofsetlerde yazma, herhangi bir boyuta kısaltma ve yazarken okuma gibi) kazandırır. Bu konu, rastgele yazmanın çalışma prensiplerini, yapılandırma yöntemlerini, kullanım kısıtlamalarını ve önerilerini açıklar.
Arka plan bilgileri
OSS'te bir nesne oluşturulduktan sonra kısmen değiştirilemez. İçerik değişikliği, nesnenin tamamının üzerine yazılmasını gerektirir. ossfs 2,0'ın varsayılan modunda yazma yolu akışlı yüklemeyi kullanır: Veriler yazıldıkça sıralı parçalar halinde OSS'e yüklenir. Bu yaklaşımın aşağıdaki sınırlamaları vardır:
Yalnızca sıralı yazmalar desteklenir. Dosya sonunun ötesindeki konumlara yapılan
pwriteçağrıları desteklenmez.truncateişlemi yalnızca boyutu 0'a kısaltmayı destekler. Boyutun sıfır dışı başka bir değere kısaltılmasıENOTSUPhatası döndürür.Bir dosya yazılırken (kapatılmadan önce) okunamaz. Bu işlem
EBUSYhatası döndürür.
AI ajanı kod çalıştırma, satır içi betik düzenleme ve bilimsel hesaplamanın ara sonuçları gibi senaryolar genellikle rastgele yazma semantiğine dayanır. ossfs 2,0'ın rastgele yazma özelliği, yazılan verileri yerel geçici dizinde aşamalandırır; parça yönetimi ve artımlı yükleme ile birlikte nesne depolama üzerinde rastgele yazmayı uygular.
ossfs 2,0'ın rastgele yazma modu şu özelliklere sahiptir:
Tam POSIX rastgele yazma semantiği: İsteğe bağlı ofsetlerde
pwrite,O_APPENDve herhangi bir boyuta (büyütme veya küçültme)truncateişlemini destekler.Yazarken okuma: Bir dosya yazılırken aynı anda okunabilir. Değiştirilen kısımlar yerel aşamalandırma alanından, değiştirilmeyen kısımlar doğrudan OSS'ten okunur.
Artımlı yükleme: Flush veya close işleminde yalnızca değiştirilen veri blokları yerel diskten yüklenir. Değiştirilmeyen kısımlar OSS üzerinde sunucu tarafı kopyalama ile işlenir; bu sayede yerel G/Ç ve yükleme bant genişliği tüketilmez.
Disk alanı koruması: Yerleşik genel disk bütçesi, aşamalandırma diskinde alan azaldığında yazmalar için
ENOSPCdöndürür. Sistem diskinin dolmasını önlemek amacıyla bağlama sırasında boş alan eşiği ayarlayabilirsiniz.
Yerel geçici dizin yalnızca yazma yoluna hizmet eder. Yerel veri önbelleğinden (--disk_data_cache_dir, bir okuma önbelleği) bağımsızdır. Her ikisini de aynı anda (farklı dizinler kullanarak) etkinleştirebilirsiniz; aralarında herhangi bir etkileşim olmaz.
Varsayılan olarak ossfs 1,0, yerel geçici dizin olarak /tmp dizinini kullanır. Yolu ossfs 1,0'ın varsayılan yoluyla tutarlı hale getirmek için --temp_dir=/tmp yapılandırın.
Rastgele yazma etkinleştirildikten sonra yazma performansı, yerel geçici dizinin bulunduğu diskin okuma/yazma performansı ile sınırlıdır. Büyük dosyaların kopyalanması gibi toplu sıralı yazma içeren senaryolarda performans, varsayılan moda göre çok daha düşüktür. Bu özelliği yalnızca iş yükünüz gerçekten rastgele yazma semantiği gerektirdiğinde etkinleştirin.
Çalışma prensipleri
Yerel aşamalandırma ve birleştirilmiş yükleme
Rastgele yazma etkinleştirildikten sonra ossfs 2,0, rastgele yazılan her dosya için yerel geçici dizinde bir aşamalandırma dosyası oluşturur ve en son değişiklikleri sabit veri bloğu (chunk) granüleritesinde yerel olarak kaydeder:
Yazılan veriler doğrudan yerel aşamalandırma dosyasına aktarılır. Bir yazma işlemi bulutta zaten mevcut olan bir veri bloğuyla yalnızca kısmen örtüşüyorsa ossfs, yerel olarak aşamalandırılan verilerin eksiksiz olmasını sağlamak için önce o bloğu OSS'ten getirir.
fsyncveyacloseişleminde, yerel olarak aşamalandırılan değişiklikler buluttaki verilerle otomatik olarak birleştirilir ve yüklenir: Değiştirilen kısımlar yerel diskten yüklenir, değiştirilmeyen kısımlar ise OSS üzerinde sunucu tarafı kopyalama ile işlenir. Bu sayede dosyanın tamamı yeniden iletilmez ve yerel disk okuma bant genişliği tüketilmez.Başarılı bir yüklemenin ardından aşamalandırma disk alanı otomatik olarak serbest bırakılır.
Yazarken okuma
Bir dosya yazılırken aynı zamanda okunabilir: Değiştirilen kısımlar yerel aşamalandırma alanından, değiştirilmeyen kısımlar ise doğrudan OSS'ten okunur.
Disk alanı koruması
Bağlama sırasında ossfs, geçici dizinin bulunduğu diskteki boş alanın ayrılmış gereksinimi karşılayıp karşılamadığını kontrol eder ve karşılamazsa bağlamayı reddeder. Ayrılan disk alanı yetersiz kalırsa, disk dolması nedeniyle işlem çökmesi yerine yazmalar ENOSPC döndürür.
Yapılandırma yöntemleri
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kısıtlamalar:
--temp_dirparametresinin işaret ettiği dizin yoksa otomatik olarak oluşturulur. Sistem diski veya diğer iş yükleriyle alan rekabetini önlemek için bağımsız bir bölüm veya disk kullanmanızı öneririz.Yazılmakta olan dosyaların verileri yerel geçici dizinde saklanır. Diskte yeterli kapasite yoksa yazmalar ENOSPC döndürür.
temp_dir_free_bytestarafından ayrılan alan çıkarıldıktan sonra kalan boş disk alanına yazılabilir disk alanı denir. ossfs2 yalnızca yazılmakta olan verileri depolamak için bu alanı kullanır. Yazılabilir disk alanı, eşzamanlı olarak yazılan tüm dosyaların toplam boyutundan büyük olmalıdır (en kötü durumda, bir dosyanın tamamı yerel olarak yazılabilir).Aynı makinede birden fazla ossfs2 örneği bağlandığında, aşamalandırma dosya adları çakışmadığı için aynı geçici dizini paylaşmalarına izin verilir. Ancak birden fazla örnek diskin alanı ve G/Ç kaynakları için rekabet edeceğinden bağımsız dizinler kullanmanızı öneririz.
--temp_dirve--enable_appendable_objectbirbirini dışlar ve aynı anda etkinleştirilemez.
Örnek bağlama komutu:
ossfs2 mount /mnt/oss/ \
--oss_bucket <your-bucket> \
--oss_endpoint <your-endpoint> \
--oss_access_key_id <ak> \
--oss_access_key_secret <sk> \
--temp_dir /mnt/disk/ossfs2/temp \
--temp_dir_free_bytes 1G
Ortam gereksinimleri
|
|
|
|
|
|
|
|
|
Özelliğin etkileri
--temp_dir etkinleştirilmeden önceki ve sonraki yazma yeteneklerinin karşılaştırması:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dayanıklılık semantiği:
Varsayılan olarak rastgele yazma modu
fsyncsemantiğini izler:fsyncişlemi, yerel değişikliklerin buluttaki verilerle birleştirilerek yüklenmesini tetikler. Başarılı dönüş, verilerin OSS'e kalıcı olarak kaydedildiği anlamına gelir. Kalan veriler dosya kapatıldığında da yüklenir.Yükleme hatası uygulamaya hata olarak döndürülür ve uygulama
fsyncaracılığıyla yeniden deneyebilir. Yükleme sonunda başarısız olursa ve dosya kapatılırsa kalıcı hale getirilmemiş veriler kaybolur ve dosya içeriği uzak taraftaki son başarılı yüklenen sürüme geri döner.İşlem anormal şekilde sonlanırsa yüklenmemiş aşamalandırma verileri kaybolur ancak OSS'teki nesne son başarılı yüklemenin durumunu korur. Bozuk bir nesne oluşmaz.
Kullanım önerileri
Yerel geçici dizine dayalı rastgele yazma, OSS bağlantı noktasında yerel dosya sistemi benzeri yazma semantiği gerektiren senaryolar için uygundur.
Rastgele yazmanın etkinleştirilmesi için uygun senaryolar:
|
|
|
|
|
|
|
|
|
Rastgele yazmanın etkinleştirilmesinin önerilmediği senaryolar:
|
|
|
|
|
|
|
|
|
Disk bütçesi önerileri:
Aşamalandırma verilerinin sistem diskini doldurup ana bilgisayar kararlılığını etkilemesini önlemek için geçici dizini sistem diskinden ayrı tutun. Makinede yalnızca bir disk varsa, sistem için yeterli boş alan ayırmak amacıyla
temp_dir_free_bytesdeğerini daha büyük bir değere (örneğin 10G) ayarlamanızı öneririz.Yazılabilir disk alanı (yukarıdaki kısıtlamalara bakın), eşzamanlı olarak yazılan dosyaların toplam boyutundan büyük olmalıdır.
100 GiB'den büyük tek bir dosya için
--random_write_max_file_sizedeğerini açıkça artırmanın yanı sıra (örneğin--random_write_max_file_size=500G), yazılabilir disk alanının da o dosyanın boyutunu aşmasını sağlamanız gerekir.