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ş.
Senin engelin “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 seni 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 kısa ömürlü bir köprü olarak kullan, varış noktası olarak değil.
- Doğru hamle object-storage adaptörü. Laravel’de Flysystem zaten var; disk’i
s3yap ve her okuma/yazmayı ham path yerineStorage::disk()üzerinden geçir. İş mantığın “dosya nerede” bilmesin; framework’ün verdiği soyutlamanın arkasına saklan. Bu can sıkıcı derecede kanıtlanmış (boring) ve tam da bu yüzden doğru. - İmaj manipülasyonunu paylaşılan mount varsayma. Dosyayı geçici bir
tmpdosyasına çekip işle, ya da bir worker + presigned URL ile yap. Manipülasyonun “disk hep burada” varsayımını kır; girdi/çıktıyı object storage’dan al, sonuca yaz. - Legacy churn’ü minimumda tut. Tüm dosya erişimini framework’ün filesystem abstraction’ının arkasına al; çağrı yerlerini tek tek
s3’e taşımak yerine tek bir disk konfigürasyonuyla devir. Dokunduğun yüzey ne kadar küçükse risk o kadar az. - Geçişi dual-read ile yap. Bir süre önce S3’e bak, yoksa yerel diske düş mantığıyla çalış; arka planda mevcut görselleri backfill et. Hepsi taşındığında okumayı tamamen S3’e çevir ve yerel diski devreden çıkar.
Sonuç: EFS’e para ve gecikme yatırma. 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 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.