GH GambleHub

ذخیره سازی CDN و بهینه سازی TTL

خلاصه ای کوتاه

یک حافظه CDN یک «شتاب دهنده + سپر» بین کاربر و مبدا است. به خوبی کار می کند زمانی که:

1. کلید کش پایدار است و حاوی «سر و صدا» نیست.

2. سیاست TTL تحت بار: 's-maxage '/' max-age' + 'stale-while-escale/if-error'.

3. ناتوانی مدیریت می شود: توسط برچسب ها/پیشوندها + پاکسازی «نرم».

4. Tiered-cache/origin-shield و negative-cache را شامل می شود.

5. یک مشاهده پذیری وجود دارد: نسبت ضربه به لایه ها، p95 TTFB، سهم بازگشت 304.

سربرگ پایه و آنچه آنها به معنی

'کنترل کش':
  • 'max-age = ' - TTL برای مرورگر.
  • 's-maxage = ' - TTL برای CDN/پروکسی (همپوشانی 'max-age').
  • 'stale-while-revalidate = ' - به صورت موازی بهروزرسانی میشود.
  • 'stale-if-error = ' - وقتی خطای مبدأ رخ می دهد، یکی از قدیمی ها را برمی گردانیم.
  • «تغییر ناپذیر» - منبع تغییر نمی کند (مناسب برای دارایی های نسخه شده).
  • 'ETag '/' Last-Modified' - شرایط 304، ذخیره بایت/منشاء CPU.
  • 'Vary' - لیستی از هدر هایی که بر کلید حافظه پنهان تاثیر می گذارد (با محدودیت استفاده کنید!).
  • 'Surrogate-Control' - «extended» Cache-Control برای CDN (در صورت پشتیبانی).
  • 'منقضی می شود' - منسوخ شده، اما هنوز هم توسط مشتریان به حساب می آید.
مثال (استاتیک، سال):

Cache-Control: public, max-age=31536000, immutable
مثال (نیمه بلندگو با منسوخ امن):

Cache-Control: public, s-maxage=300, max-age=60, stale-while-revalidate=600, stale-if-error=86400
ETag: "a1c3..."

طراحی کلید کش و نرمال سازی

هدف این است که اساساً همان درخواستها در همان شیء قرار بگیرند.

نرمال سازی URL: مورد، دو اسلش، اسلش دنباله، سفارش پارامترهای پرس و جو.
چشم پوشی از "سر و صدا": "utm _'،" fbclid "،" gclid "، برچسب های مرجع دلخواه.
Vary محدود: فقط عناوین واقعا قابل توجه ('Accept-Encoding'، گاهی اوقات 'Accept'، 'Accept-Language' برای محلی).
کلاس دستگاه: در صورت لزوم، از 2-3 کلاس (موبایل/دسکتاپ/رایانه لوحی) استفاده کنید، نه شاخه های عامل کاربر بی پایان.
زمینه Auth: خصوصی را به طور پیش فرض ذخیره نکنید ؛ استفاده از امضا URL ها/کوکی ها-بای پس یا مسیرهای عمومی/خصوصی جداگانه.

سبک fastly (شبه):

Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding

استراتژی های TTL بر اساس نوع محتوا

تایپ کنیدTTL CDN ('s-maxage')مرورگر) حداکثر سن (علاوه بر این
داراییهای نسخهبندی شده ('/app. a1b2. ج)1 سال1 سال«تغییر ناپذیر» ؛ معلولیت لازم نیست
کاتالوگ/صفحات فرود1-10 دقیقه30-120 ثانیه'stale-while-revalidate = 10-30 мин'
تصاویر (مقالات)10-60 دقیقه5-15 دقیقهمتفاوت по «پذیرش» (webp/avif)
دریافت API ها (ذخیره شده)10-120 ثانیه0-30 ثانیهفقط idempotent ؛ 'stale-if-error' 5-60 دقیقه
خطاهای 500/timeout00منفی کش 30-120 ثانیه (در سطح CDN)، کش نیست 401/403/POST

سیاست های معلولیت

با URL/Prefix: "همه چیز را در زیر "/static/2025-11-05/" جارو کنید.
توسط برچسب/کلید: «حذف تمام کاتالوگ» و «محصول: 123».
پاکسازی نرم: علامت به عنوان منسوخ، شی را پاک نکنید - سریع تر پر کردن.
رویداد محور: CI/CD یا رویداد مدیر فراخوانی webhook «برچسب نامعتبر است».

توصیه: ترکیب هر دو تاکتیک: مسیرهای نسخه برای دارایی + برچسب پاکسازی برای محتوا/صفحات.

چند لایه کش، منبع سپر и prewarm

Tiered-cache: لایه های منطقه ای CDN → درخواست های مبدا کمتر.
Origin-shield: یک POP «سپر» به مبدا - محل و نسبت ضربه را بهبود می بخشد.
Prewarm (pre-fetch): گرم کردن URL ها/کش های داغ قبل از رویداد/انتشار.
منفی کش: 5xx/Timeout کش برای یک زمان کوتاه (30-120 ثانیه) به طوری که به پایمال منشاء با یک طوفان از retras.

API کش: هنگامی که شما می توانید

فقط GET/HEAD و idemotent.
کلید: مسیر + نمایش داده شد ضروری (به عنوان مثال، '? category =... & page =... ').
اعتبار سنجی: «ETag »/« Last-Modified» و کوتاه «S-maxage».
فیلترها توسط کاربر: شخصی سازی را به عملکرد مشتری/لبه یا استفاده از درخواست های امضا شده + پاسخ عمومی.

مثال (API، 30 s + SWR):

Cache-Control: public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600
ETag: "feed-v42"

حفاظت از مسمومیت کش

نرمال سازی سخت URL/هدر ؛ لیست سفید پارامترها در کلید.
حذف هدر های مشکوک/تکراری ('X-Forwarded'، گسترش 'Accept').
«Vary» را محدود کنید و اندازه/تعداد هدر ها را کنترل کنید.
جداسازی دامنه: خصوصی/مدیر - در یک نام جداگانه بدون کش.
اعتبار سنجی پاسخ ها: 4xx را ذخیره نکنید (به جز 404 برای استاتیک)، صفحات «کاربر» را بدون یک سیاست صریح ذخیره نکنید.

فشرده سازی و فرمت ها

Brotli برای متن (js/css/json)، gzip - برگشت ؛ دارایی های پیش فشرده قابل قبول هستند.
تصاویر: webp/avif که در آن پشتیبانی ؛ استفاده از 'Vary: Accept' + مشتقات.
محدوده درخواست برای ویدئو/صوتی: CDN قطعات را ذخیره می کند.
مذاکره محتوا: کاردینالیتی کلیدی را پایین نگه دارید (کلاس دستگاه به جای UA های خام).

💡 > قابلیت مشاهده و SLO

معیارهای کلیدی

نسبت ضربه (با بایت/درخواست) на لبه/ردیف/سپر.
p50/95/99 TTFB بر اساس منطقه و نوع (استاتیک/API).
Fill-rate/Origin egress - چقدر به مبدا می رود.
نرخ 304 و اندازه پاسخ متوسط.

بودجه خطا: سهم مسائل «stale-if-error »/« SWR» ؛ فرکانس پاکسازی

نمونه های SLO

'p95 TTFB' استاتیک منطقه ای ≤ 120-150 میلی ثانیه، API GET ذخیره شده ≤ 200-250 میلی ثانیه.
استاتیک لبه ضربه نسبت ≥ 90٪، نیمه بلندگو ≥ 60٪.

درصد پاسخ از شاخه قدیمی با خطا 0 ≤. 5 درصد در 30 روز

برگه های تقلب پیکربندی

Nginx (پروکسی معکوس قبل از CDN یا در خود PoP)

nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CDN:512m max_size=100g inactive=7d;

map $args $clean_args {
"~(^    &)(utm_    gclid    fbclid) """; # default $ args simplified example;
}

server {
listen 443 ssl http2;
set $cache_key "$scheme$request_method$host$uri?$clean_args    $http_accept    $http_accept_encoding";
location /static/ {
proxy_cache CDN;
proxy_cache_key $cache_key;
proxy_ignore_headers Set-Cookie;
add_header Cache-Control "public, s-maxage=86400, max-age=3600, stale-while-revalidate=600" always;
proxy_pass https://origin_static;
}

location /api/public/ {
proxy_cache CDN;
proxy_cache_key $cache_key;
proxy_cache_valid 200 30s;
add_header Cache-Control "public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600" always;
proxy_set_header If-None-Match $upstream_http_etag;
proxy_pass https://origin_api;
}
}

نماینده (SWR + منفی کش، مفهوم)

yaml http_filters:
- name: envoy. filters. http. cache typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. http. cache. v3. CacheConfig typed_config:
"@type": type. googleapis. com/envoy. extensions. cache. simple_http_cache. v3. SimpleHttpCacheConfig
Cache-Control/Surrogate-Control Header Cache Policies
We cache 5xx errors briefly via route/retry policy + local_rate_limit

هدر برای دارایی های «سریع»


Cache-Control: public, max-age=31536000, immutable
ETag: "hash"
Content-Encoding: br

هدر برای نیمه بلندگو (کاتالوگ)


Cache-Control: public, s-maxage=600, max-age=120, stale-while-revalidate=1800, stale-if-error=86400
Vary: Accept-Encoding, Accept

FinOps: چگونه پول نقد موجب صرفه جویی در پول

خروج از ↓ مبدا، بار CPU/DB کمتر → هزینه های زیرساخت پایین تر.
درخواست های کمتر به پشتیبان های پرداخت شده (جستجو/فهرست/تصاویر).
متریک هدف: $/کاهش در p95 و $/کاهش در خروج توسط 1 GB - پیگیری اثر پس از راه اندازی.

iGaming/fintech خاص

کاتالوگ ارائه دهنده/دارایی: مسیرهای نسخه + TTL سالانه.
فرود رویداد/مسابقات: 1-5 دقیقه 's-maxage' + 'SWR' برای 10-30 دقیقه ؛ برچسب پاکسازی در ارتقاء.
صفحات Liv (ضرایب/جداول): حافظه پنهان جزئی از بلوک های JSON، TTL کوتاه (5-30 s)، برای بلوک های شخصی - رندر مشتری.
PSP/endpoints پرداخت: کش نیست، سخت 'بدون فروشگاه' ؛ فقط کتابهای مرجع کش (جداول BIN، وضعیت).
Antibot: استاتیک/GET ذخیره سازی، مسیرهای خاکستری برای ASN های مشکوک ؛ نگه داشتن «متفاوت» از سرفصل های پر سر و صدا.

چک لیست پیاده سازی

  • کلید کش شرح داده شده است: نرمال سازی URL، لیست نمایش داده شد مجاز، «Vary» فقط برای مورد مورد نظر.
  • مسیرهای عمومی/خصوصی از هم جدا; خصوصی - «بدون فروشگاه» و دور زدن CDN.
  • نردبان TTL توسط نوع محتوا معرفی ؛ 'SWR/if-error' را پیکربندی کنید.
  • لایه کش + منبع سپر پیکربندی; منفی کش 5xx (کوتاه) را فعال کنید.
  • پاک کردن برچسب/URL، پاکسازی نرم وجود دارد ؛ ادغام با CI/CD.
  • شامل فشرده سازی (br/gzip)، فرمت های تصویری وب و پاسخ های محدوده.
  • معیارها: نسبت ضربه به لایه، p95 TTFB، نرخ 304، خروج از مبدا ؛ هشدارهایی برای شکست ها
  • Playbooks: کش گرم کردن قبل از قله، پاکسازی اضطراری، تخریب منشاء.

خطاهای رایج

دارایی های غیر ورسیو با TTL بزرگ → بسته های «چسبنده» از کاربران.
«Vary» بیش از حد (توسط «User-Agent»، همه هدر ها) → انفجار کاردینالیتی و نسبت کم ضربه.
ذخیره سازی 4xx/401/403/محتوای خصوصی.
فقدان منفی کش → بهمن از درخواست برای مبدا تنزل.
بدون برچسب پاکسازی → پاکسازی نقطه عظیم و طوفان دوباره پر کنید.
کلید حافظه پنهان شامل پارامترهای UTM/ref «پر سر و صدا» است.
TTL بیش از حد کوتاه برای استاتیک → بار اضافی در CDN و مبدا.

کتاب های مینی

1) گرم کردن کش قبل از رویداد

1. جمع آوری URL های top-N توسط سیاهههای مربوط → 2) پیش فرض موازی (نرخ محدود) توسط منطقه → 3) بررسی نسبت ضربه ↑ و ↓ p95.

2) Catologists نرم پاکسازی اضطراری

1. ارسال 'پاکسازی '/برچسب روشن → 2) CDN می دهد کهنه و می کشد تا تازه با پس زمینه → 3) برای هیچ خوشه در مبدا را بررسی کنید.

3) شکست منبع

1. «stale-if-error» به X ساعت کمک می کند → 2) بنر «کار فنی» را در لبه فعال کنید → 3) پس از بازیابی - گرم شدن هدف.

نتیجه گیری

استراتژی CDN قوی = کلید حافظه پنهان صحیح + TTL معنی دار با SWR/if-error + ناتوانی مدیریت شده + لایه ای/سپر + قابلیت مشاهده. رفع سیاست در هدر و IaC، اندازه گیری نسبت ضربه و p95، برنامه ریزی برای گرم کردن تا قله - و کاربران همیشه یک پاسخ سریع دریافت خواهید کرد، و منشاء حتی در داغترین ساعت زنده باقی خواهد ماند.

Contact

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

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

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

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

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

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