Yerel diskteki dosyaları S3'e taşırken EFS ara çözüm olur mu?
Soru
Uygulamam kullanıcı görsellerini yerel diskte tutuyor ve imaj manipülasyonu için yerel kütüphaneler kullanıyor. Yatay ölçekleme (autoscaling) isteyince bu darboğaz oluyor. S3'e geçişte legacy koda en az dokunarak ve gecikmeyi en aza indirerek dönüşümü nasıl yönetirim? EFS ara çözüm olur mu, yoksa doğrudan object storage adaptör mimarisi mi kurmalıyım?
Cevap
Kısa cevap: EFS’i hedef olarak seçme — tuzak. Asıl çözüm bir object-storage adaptörü; Laravel’de zaten elindeki Flysystem ile bu çok kısa bir iş.
Sizin engeliniz “yerel disk” değil aslında, “paylaşılan mount varsayımı”. Kod bir ham path bekliyor; ölçeklenince o path düğümler arasında paylaşılmıyor.
- EFS hedef olarak tuzaktır. “Yerel disk” engelini kaldırır ama sizi bir ağ dosya sisteminde tutar: daha kötü gecikme, daha yüksek maliyet ve aynı coupling (kod hâlâ paylaşılan mount sanıyor). EFS’i yalnızca koda gerçekten dokunamadığınız kısa ömürlü bir köprü olarak kullanın, varış noktası olarak değil.
- Doğru hamle object-storage adaptörü. Laravel’de Flysystem zaten var; disk’i
s3yapın ve her okuma/yazmayı ham path yerineStorage::disk()üzerinden geçirin. İş mantığınız “dosya nerede” bilmesin; framework’ün verdiği soyutlamanın arkasına saklanın. Bu can sıkıcı derecede kanıtlanmış (boring) ve tam da bu yüzden doğru. - İmaj manipülasyonunu paylaşılan mount varsaymayın. Dosyayı geçici bir
tmpdosyasına çekip işleyin, ya da bir worker + presigned URL ile yapın. Manipülasyonun “disk hep burada” varsayımını kırın; girdi/çıktıyı object storage’dan alın, sonucu yazın. - Legacy churn’ü minimumda tutun. Tüm dosya erişimini framework’ün filesystem abstraction’ının arkasına alın; çağrı yerlerini tek tek
s3’e taşımak yerine tek bir disk konfigürasyonuyla devredin. Dokunduğunuz yüzey ne kadar küçükse risk o kadar az. - Geçişi dual-read ile yapın. Bir süre önce S3’e bakın, yoksa yerel diske düşün mantığıyla çalışın; arka planda mevcut görselleri backfill edin. Hepsi taşındığında okumayı tamamen S3’e çevirin ve yerel diski devreden çıkarın.
Sonuç: EFS’e para ve gecikme yatırmayın. Ben olsam doğrudan Flysystem s3 diskine geçer, her şeyi Storage::disk() üzerinden okur/yazar, manipülasyonu temp dosya/worker ile çözerdim. Dual-read ile sıfır kesintiyle geçer, backfill bitince yerel diski kaldırırdım. Sıkıcı ama bir kere kurup unutacağınız türden bir mimari.
İlgili Yazılar
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.