CDN و بهینه سازی کاهش تاخیر
1) اهداف و نقشه تاخیر
تاخیر = DNS + TCP/TLS + TTFB (سرور/مبدا/کش) + تحویل محتوا (حجم × RTT) + رندر مشتری.
بهینه سازی = کاهش تعداد RTTs، کاهش بایت، و حرکت محاسبات/کش نزدیک به کاربر.
2) معماری CDN
Anycast POPs یک گره مسیریابی BGP نزدیک است.
Tiered caching/Origin Shield - یک لایه متوسط «چتر» است که طوفان خانم را در مبدا کاهش می دهد.
Geo-/مسیریابی منطقه ای - اتصال مستاجر/صلاحیت (حاکمیت داده ها، مجوزها).
شکست - منبع پشتیبان/منطقه، نمونه های بهداشتی و سوئیچ سریع.
3) کش: کلید، هدر، استراتژی
3. 1 کلیدهای کش
به طور پیش فرض "scheme + host + path +? پرس و جو.
فقط پارامترهایی را که میخواهید اضافه کنید) ؟ v = '،' ؟ لانگ = '،' ؟ مستاجر = '). بقیه در نادیده گرفتن پارامس هستند.
'Vary' - minimal: 'Accept-Encoding', 'Accept-Language' (در صورت لزوم), 'Authorization' معمولا کش را میشکند.
3. 2 سیاست ها
استاتیک عمومی: 'Cache-Control: عمومی، حداکثر سن = 31536000، تغییر ناپذیر' + rev (هش در نام).
نیمه دینامیک (دایرکتوری ها، قوانین، سوالات متداول): 's-maxage = 300، stale-while-revalidate = 600، stale-if-error = 86400'.
API-GET: از ETag/Last-Modified، 'SWR/SIE' استفاده کنید، coalescing را فعال کنید (یک درخواست برای یک کلید داغ).
خصوصی: پاسخ های شخصی - در محیط از طریق لبه محاسبه (ESI/kv) یا حافظه پنهان هر مستاجر.
3. 3 ضد طوفان
درخواست coalescing - سقوط به طور همزمان درخواست خانم.
Serve-stale - یک شی قدیمی را زمانی که منبع نتواند انجام دهد.
تأیید مجدد پس زمینه - به روز رسانی در پس زمینه.
4) HTTP/2-3، TCP/TLS و بازگشت زود هنگام
HTTP/2: چندگانه، فشرده سازی هدر ؛ limit 'جریانهای همزمان max'، هدر های بزرگ.
HTTP/3 (QUIC): کاهش عمده در TTFB تلفن همراه/از دست دادن بالا ؛ نگاهی به رپیدهای اولیه و Retry داشته باشید.
TLS 1. 3: دست دادن 1-RTT ؛ مهر و موم OCSP ؛ HSTS ها
0-RTT: فقط برای «GET» idemotent و اگر خطرات پخش در نظر گرفته شود.
103 نکات اولیه: اوایل 'لینک: rel = preload' برای منابع بحرانی.
Preconnect/DNS-prefetch: '<link rel = "preconnect" href = "https ://cdn. مثال «>».
5) لبه محاسبه و «شخصی سازی خوب»
در لبه: سرشماری عنوان، تثبیت جغرافیایی/مستاجر، علامت A/B، شخصی سازی آسان بدون درخواست منشاء.
قانون: PII را در گره های POP ذخیره نکنید ؛ cache فقط داده های عمومی را جمع آوری می کند.
6) بهینه سازی رسانه ها و فرمت ها
تصاویر: تبدیل خودکار به WebP/AVIF، تغییر اندازه بر روی لبه، «srcset/اندازه»، «lazyload».
فشرده سازی: Brotli برای متون (HTML/CSS/JS/JSON)، gzip برگشت.
ویدئو: HLS/DASH، ذخیره سازی بخش CDN، preload = metadata، پوستر.
فونت ها: زیر مجموعه + 'font-display: swap'; میزبان با کش طولانی.
CSS بحرانی: صفحه اول درون خطی ؛ بقیه اش async است.
7) الگوهای API و ذخیره سازی
GET Idempotent - ما با کلید های درخواست (از جمله نسخه داده) ذخیره می کنیم.
ETag: هش بار قوی + 'If-None-Match'.
کنترل جایگزین (CDN-specific) برای تشخیص از مشتری «Cache-Control».
URL های امضا شده - برای خصوصی استاتیک/رسانه ها.
GraphQL: عادی سازی حافظه پنهان کلید توسط عملیات/متغیرها ؛ استفاده از ذخیره سازی جزئی/حل کش.
WebSockets: برای زمان واقعی - کوتاه کردن پیام ها، فشرده سازی (نفوذ پذیری)، موقعیت WS-shards نزدیک به کاربر.
8) نمونه های پیکربندی
8. 1 NGINX (مبدا: ما API-GET را ذخیره می کنیم)
nginx
We give SWR and ETag location/api/v1/catalog/{
proxy_cache api_cache;
proxy_cache_key "$scheme$request_method$host$uri$is_args$args";
proxy_cache_valid 200 5m;
proxy_cache_use_stale updating error timeout http_500 http_502 http_503 http_504;
add_header Cache-Control "public, s-maxage=300, stale-while-revalidate=600, stale-if-error=86400";
add_header ETag $upstream_http_etag;
proxy_ignore_headers Set-Cookie; # do not break the Set-Cookie proxy_hide_header cache;
proxy_pass http://catalog;
}
8. 2 Fastly VCL (SWR، coalescing، نادیده گرفتن کوکی ها)
vcl sub vcl_recv {
set req. hash_ignore_busy = true; # coalescing if (req. url. qs ~ "^(?!.(lang v)=)") { remove req. url. qs; }
if (req. http. Cookie) { remove req. http. Cookie; }
}
sub vcl_backend_response {
set beresp. ttl = 300s;
set beresp. stale_if_error = 86400s;
set beresp. stale_while_revalidate = 600s;
if (beresp. http. Set-Cookie) { unset beresp. http. Set-Cookie; }
}
8. 3 Cloudflare (قوانین تبدیل, قوانین کش, نکات اولیه - псевдо)
json
{
"cache_rule": {
"if": "http. request. uri. path matches \"/assets/.\"",
"action": {"cache": {"eligibility":"eligible", "ttl": 31536000}}
},
"transform_rule": {
"set_headers": [{"name":"Cache-Control","value":"public, s-maxage=300, stale-while-revalidate=600"}]
},
"early_hints": {"enable": true}
}
9) شبکه های تلفن همراه و اینترنت «ناپایدار»
استفاده از HTTP/3 به صورت تهاجمی کاهش اندازه مسیر بحرانی (HTML + CSS بحرانی <14 KB).
H2/H3 اولویت: اولویت بندی (HTML → CSS → JS → رسانه بعد).
سیاست Retray با jitter، idempotency برای API.
اندازه بودجه و بسته بندی: تقسیم کد، JS معوق، حذف CSS/JS استفاده نشده.
10) قابلیت مشاهده و SLO
رم: TTFB، LCP، INP، CLS بر اساس منطقه/ASN/مستاجران ؛ توزیع p95/p99
Synthetics: مسیر کنترل «/health/cdn «توسط POP-s.
معیارهای کش: نسبت ضربه به طور کلی و در هر کلید ؛ مبدا نرخ واکشی ؛ جمع آوری پس انداز
هشدارها: افت نسبت ضربه، افزایش مبدأ خروج، تخریب H3-fraction، 5xx در هر سپر.
11) ویژگی های iGaming/امور مالی
کاتالوگ بازی/شانس: کوتاه 's-maxage' + SWR ؛ region-aware ключ ('tenant' region 'lang').
قله رویداد (مسابقات، تساوی): گرم شدن کش (پیش گرم)، «انجماد» شخصی سازی های سنگین، منابع آینه.
پرداخت/کابینه: خصوصی را ذخیره نکنید، اما از طریق H3 + edge-TLS و منطقه نزدیک سرعت بخشید.
حوزه های قضایی: تقسیم دامنه/مسیر در هر منطقه ؛ 'Vary: X-Region' کنترل.
12) ضد گلوله
در مورد همه چیز: کلید کش به کوکی ها/هدر های غیر ضروری بستگی دارد.
فقدان SWR/SIE → صفحه نمایش سیاه و سفید برای شکست های کوتاه مدت.
پاک کردن کش «همه جا» به جای نقطه ناتوانی توسط برچسب ها/کلید.
منابع بدون بازبینی نام و با 'max-age = 0'.
Global deny-cache برای «Authorization» حتی در جایی که public داده شده است.
عدم همبستگی → طوفان در مبدا.
شخصی سازی «سنگین» زودرس در POP.
13) تولید لیست آمادگی
- Anycast POP + لایه/سپر ؛ بررسی سلامت و شکست منشاء.
- کلیدهای کش حداقل هستند ؛ نادیده گرفتن نمایش داده شد غیر ضروری/کوکی ها; «کنترل جانشین».
- SWR/SIE فعال، coalescing فعال ؛ خدمت به اشتباهات.
- HTTP/3 فعال شود ؛ TLS 1. 3; 103 نکات اولیه برای منابع بحرانی پیکربندی شده است.
- تصاویر: AVIF/WebP، تغییر اندازه در لبه ؛ بروتلی برای شعر
- API-GET с ETag/آخرین اصلاح ؛ idempotency/عقب نشینی ؛ پروفایل های خصوصی را پنهان نکنید.
- قبل از اتصال به دامنه های استاتیک ؛ CSS انتقادی درون خطی.
- معیارها: نسبت ضربه، مبدأ خروج، TTFB/LCP p95، H3-share، بر اساس منطقه/مستاجر.
- کش برنامه گرم کردن قبل از حوادث ؛ ناتوانی نقطه (برچسب ها).
- متفاوت/کلید/اسناد TTL ؛ playbook of incidents (افت نسبت ضربه).
14) TL ؛ دکتر متخصص
پیاده روی را به حداقل برسانید: لایه ای/سپر + کلیدهای کش مناسب + SWR/SIE + coalescing. HTTP/3/TLS 1 را روشن کنید. 3، از 103 نکات اولیه و پیش فرض استفاده کنید. فشرده سازی و تبدیل رسانه ها در لبه، درون خطی CSS بحرانی. برای API - ETag، شسته و رفته 'Vary'، idempotency و ذخیره سازی معقول 'GET'. اندازه گیری نسبت ضربه، TTFB/LCP p95، خروج از مبدا و گرم کردن کش در پیش در قله.