فایلها را از طریق بکاند پروکسی نکن
یک جابهجایی ذهنی ساده که طراحی سیستم فایل در مقیاس را عوض میکند.
بیشتر توسعهدهندهها سیستم فایل را یکجور شروع میکنند:
کاربر فایل آپلود میکند → بکاند پردازش میکند → بکاند ذخیره میکند → بکاند موقع دانلود سرو میکند.
طبیعی، امن و تحتکنترل بهنظر میرسد.
و کار میکند… تا وقتی که دیگر کار نکند.
در مقیاس، این طراحی کمکم بکاند را به چیزی تبدیل میکند که برایش ساخته نشده:
یک پروکسی فایل با throughput بالا.
مسئلهٔ پنهان
وقتی همهچیز از بکاند رد میشود:
- API به پهنایباند وابسته میشود
- تأخیر با بار بالا میرود
- مقیاس گران میشود
- و «سرور منطق کسبوکار» تبدیل به pipeline استریم فایل میشود
نه چون عمداً بد طراحی کردید.
چون مسئولیتها را جدا نکردید.
اشتباه اصلی
دو سیستم کاملاً متفاوت را مخلوط میکنید:
- Control Plane → تصمیم، مجوز، احراز هویت
- Data Plane → انتقال خام فایل، استریم، پهنایباند
بیشتر سیستمها وقتی هر دو داخل بکاند زندگی میکنند شکست میخورند.
مدل ذهنی بهتر
بهجای:
«بکاند فایلها را مدیریت میکند»
فکر کنید:
«بکاند فقط تصمیم میگیرد چه کسی اجازهٔ دسترسی به فایل دارد»
همین.
بیشتر نه.
معماری مدرن
سیستمهای مقیاسپذیر عملاً اینطور رفتار میکنند:
Client
↓
Backend (Auth + Policy Decision)
↓
Signed Access (URL / Cookie / Token)
↓
CDN / Object Storage
↓
استریم مستقیم به کلاینت
امنیت واقعاً کجاست؟
این بخش را خیلیها غلط میفهمند.
امنیت با پروکسی کردن فایل از بکاند تضمین نمیشود.
از اینها میآید:
- توکنهای امضاشدهٔ کوتاهعمر
- scope سختگیرانه (view / download / upload)
- امضای رمزنگاری
- اعتبارسنجی در edge
- ذخیرهسازی private-by-default
بکاند دیگر دروازهای نیست که داده را حمل کند.
دروازهای است که مجوز صادر میکند.
چرا بهتر مقیاس میشود
با این مدل:
بکاند
- بدون state
- سبک
- مقیاس افقی
- بدون گلوگاه پهنایباند
CDN / Storage
- بهینهشده برای استریم
- توزیعشدهٔ جهانی
- آگاه از cache
- ساختهشده برای throughput بالا
هر سیستم کار خودش را میکند.
بدون همپوشانی. بدون اصطکاک.
جابهجایی ذهنی
اگر یک ایده بماند، این است:
بکاند مقیاسپذیر داده را جابهجا نمیکند. دسترسی به داده را مجاز میکند.
بهمحض اینکه بکاند شروع به «حمل فایل» کند، دوباره control و data را کوپل کردهاید — و درد مقیاس از همانجا شروع میشود.
جمعبندی
بیشتر معماریهای سیستم فایل بهخاطر storage ضعیف شکست نمیخورند.
بهخاطر یک سوءتفاهم ساده شکست میخورند:
بکاند را خط لولهٔ فایل دیدن، نه موتور تصمیم.
نسخهٔ canonical. همچنین در Medium.