CDN و ذخیره سازی لبه
CDN و ذخیره سازی لبه
1) اهداف
CDN (شبکه تحویل محتوا) باعث کاهش تأخیر و بارگیری در مبدا می شود: محتوای استاتیک و مشروط پویا را در گره های لبه ذخیره می کند، مقیاس، ثبات و امنیت (DDoS/WAF) را فراهم می کند، منطق لبه را اضافه می کند (بازنویسی پاسخ ها/درخواست ها، احراز هویت، A/B).
2) مدل کش و کلید
Ключ кеша = 'scheme + host + path +? (پرمهای پرسوجوی انتخاب شده) + سرآیندها (واری)'
توصیه می شود:- نرمال کردن پرسوجو ('utm _' exclude, leave' v ',' lang ',' country ', و غیره).
- به حداقل رساندن 'Vary' (به عنوان مثال، 'Vary: Accept-Encoding, Accept-Language')، اجتناب از 'Vary:'.
- برای API - کلید از شناسه مسیر + نسخه (semver، hash، build id) + پرس و جو/هدر های لازم (به عنوان مثال «X-Tenant»).
- برای صفحات شخصی - تقسیم بندی لبه (توسط کوکی/جغرافیایی) یا Skip-Cache.
3) سیاست های TTL و هدر
سرفصل های پایه:- 'Cache-Control: public, max-age = 300, s-maxage = 3600, stale-while-revalidate = 60, stale-if-error = 300'
- «کنترل جایگزین» (در صورت پشتیبانی) یک سیاست جداگانه برای CDN ها به غیر از مرورگر است.
- 'ETag '/' Last-Modified' - درخواست های مشروط (304) و صرفه جویی در ترافیک.
- برای خصوصی: 'Cache-Control: private, no-store', if not cache.
- API هایی که به حافظه پنهان اجازه می دهند: «Cache-Control: public، s-maxage = 60» + کلید نسخه.
رویکرد توصیه شده: «eternal» resources (with fingerprint in the file name) → 'max-age = 31536000, immutable'; «صفحات/JSON» → کوتاه TTL + SWR.
4) ناتوانی: پاکسازی/نرم پاکسازی
پاکسازی توسط URL: اشاره.
پاکسازی توسط برچسب/کلید: پاکسازی گروه (استفاده از 'Surrogate-کلید: محصولات: 42 رده: مواد غذایی').
Soft-purge: محتوای «قدیمی» را علامت گذاری می کند، edge تا زمانی که یک نسخه جدید دریافت شود، قدیمی می شود.
گرم کردن: پس از استقرار، صفحات اصلی را از مناطق بکشید.
5) الگوهای عملکرد لبه
Stale-While-Revalidate: پاسخ سریع با کپی «قدیمی» + به روز رسانی پس زمینه.
Prefetch منابع بحرانی (preload، preconnect، dns-prefetch).
فشرده سازی: gzip/br (برای متن)، zstd اگر CDN پشتیبانی می شود.
HTTP/2/3 (QUIC): تسهیم و تأخیر کمتر.
از سرگیری جلسه TLS و بستن OCSP در محیط.
6) تصاویر و فیلم ها
بهینه سازی تصویر در لبه: تغییر اندازه/فرمت مذاکره ('Accept: image/avif, webp'), авто -WebP/AVIF, DPR- варианты.
تنبل بار и پاسخگو («srcset»، «اندازه»).
ویدئو: HLS/DASH، MP4 تقسیم شده، origin-shield (حافظه مرکزی) برای کاهش طوفان.
خدمات تصویر بند انگشتی و URL های امضا شده برای تصاویر خصوصی.
7) امنیت محیط
WAF: قوانین OWASP، مسدود کردن کشور/ASN، محدودیت نرخ با کلید (IP + کوکی + نشانه).
DDoS: L3/4 شستشو، L7 چکرز، چالش های JS/گردان.
URL های امضا شده/کوکی ها برای منابع خصوصی (ویدیو/گزارش ها): TTL + HMAC/EdDSA.
Geo-fencing و انطباق (به عنوان مثال، مناطق ممنوع).
8) لبه محاسبه (منطق در لبه)
موارد:- شخصی سازی بدون شکستن حافظه پنهان: بخش (A/B)، جغرافیایی، زبان در لبه، و محتوای ذخیره شده است.
- بازنویسی پاسخ/عنوان، تغییر مسیر، تقسیم AB.
- احراز هویت مبتنی بر نشانه: تایید امضای JWT، اتصال کلید.
- Canary by cookie/percent: بخشی از ترافیک به سمت backend جدید است.
نمونه هایی از تکنولوژی عبارتند از Cloudflare Workers/Durable Objects، Fastly Compute @ Edge، AWS Lambda @ Edge.
9) چند CDN و محیط جهانی
دلایل: پوشش، SLA، هزینه، محدودیت های منطقه ای، جداسازی حوادث.
GSLB/فرمان ترافیک: در جغرافیایی/تاخیر/خطاهای واقعی ؛ بررسی های بهداشتی از نقاط مختلف دیدگاه.
طرح تک کلید/هدر (کلید جایگزین)، قوانین پاکسازی هماهنگ.
Origin-shield برای همه CDN ها رایج است تا منشاء معلولیت را «ضربه» نکنند.
10) ورود به سیستم و معیارها
جمع آوری:- نسبت ضربه (کش، CDN → لبه/مبدا)، نسبت بایت ضربه.
- تاخیر p50/p95/p99، میزان خطا توسط کد/مسیر.
- Origin fetches: RPS/bytes/errors (حفاظت در برابر خطاهای اضافی).
- نمودارهای منطقه ای (توسط POP/ASN/country).
- ادغام با قابلیت مشاهده: Prometheus (کشیدن از طریق صادرکنندگان)، Grafana/OTel (فشار از لبه های لبه).
11) SEO и SPA/SSR
صفحات SEO با SWR و TTL کوتاه سریع و تازه هستند.
نقشه سایت/روبات ها - ما برای مدت زمان طولانی ذخیره می کنیم، اما اجازه می دهیم نرم افزار پاکسازی شود.
کارگر خدمات: ذخیره سازی آفلاین، پیش فرض مسیرهای بحرانی، به روز رسانی هدفمند.
12) تنظیمات نمونه و هدر
12. 1 پروفایل کش کنترل
استاتیک با اثر انگشت:
Cache-Control: public, max-age=31536000, immutable
HTML/SSR:
Cache-Control: public, max-age=60, s-maxage=600, stale-while-revalidate=60, stale-if-error=600
Surrogate-Control: max-age=600, stale-while-revalidate=120
API (فروشگاه ذخیره شده):
Cache-Control: public, s-maxage=60
Vary: Accept-Encoding
12. 2 NGINX (مبدا) - نرمال سازی پرس و جو/هدر
nginx map $arg_utm_source $utm_skip { default 1; "" 0; }
map $args $normalized_args {
default "";
"~(^ &)v=([a-z0-9]+)(& $)" "v=$2";
}
proxy_cache_key "$scheme://$host$request_uri?$normalized_args";
add_header Surrogate-Key "product:{{id}} category:{{cat}}";
12. 3 Fastly VCL - نرم پاکسازی و کلید
vcl sub vcl_recv {
set req. hash += req. http. host req. url. path;
set req. hash += querystring. decode(req. url, "v,lang");
if (req. method == "PURGE") {
if (req. http. Fastly-Soft-Purge) { softpurge; } else { purge; }
return (synth(200, "purged"));
}
}
sub vcl_deliver {
set resp. http. Surrogate-Key = "product:42 category:food";
}
12. 4 کارگران Cloudflare - URL های امضا شده
js export default {
async fetch(req, env) {
const url = new URL(req. url);
if (url. pathname. startsWith("/private/")) {
const token = url. searchParams. get("token");
if (!token! verify(token, env. SIGNING_KEY)) return new Response("Forbidden", { status: 403 });
}
return fetch(req);
}
}
12. 5 لامبدا @ لبه - گزینه های جغرافیایی
js exports. handler = async (event) => {
const req = event. Records[0].cf. request;
const country = req. headers['cloudfront-viewer-country']?.[0]?.value 'US';
if (country === 'DE') req. headers['accept-language'] = [{ key:'Accept-Language', value:'de' }];
return req;
};
13) داده های خصوصی و API
هرگز پاسخ های خصوصی را بدون جداسازی کلید (هر کاربر/هر توکن) ذخیره نکنید.
از کوکیهای امضا شده/سرآیند و 'Vary: Authorization' فقط با کنترل دقیق استفاده کنید (در غیر این صورت - cache-bust).
جایگزین امن: لایه عمومی (cached) و inclusions خصوصی (ترکیب ESI/لبه) را جدا کنید.
14) قوانین جغرافیایی/محتوا
محدودیت های مجوز: جغرافیایی انکار در لبه، متغیرهایی به جای مسدود کردن منبع.
سن/آگهی های نظارتی - رندر در لبه (کش پانچ نیست).
15) ضد الگوهای
'no-cache, no-store' برای کل سایت → از دست دادن اثر CDN.
'Vary' on unstable headers (به عنوان مثال، 'User-Agent') → کاردینالیتی.
پاک کردن کل کش در هر نسخه.
TTL های کوتاه بدون SWR → طوفان به مبدا.
صفحات شخصی بدون کلید های تقسیم بندی/نشانه ذخیره می شوند.
فقدان origin-shield → چندین خطای موازی.
16) چک لیست پیاده سازی (0-45 روز)
0-10 روز
دسته بندی منابع: تغییر ناپذیر/HTML/API.
فعالسازی gzip/br، HTTP/2/3، نرمالسازی پرسوجو، 'کلید جایگزین'.
SWR/IFE و پاکسازی پایه را وارد کنید.
11-25 روز
بهینه سازی لبه تصویر (تغییر اندازه/فرمت)، origin-shield.
URL های امضا شده برای رسانه های خصوصی، پروفایل های WAF/DDoS.
داشبورد: نسبت ضربه، واکشی مبدا، p95 توسط POP.
26-45 روز
استراتژی چند CDN یا GSLB، وزن قناری در محیط.
محاسبه لبه برای تقسیم بندی/AB/geo، پاکسازی نرم توسط کلید.
گرم شدن خودکار و ادغام پاکسازی در CI/CD.
17) معیارهای بلوغ
نسبت ضربه بایت ≥ 85٪ برای استاتیک، ≥ 60٪ برای دینامیک HTML/شرطی.
منبع RPS پایدار در قله (بدون «طوفان»).
TTFB P95 ≥ 30% در مناطق عمده کاهش یافته است.
٪ از پاسخ های دائمی برای حوادث> 90٪ (کاربر به سختی متوجه شده است).
اتوماسیون کامل کلیدهای پاکسازی در خطوط لوله آزاد.
18) نتیجه گیری
مدار CDN موثر کلیدها/TTL/گزینه ها، رشته معلولیت و منطق لبه است. SWR/IFE، origin-shield، بهینه سازی رسانه ها و امنیت قوی (WAF، URL های امضا شده) را اضافه کنید. معیارها را استاندارد کنید و پاکسازی را در CI/CD ادغام کنید - و یک محیط سریع، اقتصادی و پایدار، آماده برای بارهای پیک و قوهای سیاه دریافت می کنید.