GH GambleHub

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 ادغام کنید - و یک محیط سریع، اقتصادی و پایدار، آماده برای بارهای پیک و قوهای سیاه دریافت می کنید.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.