CDN برای تسریع تحویل محتوای استاتیک — راهنمای جامع
وبسایتها و اپلیکیشنهای مدرن باید غالباً مقادیر زیادی از محتوای استاتیک را به کاربران نهایی تحویل دهند. این محتوا شامل تصاویر، استایلشیتها، کدهای جاوا اسکریپت و ویدیوها هستند. از آنجا که حجم و اندازه این محتوای استاتیک افزایش یافتهاند، مصرف پهنای باند را بسیار بالا میبرند و زمان بارگذاری صفحه نیز افزایش مییابد. بدین ترتیب تجربه مرور برای کاربران تجربه ناخوشایندی خواهد شد و ظرفیت موجود سرورهای شما کاهش مییابد. چاره کار استفاده از CDN است.
برای کاهش چشمگیر زمانهای بارگذاری صفحه، بهبود عملکرد و کاهش پهنای باند و هزینههای زیرساخت میتوانید یک CDN یعنی «شبکه تحویل محتوا» (content delivery network) پیادهسازی کنید تا فایلها بر روی سرورهایی که در یک گستره جغرافیایی توزیع یافتهاند، کش شوند.
در این راهنما مروری سطح بالا بر CDN ها و طرز کار آنها خواهیم داشت. همچنین مزیتهایی که برای اپلیکیشنهای وب ارائه میدهند را نیز بررسی میکنیم.
CDN چیست؟
شبکه تحویل محتوا گروهی از سرورهای با توزیع جغرافیایی هستند که برای تحویل محتوای استاتیک بهینهسازی شدهاند. این محتوای استاتیک میتواند تقریباً هر نوع دادهای باشد، اما CDN ها به طور معمول برای تحویل صفحههای وب و فایلهای مرتبط با آنها، استریم کردن ویدیو، صوت و یا بستههای نرمافزاری بزرگ استفاده میشوند.
یک CDN از چند نقطه حضور (PoP) در موقعیتهای جغرافیایی مختلف تشکیل مییابد که هر یک شامل چند سرور لبه هستند که فایلها را از مبدأ یا سرور میزبان شما کَش میکنند.
زمانی که کاربری از وبسایت شما بازدید میکند و محتوای استاتیکی مانند تصاویر، یا فایلهای جاوا اسکریپت را درخواست میکند، این تقاضاها از سوی CDN به نزدیکترین سرور لبه راهنمایی میشوند و محتوا از آنجا سرو میشود. اگر سرور لبه، فایلهای کَش شده را نداشته باشد، یا فایلهای کش شده منقضی شده باشند، CDN آخرین نسخه از فایلها را از سرور لبه CDN نزدیک دیگر یا سروهای اصلی خود شما دریافت کرده و کش میکند. اگر لبه CDN مدخل کش برای فایلهای شما را داشته باشد (این حالت در اغلب موارد اگر وبسایت شما ترافیک معقولی داشته باشد، برقرار است) کپی کش شدهای را به کاربر نهایی ارسال میکند.
بدین ترتیب کاربران در نقاط مختلف جغرافیایی میتوانند با کمترین مسافت و زمان به محتوای استاتیک دسترسی داشته باشند، و محتوا را به طور مستقیم از نزدیکترین کش های لبه دریافت کنند. از نتایج این فناوری میتوان به کاهش تأخیر و فقدان بستهها به مقدار بسیار زیاد، تسریع قابل ملاحظه در بارگذاری صفحهها و کاهش چشمگیر در باری که روی زیرساخت اصلی شما قرار دارد، اشاره کرد.
CDN با صرف هزینههای بیشتر، ویژگیهای اضافی دیگری نیز دارد که شامل کاهش DDoS و محدودسازی نرخ، آنالیز کاربر و بهینهسازی استریم کردن یا کاربردهای موبایل میشود.
طرز کار CDN
زمانی که یک کاربر از وبسایت شما بازدید میکند، ابتدا پاسخی از سرور DNS شما میگیرد که شامل آدرس آیپی وبسرور میزبان شما است. سپس مرورگر این کاربر، محتوای صفحه وب را درخواست میکند که در غالب موارد شامل انواع مختلفی از فایلهای استاتیک مانند صفحههای HTML، استایلشیت های CSS، کدهای جاوا اسکریپت و تصاویر هستند.
زمانی که از یک CDN استفاده کنید و این فایلهای استاتیک را روی آن بارگذاری نمایید، دو روش برای این کار وجود دارد. یک روش این است که فایلها را به صورت دستی روی سرور CDN بارگذاری کنید و روش دوم این است که از سرورهای CDN بخواهید که این فایلها را به صورت خودکار pull بکنند. هر دو این راهکارها در بخش بعدی بررسی شدهاند. سپس وبسرور خود را تنظیم میکنید تا لینکها را به محتوای استاتیک بازنویسی کند به طوری که این لینکها به فایلهایی که از سوی CDN میزبانی میشوند، اشاره کنند. اگر از یک CMS مانند وردپرس استفاده میکنید، این بازنویسی لینک با استفاده از افزونه شخص ثالثی مانند CDN Enabler قابل پیادهسازی است.
بسیاری از CDN ها از دامنههای خاص پشتیبانی میکنند و امکان ایجاد یک رکورد CNAME تحت دامنه شما وجود دارد. بدین ترتیب میتوانید به یک نقطه انتهایی CDN اشاره کنید. زمانی که CDN درخواست یک کاربر را در این نقطه انتهایی (واقع شده در لبه که نسبت به سرورهای بک-اند، به کاربر بسیار نزدیکتر است)، دریافت میکند، آن را به نقطه حضور (PoP) که به کاربر نزدیک است، هدایت میکند. این PoP در غالب موارد شامل یک یا چند سرور لبه CDN است که معمولاً در نقطه تبادل اینترنت (IxP) واقع شدهاند. Ixp اساساً یک مرکز داده است شرکتهای ISP برای اتصال شبکههایشان به هم استفاده میکنند. سپس لود بالانس داخلی CDN درخواستها را به سرور لبه که در این PoP قرار دارد، هدایت میکند و در نهایت محتوا به کاربر تحویل داده میشود.
مکانیسمهای CDN
مکانیسمهای کش کردن در میان ارائهدهندگان مختلف خدمات CDN متفاوت است؛ اما به طور کلی روش کار آنها به صورت زیر است:
- زمانی که CDN نخستین درخواست را برای یک فایل استاتیک مانند تصویر PNG دریافت میکند، هنوز فایل را به صورت کش شده ندارد و باید یک کپی از این فایل را از یک لبه سرور CDN نزدیک یا از سرور اصلی دریافت کند. این وضعیت به عنوان یک «فقدان کش» (cashe miss) شناخته میشود و معمولاً از طریق بررسی هدر پاسخ HTTP که حاوی عبارت X-Cache: MISS است، قابل تشخیص خواهد بود. درخواست اولیه کندتر از درخواستهای آتی است، زیرا پس از تکمیل شدن این درخواست، در لبه کش میشود.
- درخواستهای آتی برای این فایل «هیت کش» (cache hits) نامیده میشوند که به این موقعیت لبه هدایت میشود و اینک تا زمان انقضا از کش سرو میشود (که معمولاً از طریق هدرهای HTTP تعیین میشوند). این پاسخها به طور قابل توجهی سریعتر از درخواست اولیه است و تأخیرها به میزان زیادی برای کاربران کاهش مییابد و ترافیک به روی شبکه CDN آفلود میشود. میتوانید با بررسی هدر پاسخ HTTP تأیید کنید که پاسخها از کش CDN سرو میشوند و در این وضعیت شامل عبارت X-Cache: HIT خواهد بود.
برای این که در مورد طرز پیادهسازی CDN های خاص بیشتر بدانید، میتوانید به مستندات ارائه دهنده CDN خود مراجعه کنید. در بخش بعدی دو نوع متداول از CDN یعنی CDN های push و pull را معرفی میکنیم.
منطقههای Push در برابر Pull
اغلب ارائهدهندگان CDN دو روش کش کردن برای داده ارائه میکنند: منطقههای pull و منطقههای push.
در پیکربندی منطقههای Pull آدرس سرور اصلی وارد میشود و به CDN اجازه داده میشود که به طور خودکار فایلها را دریافت میکند و همه منابع استاتیک موجود را روی سایت کش میکند. مناطق pull به طور معمول برای تحویل فایلهای با حجم کم تا متوسط مانند HTML، CSS و جاوا اسکریپت استفاده میشوند که به طور مکرر بهروزرسانی میشوند. پس از ارائه آدرس سرور اصلی CDN، مرحله بعدی این است که لینکهای فایلهای استاتیک را تغییر دهیم به طوری که به URL ارائه شده از سوی CDN اشاره کنند. از این نقطه به بعد CDN درخواستهای فایل ورودی کاربران را مدیریت میکند و محتوا را از کش های جغرافیایی توزیع یافته و مبدائی که مناسب باشد تحویل میدهد.
برای استفاده از Push Zone باید دادههای خود را به یک باکت یا مکان ذخیرهسازی اختصاصی آپلود کنید. سپس CDN آن را به زنجیره سرورهای لبه توزیع یافته push میکند. مناطق push معمولاً برای فایلهای بزرگتر استفاده میشوند که با تناوب کمتری درخواست میشوند، مثلاً آرشیوها، بستههای نرمافزاری، فایلهای PDF، ویدیوها و فایلهای صوتی.
مزایای استفاده از CDN
تقریباً هر سایتی میتواند از مزیتهای بهکارگیری CDN بهرهمند شود، اما به طور کلی دلایل اصلی برای پیادهسازی CDN این است که پهنای باند از سرورهای اصلی به سرورهای CDN انتقال یابد و میزان تأخیر برای کاربرانی که در نقاط جغرافیایی مختلف قرار دارند کاهش یابد. در ادامه این مزیتها و برخی مزایای عمده دیگر استفاده از CDN را بررسی کردهایم.
آفلود از سرورهای اصلی
اگر سرورهای شما به سقف میزان پهنای باند مجاز رسیدهاند، میتوانید با آفلود (Offload) کردن فایلهایی مانند تصاویر، ویدئوها، CSS و فایلهای جاوا اسکریپت، استفاده از پهنای باند را تا حدود زیادی کاهش دهید. شبکههای تحویل محتوا برای تحویل محتوای استاتیک طراحی و بهینهسازی شدهاند و درخواستهای کاربران برای این محتوا توسط سرورهای CDN لبه مسیریابی و ارائه میشود. این وضعیت مزیت افزودهای دارد و آن این است که باعث کاهش بار روی سرورهای اصلی میشود، چون دادههایشان را با تناوب بسیار کمتری سرو میکنند.
تأخیر کم برای بهبود تجربه کاربر
اگر عمده کاربران شما دارای توزیع جغرافیایی پراکندهای هستند و بخش عمدهای از ترافیک از مکانهای دوردست ایجاد میشوند، استفاده از CDN میتواند از طریق کش کردن فایلهای استاتیک روی سرورهای لبه که به کاربران نزدیکتر است، باعث کاهش میزان تأخیر شود. با کاهش مسافت بین کاربران و محتوای استاتیک میتوانید محتوای خود را سریعتر به کاربران تحویل دهید و با ارتقای سرعت بارگذاری صفحه، تجربه کاربری آنها را بهبود ببخشید.
این مزیتها در مورد وبسایتهایی که به طور عمده محتوای ویدئویی ارائه میدهند، چندین برابر مهمتر است، چون در این حالت میزان تأخیر بالا و بارگذاری کُند، به طور مستقیم بر روی تجربه کاربری و درگیر شدن کاربران با محتوا تأثیر میگذارد.
مدیریت زمانهای اوج ترافیک و جلوگیری از قطع شدن سرور
CDN ها امکان مدیریت نقاط اوج ترافیک و هجوم کاربران به وبسایت را ایجاد میکنند. این کار از طریق لود بالانس محتوای استاتیک روی شبکه تحویل محتوا صورت میگیرد که به صورت سرورهایی با توزیع جغرافیایی هستند. شما میتوانید با آفلود و کش کردن محتوای استاتیک روی شبکه تحویل، با زیرساخت موجود خود، به تعداد بیشتری از کاربرانِ همزمان خدمات دهید.
در مورد وبسایتهایی که از یک سرور اصلی منفرد استفاده میکنند، این زمانهای اوج ترافیک میتواند کل سیستم را غرق کند و موجب خاموشی ناخواسته و داون شدن سرور شود. انتقال ترافیک به زیرساختهای CDN که زمان آپتایم بالایی دارند و برای مدیریت سطوح بالایی از ترافیک وب طراحی شدهاند، میتواند موجب افزایش زمان دسترسی به وبسایت و فایلها و محتوای آن شود.
کاهش هزینهها
از آن جا که ارائه محتوای استاتیک معمولاً بخش عمدهای از مصرف پهنای باند شما را تشکیل میدهد، آفلود کردن فایلها به یک شبکه تحویل محتوا موجب کاهش قابل توجهی در هزینههای زیرساختی سرور شما میشود. علاوه بر کاهش هزینههای پهنای باند، CDN میتواند هزینههای سرور را از طریق کاهش بار روی سرورهای اصلی و همچنین بالا بردن مقیاس سرویسدهی سرورهای موجود، کاهش دهد. در نهایت برخی ارائهدهندگان CDN صورتحسابهای ماهانه با مبلغ ثابتی ارائه میدهند که امکان تبدیل هزینههای متغیر ماهانه پهنای باند به هزینههای پایدار و قابل پیشبینی را فراهم میکند.
افزایش امنیت
یکی دیگر از موارد استفاده معمول برای CDN ها کاهش خطرات حمله DDoS است. اغلب ارائهدهندگان CDN ویژگیهایی دارند که درخواستها به سرورهای لبه را رصد و فیلتر میکنند. این سرویسها، ترافیک وب را برای یافتن الگوهای مشکوک آنالیز میکنند و با مسدودسازی ترافیکهای مشکوک به حمله مخرب، امکان دسترسی کاربران عادی به وبسایت را فراهم میسازند. ارائهدهندگان CDN معمولاً طیفی از سرویسهای کاهش ریسک DDoS را ارائه میدهند که از حفاظت در برابر حملههای رایج در سطح زیرساخت (OSI لایه 3 و 4) تا سرویسهای پیشرفتهتر کاهش ریسک و محدودسازی نرخ (rate limiting) را شامل میشود.
به علاوه، CDN ها امکان پیکربندی SSL کامل را ایجاد میکنند، به طوری که میتوانید ترافیک بین CDN و کاربر نهایی و همچنین ترافیک بین CDN و سرورهای اصلی را به طور کامل با استفاده از گواهیهای SSL سفارشی ارائه شده از سوی خود CDN رمزنگاری کنید.
انتخاب بهترین گزینه
اگر نقطه تنگنای سرور شما، مربوط به بار CPU است و نه پهنای باند؛ در این صورت استفاده از یک CDN ممکن است مناسبترین راهحل برای شما نباشد. در این حالت، کَش کردن محلی با استفاده از موتورهای کش متداولی همچون NGINX یا Varnish میتواند با ارائه فایلها از حافظه سیستم، بار روی سرور را تا حدود زیادی کاهش دهد.
پیش از راهاندازی یک CDN، مراحل بهینهسازی دیگر مانند minify کردن و فشردهسازی فایلهای جاوا اسکریپت و CSS، فعالسازی امکان فشردهسازی درخواست HTTP وبسرور و موارد مشابه، میتوانند تأثیر چشمگیری بر روی زمانهای بارگذاری صفحه و مصرف پهنای باند داشته باشند.
یکی از ابزارهای مفید برای اندازهگیری سرعت بارگذاری صفحه و بهبود آن، PageSpeed گوگل است. ابزار مفید دیگر که آنالیز آبشاری از زمانهای درخواست و پاسخدهی و همچنین گزینههای ممکن برای بهینهسازی ارائه میکند، وبسایت Pingdom است.
نتیجهگیری
یک شبکه تحویل محتوا میتواند راهحلی سریع و مؤثر برای بهینهسازی و مقیاسپذیری وبسایت شما باشد. با کش کردن فایلهای استاتیک روی شبکه توزیع یافته جغرافیایی از سرورهای بهینه میتوانید زمانهای بارگذاری صفحه و همچنین تأخیر لود صفحه برای کاربران را تا حدودی زیادی کاهش دهید. به علاوه CDN ها با جذب درخواستهای کاربران و پاسخدهی از کش روی سرورهای لبه، امکان کاهش چشمگیر مصرف پهنای باند را فراهم میسازند و از این رو هزینههای پهنای باند و زیرساخت سرور کاهش مییابد.
CDN ها با وجود افزونهها و پشتیبانی شخص ثالثی که در فریمورکهایی مانند وردپرس، دروپال، جانگو روبیآنریلز (Ruby on Rails) وجود دارد و همچنین ویژگیهایی مانند کاهش خطر DDoS، SSL کامل، رصد کاربران و فشردهسازی فایلها، میتوانند ابزار مؤثری برای افزایش امنیت و بهینهسازی وبسایتهای با ترافیک بالا باشند.
اگر به این نوشته علاقهمند بودید، موارد زیر نیز احتمالاً مورد توجه شما واقع میشوند:
- چگونه یک وب سایت با مخاطبان جهانی داشته باشیم؟
- افزایش سرعت سایت با ۹ راهکار فوقالعاده بهبود سئو
- مجموعه آموزشهای ابزارها و راهکارهای مدیریت وبسایتها
- راهنمای جامع راهاندازی وبسایت با وردپرس
- مجموعه آموزشهای طراحی و برنامه نویسی وب
==