CDN مخفف Content Delivery Network بوده و به شبکهای از کامپیوترها اشاره میکند که به منظور ارائهٔ محتوا به کاربران به سریعترین شکل ممکن طراحی و ساخته شدهاند و اگر بخواهیم به صورت دقیقتر این مفهوم را بشکافیم، CDN به تعدادی از سرورها اشاره دارد که از لحاظ جغرافیایی مابین سرور اصلی و کاربر قرار میگیرند به طوری که ریکوئست کاربران به منظور دسترسی به محتوای مد نظرشان به جای سرور اصلی، به این سرورها ارسال میشود که اساساً هدف از انجام چنین کاری کاهش تأخیر در ارسال و دریافت دیتا و همچنین افزایش سرعت ارائهٔ محتوا است (سرورهای نزدیکتر به کاربران که به آنها Points of Presence یا به اختصار PoP نیز گفته میشود، محتوای قابل ذخیرهسازی در حافظۀ کَش را ذخیره میکنند و بدین ترتیب نیز موجب کاهش بار کاری سرور اصلی میشوند.)
CDN انواع مختلفی دارد که به منظور ارائهٔ سرویسهای مختلف طراحی شدهاند و همچنین توپولوژی شبکهٔ این سرورها نیز میتواند متفاوت باشد. برای مثال، Scattered CDN یا شبکههای پراکنده را میتوان نام برد که این توپولوژی با هدف ارائۀ سرورهای PoP فراوان در اقصی نقاط دنیا طراحی شده است (برای نمونه، کمپانی Akamai از این توپولوژی برای سرورهای CDN خود استفاده میکند و این در حالی است که این شرکت یکی از بزرگترین حملهٔ DDoS دنیا بر روی وبسایت گیتهاب را کنترل کرد که برای آشنایی بیشتر با این موضوع، توصیه میکنیم به مقالهٔ GitHub هدف بزرگترین حملهٔ DDoS در جهان تا سال ۲۰۱۸ قرار گرفت! مراجعه کنید.)
همچنین توپولوژی دیگری برای سرورهای CDN تحت عنوان Consolidated CDN وجود دارد که هدف از طراحی این توپولوژی بهکارگیری سرورهای کمتر اما با قدرت بیشتر به منظور بهبود پرفورمنس سرور است تا هر سرور توانایی مقابله با حملاتی همچون دیداس را داشته باشد.
آشنایی با انواع شبکههای توزیع محتوا
همانطور که پیشتر اشاره کردیم هدف اصلی CDN کاهش تأخیر و همچنین بالا بردن سرعت رندرینگ صفحات وب به منظور بهبود سرعت ارائۀ محتوا به کاربران است اما در دنیای مدرن امروز تصاویری به اندازۀ دو مگابایت و لایبرریهای جاوااسکریپتی با اندازه چند کیلوبایت منجر به تأخیری ناچیز در لود صفحات وب میشوند که به نظر میرسد این مسئله از اهمیت کمتری برخوردار بوده و اهداف دیگری نیز باعث گسترش این شبکهها در طول زمان شدند. در همین راستا شبکههای CDN در دو دسته کلی قرار میگیرند که در ادامه به تشریح هر یک از آنها میپردازیم.
Content-Oriented CDN
در ابتدا شبکههای توزیع محتوا (CDN) برای دسترسی به محتواهای اِستاتیکی همچون فایلهای CSS ،HTML و JS ساخته شده بودند؛ بدین معنی که دولوپرها پس از ایجاد یا آپلود محتوای خود بایستی آن را در داخل این سرورها اصطلاحاً Push میکردند. به عبارت دیگر، محتوای حافظۀ کَش در چنین سرورهایی حتی در صورت ارسال ریکوئست کاربران به آنها بهخودیخود آپدیت نمیشد اما بعدها قابلیت به اصطلاح Origin Pulling به سرورها افزوده شد تا فرآیندهایی همچون ارسال ریکوئست به سرور و دریافت ریسپانس از آن به صورت اتوماتیک انجام شود بدین صورت که ریکوئست کاربر به شبکهٔ توزیع محتوا ارسال شده و در ادامه سرور ریکوئست مد نظر کاربر را به صورت اتوماتیک به سرور اصلی وبسایت ارسال کرده و ریسپانس دریافت شده را در حافظۀ کَش خود ذخیره میکند.
لازم به ذکر است که Availability (میزان دسترسیپذیری) به محتوای درخواستشدۀ کاربران به عنوان فاکتوری مهم در این سرورها مد نظر قرار گرفته است به طوری که اکثر سرورهای مدرن شبکههای توزیع محتوا، آخرین نسخه از وبسایت اصلی را در حافظۀ کَش خود ذخیره میکنند تا در شرایطی که سرور اصلی داون شد، نسخهای از آن را در اختیار کاربران قرار دهند که در این صورت کاربران متوجه داون شدن سرور نخواهند شد.
علاوه بر این، بسیاری از سرورهای شبکههای توزیع محتوا مدرن امروزی موجب بهبود پرفورمنس وبسایت نیز میشوند. برای مثال، اندازۀ تصاویر وبسایت اصلی را به صورت اتوماتیک تغییر داده و آنها را ذخیره میکنند تا در آینده تصاویر متناسب با اندازهٔ درخواستشده از سمت کاربران را در معرض دید ایشان قرار دهند (برای مثال، حالتی را در نظر بگیرید که بخشی از وبسایت شما تصویری به اندازۀ دو مگابایت دارا است و کاربری با صفحۀ نمایشی به پهنای ۳۰۰ پیکسل یک ریکوئست به وبسایت ارسال کرده است که در چنین شرایطی سرور سیدیان یک کپی به اندازۀ ۳۰۰ پیکسل از تصویر ساخته و آن را به کاربر ارائه میدهد و در ادامه تصویر مذکور را کَش میکند تا در آینده و در پاسخ به ریکوئست سایر کاربرانِ موبایل نیز همان تصویر را برای ایشان ارسال کند که این روش خود موجب افزایش سرعت لود وبسایت خواهد شد.)
Security-Oriented CDN
ویژگی دیگری که به سرورهای شبکههای توزیع محتوا افزوده شده است، افزایش مقاومت آنها در برابر رباتها و حملاتی از نوع DDoS است. سرور سیدیان بیرونیترین لایۀ معماری وبسایت را تشکیل میدهد و اولین کامپوننت دریافتکنندۀ ریکوئست کاربر است که از همین روی میتواند حملات #دیداس را زودتر از سایر کامپوننتها تشخیص داده و با استفاده از سرورهای مخصوصِ مقابله با حملات دیداس که Scrubbers نام دارند، آنها را بلاک کند تا چنین حملاتی به سرور اصلی نرسیده و موجب داون شدن آن نشوند.
علاوه بر این، سرورهای شبکههای توزیع محتوا میتوانند با استفاده از اطلاعاتی که از سمت کلاینتها دریافت میکنند، ریکوئستهایی همچون درخواستهای اِسپم و رباتها را که از آدرسهای IP مشکوک هستند، شناسایی کنند. به علاوه اینکه چنین سرورهایی میتوانند انواع مختلف Crawler و رفتار آنها را بررسی کرده و یک دستهبندی صحیحتر نسبت به ترافیک ورودی خود داشته باشند (برای مثال، فرض کنید سرور یک شبکهٔ توزیع محتوا به سرورهای دو وبسایت با عناوین الف و ب متصل بوده و همچنین از آنها محافظت میکند. حال یک اصطلاحاً Scraper که قصد استخراج دیتا از وبسایت الف را داشته توسط سیدیان شناسایی میشود اما در چنین شرایطی این Scraper توانایی استخراج دیتای وبسایت ب را نخواهد داشت چرا که الگوی آن توسط سیدیان شناسایی شده و فیلتر خواهد شد.)
همچنین ارائهدهندگان سرویس شبکههای توزیع محتوا علاوه بر اینکه قابلیت آپلود اصطلاحاً SSL Certificate کاستومایزشدۀ مشتریان را برای ایشان فراهم میکنند، خود نیز یکسری پیشنهاد در رابطه با SSL Certificate ارائه میدهند که ارائۀ چنین سرویسی دو مزیت برای کاربران دارد که در ادامه هر یک از آنها را بررسی میکنیم:
- زمانی که SSL Certificate دچار آسیبی میشود، ارائهدهندگان سرویس سیدیان به سرعت در پی حل آن مشکل برمیآیند چرا که هرگونه آسیبپذیری ممکن است منجر به از دست رفتن تعداد زیادی از مشتریان سرویس ایشان شود. از همین روی، معمولاً قبل از اینکه کسی از وجود آسیبپذیری خبردار شود، آن را برطرف میکنند.
- فرآیند اتصال وبسایت به سرورها سریعتر انجام میپذیرد. به عبارت دیگر، در صورتی که چند وبسایت به یک سیدیان مشترک متصل شوند و یکی از وبسایتها کانکشنی به اصطلاح Valid (معتبر) با این سرور و با استفاده از SSL Certificate آن سرور برقرار کرده باشد، سایر وبسایتها به منظور برقراری کانکشن از طریق همان SSL Certificate دیگر نیازی به تکرار آن فرآیند نخواهند داشت که این مسئله تأثیر زیادی در سرعت برقراری کانکشن برای یک وبسایت خاص ندارد اما در مقیاس بزرگتر و برای چند وبسایت، سرعت برقراری کانکشن یک فاکتور مهم در نظر گرفته میشود.
آشنایی با نحوۀ استفاده از CDN
معمولاً استفاده از یک سرور شبکهٔ توزیع محتوا نیازمند اِعمال تغییر در تنظیمات DNS Server در کنترل پنل مربوط به دامین ثبتشده است که در نتیجه تمام ترافیکی که قبلاً به سمت سرور اصلی وبسایت ارسال میشد، حال به سمت سرورهای شبکهٔ توزیع محتوا خواهد رفت ولی از آنجایی که فرآیند مسیریابی در پشتصحنه اتفاق میافتد، کاربران چیزی متوجه نخواهند شد.
گاهی اوقات برخی وبسایتها یک سابدامین مخصوص را به منظور میزبانی تصاویر، فایلهای جاوااسکریپت، سیاساس و دیگر ریسورسها در نظر میگیرند به طوری که اگر به تَب Network مربوط به ابزار Developer در مرورگر کروم و یا به ستونِ Status Bar از این ابزار در مرورگر فایرفاکس توجه کنید، خواهید دید که هنگام ارسال ریکوئست به منظور لود سایتی همچون فیسبوک، بسیاری از یوآرالها در آدرس خود واژۀ «cdn» را دارند و این دقیقاً همان ریکوئستی است که بخشی از محتوای وبسایت را از سرور شبکهٔ توزیع محتوا لود میکند.
حال سؤالی پیش میآید و آن هم اینکه چرا نمیبایست کل محتوای مورد نیاز وبسایت را از طریق سرورهای شبکهٔ توزیع محتوا دریافت کرد؟ در پاسخ به این سؤال بایستی توجه داشته باشیم که برخی محتواهای استاتیک وبسایت همچون فایلهای JS ،CSS ،HTML و غیره سایز بزرگی داشته و لود سریع چنین فایلهایی بدین دلیل ارزشمند است که غالباً محتوای فایلها تغییر نمیکند و میتوان آنها را برای مدتی در حافظۀ کَش ذخیره کرد و دلیل دوم اینکه بارِ مربوط به فایلهای استاتیک از روی وبسرور برداشته شده و توان سرور برای هندل کردن بخش دینامیک وبسایت افزایش مییابد اما برخی ریسورسهایی که دائم در حال تغییر هستند را بهتر است از طریق همان سرور اصلی وبسایتمان لود کنیم تا کاربران همواره آخرین محتوای عرضهشده را مشاهده نمایند (به طور مثال، در یک سایت خبری توصیه میشود که اخبار لحظهای اصلاً کَش نشوند تا احتمال اینکه کاربری این دست اخبار داغ را از دست بدهد، به حداقل برسد.)
در این مقاله به بررسی ماهیت CDN و نحوۀ کارکرد آن پرداختیم؛ همچنین با انواع مختلف سرورهای CDN آشنا شده و آموختیم که هر نوع از سرورها در چه حوزهای بیشتر توان ارائه سرویس دارند. در پایان لازم به ذکر است که در یکی از ایپزودهای رادیو فولاستک با پویا پیرحسینلو: همبنیانگذار و مدیرعامل ابرآروان مصاحبه نمودیم که در این پادکست مباحث فنی بسیاری در مورد CDN مورد بحث و بررسی قرار گرفت.