CodeShot

Local File Storage در مقابل Blob Storage

Local File Storage فایل‌ها را مستقیماً روی دیسک همان سرور اپلیکیشن ذخیره می‌کند که ساده و بدون وابستگی خارجی است اما در مقیاس‌پذیری و محیط‌های چندسروری با مشکل مواجه می‌شود؛ Blob Storage (مثل Azure Blob یا Amazon S3) یک سرویس ذخیره‌سازی شیء ابری مجزا از سرور اپلیکیشن است که مقیاس‌پذیری تقریباً نامحدود و CDN یکپارچه ارائه می‌دهد.

ویژگیLocal File StorageBlob Storage
مقیاس‌پذیری افقیمشکل‌دار (وابسته به سرور)عالی (مستقل از سرور اپلیکیشن)
هزینهصفر (فضای دیسک موجود)پرداخت بر اساس مصرف
دسترسی جهانی/CDNنیاز به پیاده‌سازی جداگانهمعمولاً یکپارچه
مناسب برایپروژه‌های کوچک تک‌سروریبرنامه‌های production مقیاس‌پذیر

کِی از Local File Storage استفاده کنیم؟

برای پروژه‌های کوچک، محیط توسعه محلی یا سیستم‌هایی که همیشه روی یک سرور واحد اجرا می‌شوند و نیازی به مقیاس افقی ندارند، ذخیره‌سازی محلی فایل می‌تواند کافی باشد.

کِی از Blob Storage استفاده کنیم؟

برای هر اپلیکیشن production با احتمال چند instance (Load Balancer، Auto Scaling)، حجم بالای فایل یا نیاز به تحویل سریع جهانی (CDN)، از Blob Storage استفاده کنید — چون فایل نباید به یک سرور خاص وابسته باشد.

مثال Local File Storage

var path = Path.Combine("wwwroot/uploads", fileName);
await using var stream = File.Create(path);
await file.CopyToAsync(stream);

مثال Blob Storage

var blobClient = containerClient.GetBlobClient(fileName);
await blobClient.UploadAsync(file.OpenReadStream(), overwrite: true);
var url = blobClient.Uri;

اشتباه رایج

استقرار یک اپلیکیشن با چند instance پشت Load Balancer در حالی که فایل‌ها روی دیسک محلی هر سرور ذخیره می‌شوند — کاربری که فایل را در یک سرور آپلود کرده، اگر درخواست بعدی به سرور دیگری برود، فایل را "گم‌شده" می‌بیند. این مشکل کلاسیک مقیاس‌پذیری با Local Storage است.

جمع‌بندی

پروژه تک‌سروری کوچک → Local Storage قابل قبول است؛ هر چیزی که قرار است مقیاس یابد یا چند instance داشته باشد → همیشه Blob Storage.