CDN چیست؟ شبکههای توزیع محتوا به زبان ساده
CDN (شبکه توزیع محتوا) شبکهای از سرورهاست که در شهرهای زیادی پخش شدهاند و نسخههایی از فایلهای وبسایت شما را نگه میدارند — تصاویر، اسکریپتها، فایلهای استایل و گاهی کل صفحات. وقتی کسی از سایت شما بازدید میکند، از مکانی نزدیک به خودش سرویس میگیرد، نه از یک سرور دورافتاده. این کار صفحات را سریعتر میکند، بار را از روی سرور خودتان برمیدارد و کمک میکند سایت با اوج ترافیک کنار بیاید.
چرا CDN وقتی با هوش مصنوعی میسازید اهمیت دارد
ممکن است هرگز خودتان CDN راه نیندازید — بسیاری از پلتفرمهای میزبانی یکی را بهصورت خودکار جلوی سایت شما قرار میدهند. اما اثرش را حس خواهید کرد:
- سرعت. صفحاتی که سریعتر باز میشوند بازدیدکننده را نگه میدارند و یکی از چیزهایی هستند که موتورهای جستجو در نظر میگیرند. چطور وبسایتتان را سریعتر کنید را ببینید.
- «چرا تغییرم دیده نمیشود؟» بعد از انتشار یک بهروزرسانی، ممکن است نسخه کشِ قدیمی برای مدتی کوتاه باقی بماند. دانستن دلیلش خیلی از سردرگمیها را از بین میبرد.
- حریم خصوصی و درستی. اگر CDN چیزِ اشتباهی را کش کند — صفحهای با جزئیات یک کاربر — بازدیدکننده بعدی میتواند آن را ببیند. دانستن اینکه چه چیزی باید و چه چیزی نباید کش شود، به شما کمک میکند سؤال درست بپرسید.
یک تشبیه روزمره
تصور کنید یک نانوایی نانش را از یک مغازه در سراسر کشور میفروشد. هر مشتری، هرقدر هم دور باشد، باید برای تحویل منتظر آن یک مغازه بماند — و در روز شلوغ صف خیلی طولانی میشود.
CDN مثل این است که همان نان را در بقالیهای محلی سراسر کشور هم بگذارید. مشتری نزدیک خودش نان را سریع برمیدارد و نانوایی اصلی فقط گهگاه بقالیها را دوباره پر میکند. نکته این است: وقتی نانوایی دستور پخت را عوض میکند، بقالیها تا وقتی به آنها گفته نشود نان قدیمی را بفروشند، یا تا وقتی موجودی قدیمی تمام نشود، همچنان نان قدیمی میفروشند.
طرز کار CDN
- مبدأ (origin). سایت شما روی سرور اصلی یا پلتفرم میزبانیتان قرار دارد — که به آن origin میگویند.
- لبهها (edge). CDN سرورهایی در جاهای متعدد اجرا میکند که به آنها edge locations یا points of presence میگویند.
- مسیریابی. وقتی بازدیدکننده سایت را درخواست میکند، DNS یا مسیریابی شبکه او را به یک لبه نزدیک میفرستد. چطور دامنهها و DNS کار میکنند را ببینید.
- کش هیت (cache hit). اگر آن لبه یک کپی تازه از فایل را داشته باشد، فوراً آن را میفرستد.
- کش میس (cache miss). اگر نداشته باشد، فایل را از مبدأ میگیرد، برای بازدیدکننده میفرستد و یک کپی برای نفر بعدی نگه میدارد.
- انقضا. هر کپی برای مدت معینی نگه داشته میشود، که با هدرهای کش که سرور شما میفرستد کنترل میشود، یا تا وقتی که پاک شود.
یک مثال کامل: سایت نمونهکار یک عکاس
نمونهکار یک عکاس صفحه اصلی، یک گالری با ۶۰ تصویر بزرگ و یک فرم تماس دارد. مبدأ در اروپاست. بازدیدکنندهای در سنگاپور گالری را باز میکند.
- بدون CDN: هر تصویر از اروپا میآید. هر درخواست یک رفتوبرگشت در سراسر جهان است، پس گالری کند پر میشود.
- با CDN: اولین بازدیدکننده نزدیک سنگاپور باعث میشود لبه همان منطقه تصاویر را بگیرد و ذخیره کند. هر بازدیدکننده بعدی در آن منطقه آنها را از نزدیک و خیلی سریعتر دریافت میکند.
حالا عکاس تصویر اصلی صفحه اصلی را عوض میکند و دوباره منتشر میکند. آنچه تعیین میکند بازدیدکنندگان نسخه جدید را ببینند این است:
/index.html → مدت کش کوتاه، با بررسی مکرر
/assets/index-3f9a2c.js → برای مدت طولانی کش میشود
/assets/hero-8b41d0.jpg → برای مدت طولانی کش میشود
ابزارهای ساخت مدرن، از جمله Vite، به فایلها نامهای هششده میدهند، مثل hero-8b41d0.jpg. وقتی یک فایل تغییر میکند، نامش هم عوض میشود، پس صفحه درخواست یک فایل کاملاً جدید میدهد که هیچ کشی تاکنون ندیده است. خود صفحه HTML فقط برای مدت کوتاهی کش میشود، پس به سرعت بازدیدکننده را به فایلهای جدید هدایت میکند. این روش استاندارد برای داشتن هم کش طولانی و هم بهروزرسانی سریع است.
فرم تماس متفاوت است. ارسالهای آن هر بار به سرور میروند و هرگز نباید کش شوند.
چه چیزی را کش کنیم و چه چیزی را نه
| معمولاً کش طولانی | معمولاً کش کوتاه | در CDN مشترک کش نشود |
|---|---|---|
| تصاویر، فونتها، ویدیوها | صفحات HTML یک سایت عمومی | صفحات ورود کاربر، داشبوردها |
| جاوااسکریپت و CSS با نام هششده | دادههای عمومی API که گاهی تغییر میکنند | هر چیزی که داده شخصی دارد |
| فایلهای قابل دانلود که به ندرت تغییر میکنند | ارسال فرم، پرداخت، هر درخواست POST |
اصطلاحات کلیدی
| اصطلاح | معنی |
|---|---|
| Origin | سرور یا میزبان اصلی شما، جایی که فایلهای واقعی قرار دارند. |
| Edge / PoP | مکانی از CDN که بازدیدکنندگان نزدیک را سرویس میدهد. |
| Cache hit / miss | لبه فایل را داشت / باید آن را از مبدأ میگرفت. |
| TTL | Time to live — مدتی که یک کپی کش نگه داشته میشود. |
| هدر Cache-Control | دستوری که سرور شما میفرستد و میگوید آیا و برای چه مدتی چیزی میتواند کش شود. |
| Purge / invalidate | دستور به CDN برای پاک کردن فوری کپیهای کش. |
| Cache busting | تغییر نام یا URL فایل وقتی تغییر میکند، تا کشها نسخه جدید را بگیرند. |
| Latency | تأخیری که از فاصله و تعداد مسیرهای شبکه ایجاد میشود. |
برای کش کردن بهطور کلیتر — در مرورگرها، سرورها و پایگاههای داده — کش چیست را ببینید.
باورهای غلط رایج
- «CDN همه چیز را سریع میکند.» فقط تحویل فایلها را سریع میکند. یک کوئری کند در پایگاه داده یا یک فراخوانی کند هوش مصنوعی روی سرور شما هنوز کند است.
- «CDN جای میزبانی را میگیرد.» جلوی میزبانی شما قرار میگیرد. هنوز به مبدأ نیاز دارید.
- «اگر سایت را بهروز کردم، همه فوراً میبینند.» نسخههای قدیمی ممکن است برای مدت کوتاهی در CDN و مرورگرها باقی بمانند. برای بررسی تازهسازی سخت کنید و از نامهای هششده استفاده کنید.
- «کش کردن همیشه امن است.» کش کردن یک صفحه شخصیسازیشده در یک کش مشترک ریسک واقعی حریم خصوصی است. پاسخهای خصوصی باید بهعنوان غیرقابل کش علامتگذاری شوند.
- «CDN فقط برای شرکتهای بزرگ است.» بسیاری از میزبانها برای سایتهای کوچک، بدون تلاش اضافی، یکی را در اختیار میگذارند.
از سازنده هوش مصنوعیتان چه بپرسید
- «آیا جلوی این سایت یک CDN است؟ کدام فایلها را کش میکند و برای چه مدتی؟»
- «مطمئن شو جاوااسکریپت، CSS و تصاویر ساختهشده نامهای هششده و مدت کش طولانی دارند و HTML مدت کوتاه.»
- «هرگز صفحات ورود کاربر یا پاسخهای API حاوی داده شخصی را در یک کش مشترک کش نکن.»
- «تصاویر را فشرده و کوچک کن تا گالری سریع بارگذاری شود.»
- «یک بهروزرسانی منتشر کردم ولی هنوز نسخه قدیمی را میبینم — مشکل از کش مرورگر است یا CDN؟»
CDN و Mythex
وقتی در Mythex منتشر میکنید، رابطهای کاربری ایستا بهصورت سایت ایستا مستقر میشوند و مستندات اشاره میکنند که کشهای CDN ممکن است بعد از یک بهروزرسانی برای مدت کوتاهی عقب بمانند: اگر بعد از انتشار مجدد هنوز نسخه قدیمی را میبینید، آدرس عمومی را با تازهسازی سخت باز کنید. برای این کار چیزی برای پیکربندی وجود ندارد. اگر یک دامنه سفارشی را وصل میکنید که DNS آن روی Cloudflare است، مستندات از شما میخواهند رکورد را روی «DNS only» تنظیم کنید، نه proxied، تا Mythex بتواند HTTPS را درست صادر کند. چطور منتشر کنید و دامنههای سفارشی را در مستندات ببینید و راهنمای ما درباره میزبانی وب را هم بخوانید.
پرسشها
CDN به زبان ساده چیست؟
CDN (شبکه توزیع محتوا) شبکهای از سرورها در مکانهای متعدد است که نسخههایی از فایلهای وبسایت شما را نگه میدارند. بازدیدکنندگان از مکانی نزدیک خودشان سرویس میگیرند، نه از سرور اصلی شما، پس صفحات سریعتر باز میشوند و سرور اصلی کار کمتری دارد.
چرا بعد از بهروزرسانی سایت هنوز نسخه قدیمی را میبینم؟
معمولاً چون یک کپی از فایل قدیمی در کش باقی مانده است — در CDN، در مرورگر شما، یا در هر دو. تازهسازی سخت (hard refresh) سمت مرورگر را درست میکند؛ کپیهای CDN خودشان منقضی میشوند یا میتوان آنها را پاک کرد. ابزارهای ساخت بیشتر این مشکل را با دادن نام جدید به فایلهای تغییرکرده حل میکنند.
برای یک وبسایت کوچک به CDN نیاز دارم؟
اغلب بدون انتخاب کردن هم یکی دارید، چون بسیاری از پلتفرمهای میزبانی بهصورت خودکار CDN را جلوی سایت قرار میدهند. اگر سرویس شما این کار را نمیکند و بازدیدکنندگانتان در کشورهای مختلف پراکندهاند، افزودن آن معمولاً ارزشمند است.
آیا CDN میتواند دادههای برنامه و صفحات ورود کاربر را کش کند؟
میتواند هر چیزی را که اجازه دارد کش کند، و به همین دلیل باید با دقت تنظیم شود. فایلهای عمومی مثل تصاویر، اسکریپتها و استایلها ایدهآلاند. محتوای شخصی یا صفحات ورود کاربر معمولاً نباید در یک CDN مشترک کش شوند، وگرنه ممکن است کاربری دادههای کاربر دیگر را ببیند.