System Design

بررسی معماری CDN: نحوه عملکرد تحویل محتوای جهانی در لایه‌های زیرین

شبکه‌های تحویل محتوا (CDN) ستون فقرات نامرئی وب مدرن هستند که اطمینان می‌دهند میلیون‌ها کاربر با حداقل تأخیر به داده‌ها دسترسی داشته باشند. در حالی که بسیاری از توسعه‌دهندگان CDN را به عنوان یک سرویس ساده «نصب و استفاده» در نظر می‌گیرند، درک معماری زیربنایی آن برای طراحان سیستمی که به دنبال ساخت برنامه‌های با عملکرد بالا و مقیاس‌پذیر هستند، حیاتی است. این مقاله اجزای اصلی یک CDN را از حل DNS تا کش لبه و کاهش بار سرور مبدأ (Origin) تشریح می‌کند.

اجزای اصلی یک CDN

یک معماری CDN معمولی از سه لایه اصلی تشکیل شده است: شبکه لبه (Edge Network)، سرور مبدأ (Origin Server) و صفحه کنترل (Control Plane).

۱. گره‌های لبه (نقاط حضور)

لبه جایی است که جادو اتفاق می‌افتد. گره‌های لبه، که به نقاط حضور (PoPs) نیز معروف هستند، مراکز داده‌ای هستند که به صورت استراتژیک در سراسر جهان قرار گرفته‌اند. وقتی یک کاربر درخواستی برای یک منبع ارسال می‌کند، این درخواست بر اساس تأخیر و سلامت شبکه به نزدیک‌ترین گره لبه مسیریابی می‌شود. این گره‌ها دارایی‌های ایستا (تصاویر، CSS، JS) و گاهی اوقات پاسخ‌های پویا را در کش ذخیره می‌کنند تا بار سرور مبدأ را کاهش دهند.

۲. سرور مبدأ (Origin Server)

مبدأ منبع اصلی داده‌های شماست که معمولاً در یک مرکز داده مرکزی یا منطقه ابری میزبانی می‌شود. در یک تنظیمات CDN طراحی شده به خوبی، مبدأ باید محافظت شود. ترافیک مستقیم به مبدأ باید به حداقل برسد یا مسدود شود تا از حملات DDoS جلوگیری شود و هزینه‌های زیرساخت کاهش یابد. مبدأ به عنوان منبع معتبر برای محتوایی عمل می‌کند که هنوز در لبه کش نشده است.

۳. DNS Anycast و بارگیری متوازن

CDN‌ها به شدت به مسیریابی Anycast متکی هستند. به جای تخصیص آدرس IP منحصربه‌فرد به هر سرور، چندین سرور در سراسر جهان از یک آدرس IP مشترک استفاده می‌کنند. وقتی یک کاربر درخواستی ارسال می‌کند، پروتکل دروازه مرزی اینترنت (BGP) بسته را به نزدیک‌ترین گره لبه‌ای مسیریابی می‌کند که آن IP را تبلیغ می‌کند.


// پاسخ DNS نمونه برای دامنه‌ای که از CDN استفاده می‌کند
$ dig example.com

; <<>> DiG 9.18.13 <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;example.com.			IN	A

;; ANSWER SECTION:
example.com.		300	IN	A	203.0.113.10
example.com.		300	IN	A	198.51.100.20
example.com.		300	IN	A	192.0.2.30
example.com.		300	IN	A	198.18.0.40

استراتژی‌های کش و باطل‌سازی

کش‌گذاری کارآمد ارزش اصلی یک CDN است. معماری از هدرهای مختلف cache-control پشتیبانی می‌کند تا تعیین کند که اشیاء چقدر باید در لبه ذخیره شوند.

  • TTL (زمان ماندگاری): تعیین می‌کند که گره لبه تا چه زمانی شیء را نگه می‌دارد تا نسخه تازه‌ای را از مبدأ درخواست کند.
  • کلید کش (Cache Key): معمولاً از مسیر URL، رشته کوئری و هدرهایی مانند User-Agent یا Accept-Language تشکیل شده است.
  • باطل‌سازی (Invalidation): مکانیزمی برای پاکسازی فوری محتوای کش‌شده زمانی که محتوای مبدأ تغییر کند. این کار اغلب از طریق فراخوانی API به ارائه‌دهنده CDN انجام می‌شود.

# پیکربندی .htaccess یا Nginx برای تنظیم هدرهای کش
AddHeader Cache-Control "max-age=31536000, public, immutable"

# برای Nginx:
location /static/ {
    expires max;
    add_header Cache-Control "public, immutable";
}

محتوای پویا و محافظت از مبدأ

همه محتوا ایستا نیست. برای پاسخ‌های پویای API، CDN‌ها از «محافظت از مبدأ» (Origin Shielding) استفاده می‌کنند. در این مدل، یک لایه از گره‌های لبه میانی به عنوان پروکسی برای گره‌های لبه جهانی عمل می‌کند. فقط لایه محافظ درخواست‌هایی را به مبدأ ارسال می‌کند. این کار به طور قابل توجهی تعداد اتصالات همزمان به سرور مبدأ را کاهش می‌دهد و از گلوگاه‌ها در زمان افزایش ترافیک جلوگیری می‌کند.

ملاحظات امنیتی

CDN‌ها خط اول دفاع در برابر حملات DDoS هستند. با جذب ترافیک در لبه، حملات حجمی (سیل UDP، سیل ICMP) و حملات لایه ۷ (سیل HTTP) را کاهش می‌دهند. علاوه بر این، CDN‌ها خاتمه SSL/TLS را فراهم می‌کنند، به این معنی که دستشویی رمزنگاری در لبه انجام می‌شود و ترافیک بین لبه و مبدأ می‌تواند با استفاده از mTLS (TLS متقابل) رمزنگاری شود یا در شبکه خصوصی CDN باقی بماند.

نتیجه‌گیری

درک معماری CDN به توسعه‌دهندگان امکان می‌دهد تصمیمات آگاهانه‌ای درباره سیاست‌های کش، پیکربندی‌های امنیتی و مقیاس‌بندی زیرساخت بگیرند. با استفاده از کش لبه، مسیریابی Anycast و محافظت از مبدأ، CDN‌ها برنامه‌های وب جهانی را به سیستم‌های سریع، مقاوم و امن تبدیل می‌کنند. با رشد محاسبات لبه، مرز بین CDN و لایه برنامه به تدریج محو خواهد شد و این دانش برای طراحان سیستم‌های مدرن حتی حیاتی‌تر خواهد بود.

Share: