सीडीएन कैशिंग और टीटीएल अनुकूलन
संक्षिप्त सारांश
एक सीडीएन कैश उपयोगकर्ता और मूल के बीच एक "त्वरक + ढाल" है। यह अच्छी तरह से काम करता है जब:1. कैश कुंजी स्थिर है और इसमें कोई "शोर" नहीं है।
2. लोड के तहत टीटीएल नीति: 'एस-मैक्सेज '/' मैक्स-एज' + 'स्टेल-जबकि-एस्केलेट/इफ-त्रुटि'।
3. विकलांगता का प्रबंधन किया जाता है: टैग/उपसर्ग + "सॉफ्ट" पर्स द्वारा।
4. टायर्ड-कैश/ओरिजिनल-शील्ड और नेगेटिव-कैश शामिल हैं।
5. एक अवलोकन है: परतों द्वारा हिट-अनुपात, p95 TTFB, रिटर्न शेयर 304।
बेस हेडर और उनका क्या मतलब है
'कैश-कंट्रोल':- 'max-age =
' - ब्राउज़र के लिए टीटीएल। - 's-maxage =
' - सीडीएन/प्रॉक्सी (ओवरलैप 'मैक्स-एज') के लिए टीटीएल। - 'बासी-जबकि-पुनर्नवीनीकरण =
' - पुराने को बाहर दें, समानांतर में अपडेट करें। - 'बासी-यदि-त्रुटि =
' - मूल त्रुटि होने पर हम पुराने को वापस कर देते हैं। - 'अपरिवर्तनीय' - संसाधन नहीं बदलता है (लंबवत परिसंपत्तियों के लिए उपयुक्त)।
- 'ETag '/' लास्ट-संशोधित' - 304 के लिए शर्तें, बाइट्स/सीपीयू मूल सहेजें।
- 'वैरी' - कैश कुंजी को प्रभावित करने वाले शीर्षकों की एक सूची (संयम के साथ उपयोग करें!)।
- 'सरोगेट-कंट्रोल' - "विस्तारित" सीडीएन के लिए कैश-कंट्रोल (यदि समर्थित हो)।
- 'एक्सपायर' - अप्रचलित, लेकिन फिर भी ग्राहकों द्वारा जिम्मेदार है।
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', मनमाने ढंग से ref टैग।
लिमिटेड वैरी: केवल वास्तव में महत्वपूर्ण शीर्षक ('स्वीकार-एनकोडिंग', कभी-कभी 'स्वीकार करें', 'स्वीकार करें-भाषा' फोर लोकेल)।
डिवाइस-क्लास: यदि आवश्यक हो, तो 2-3 कक्षाओं (मोबाइल/डेस्कटॉप/टैबलेट) का उपयोग करें, न कि अंतहीन उपयोगकर्ता-एजेंट शाखाओं का।
Auth संदर्भ: डिफ़ॉल्ट रूप से निजी कैश न करें; हस्ताक्षरित-URL/कुकीज़-बाईपास या अलग-अलग सार्वजनिक/निजी रास्तों का उपयोग करें।
तेजी से शैली (छद्म):
Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding
टीटीएल रणनीतियाँ सामग्री प्रकार द्वारा
विकलांगता नीतियाँ
URL/उपसर्ग द्वारा: "सब कुछ '/स्थिर/2025-11-05/' के तहत झाडू।
टैग/कुंजी द्वारा: "सभी 'कैटलॉग' और 'उत्पाद: 123' को हटाएं।"
सॉफ्ट पर्ज: अप्रचलित के रूप में चिह्नित करें, वस्तु को न मिटाएं - तेजी से फिर से भरना।
घटना-चालित: सीआई/सीडी या व्यवस्थापक घटना वेबहुक "अवैध टैग" को आमंत्रित करता है।
सिफारिश: दोनों रणनीति को जोड़ें: सामग्री/पृष्ठों के लिए संपत्ति + टैग-पर्ज के लिए संस्करण पथ।
टायर्ड-कैश, ओरिजिनल-शील्ड и प्रीवार्म
Tiered-cache: CDN क्षेत्रीय परतें - कम मूल अनुरोध।
उत्पत्ति-ढाल: उत्पत्ति के लिए एक "ढाल" पीओपी - स्थानीयता और हिट-अनुपात में सुधार करता है।
प्रीवार्म (प्री-लाभ): घटना/रिलीज से पहले गर्म URL/कैश गर्म करें।
नकारात्मक-कैश: कैश - थोड़े समय के लिए (30-120 एस) ताकि रेट्रास के तूफान के साथ उत्पत्ति को अभिभूत न किया जा सके।
एपीआई कैश: जब आप कर सकते हैं
केवल GET/HEAD और idempotent।
कुंजी: पथ + आवश्यक प्रश्न (उदाहरण के लिए, '? श्रेणी =... और पृष्ठ =... ')।
सत्यापन: 'ETag '/' अंतिम-संशोधित' और लघु '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"
कैश विषाक्तता सुरक्षा
हार्ड यूआरएल/हेडर सामान्यीकरण; कुंजी में मापदंडों का श्वेतलिस्ट।
क्लिपिंग संदिग्ध हेडर/डुप्लिकेट ('एक्स-फोरवर्ड-', विस्तारित 'स्वीकार करें')।
'विविधता' सीमित करें और शीर्षिका के आकार/संख्या को नियंत्रित करें।
डोमेन पृथक्करण: निजी/व्यवस्थापक - बिना कैश के अलग नाम पर।
प्रतिक्रियाओं का सत्यापन: 4xx (स्थिर के लिए 404 को छोड़ कर) कैश न करें, स्पष्ट नीति के बिना "उपयोगकर्ता" पृष्ठों को कैश न करें।
संपीड़न और प्रारूप
पाठ के लिए ब्रोटली (js/css/json), gzip - fallback; पूर्व-संपीड़ित संपत्ति स्वीकार्य हैं।
चित्र: वेब/एविफ़जहाँ समर्थन; 'वैरी: स्वीकार करें' + डेरिवेटिव का उपयोग करें।
वीडियो/ऑडियो के लिए रेंज-अनुरोध: सीडीएन कैश चंक।
सामग्री-बातचीत: प्रमुख कार्डिनैलिटी को कम रखें (कच्चे यूएएस के बजाय डिवाइस-क्लास)।
अवलोकन और एसएलओ
कुंजी मेट्रिक्स
हिट-अनुपात (बाइट्स/अनुरोध द्वारा) на एज/टियर/शील्ड।
p50/95/99 क्षेत्र और प्रकार (स्थिर/एपीआई) द्वारा टीटीएफबी।
भरण-दर/उत्पत्ति - मूल में कितना जाता है।
304 दर और औसत प्रतिक्रिया आकार।
त्रुटि बजट: 'बासी-इफ-त्रुटि '/' एसडब्ल्यूआर' मुद्दों का हिस्सा; शुद्ध आवृत्ति।
एसएलओ उदाहरण
'p95 TTFB' statics क्षेत्रीय रूप से ≤ 120-150 ms, API GET कैश ≤ 200-250 ms।
एज हिट-अनुपात स्टेटिक्स ≥ 90%, अर्ध-वक्ता ≥ 60%।
त्रुटियों के साथ बासी शाखा से प्रतिक्रियाओं का प्रतिशत ≤ 0। 30 दिनों में 5%।
कॉन्फिग धोखा शीट
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;
}
}
दूत (एसडब्ल्यूआर + नकारात्मक-कैश, अवधारणा)
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: कैसे नकदी पैसे बचाती है
एग्रेस मूल ↓, कम सीपीयू/डीबी लोड → कम बुनियादी ढांचे की लागत।
भुगतान बैकेंड के लिए कम अनुरोध (खोज/सूचकांक/छवियाँ)।
लक्ष्य मीट्रिक: p95 में $/कमी और 1 GB द्वारा egress में $/कमी - लॉन्च के बाद के प्रभाव को ट्रैक करें।
iGaming/fintech विशिष्ट
प्रदाता कैटलॉग/संपत्ति: वर्शन पथ + वार्षिक टीटीएल।
इवेंट/टूर्नामेंट लैंडिंग: 10-30 मिनट के लिए 1-5 मिनट 'एस-मैक्सेज' + 'एसडब्ल्यूआर'; अपग्रेड पर टैग-पर्स।
लिव पेज (गुणांक/तालिकाएं): व्यक्तिगत ब्लॉकों के लिए JSON ब्लॉकों का आंशिक कैश, छोटा TTL (5-30 s) - क्लाइंट रेंडर।
PSP/भुगतान समापन बिंदु: कैश न करें, सख्त 'नो-स्टोर'; कैश केवल संदर्भ पुस्तकें (बिन टेबल, स्टेटस)।
एंटीबॉट: स्थिर/GET कैशिंग, संदिग्ध ASN के लिए ग्रे मार्ग; शोर सुर्खियों से बाहर 'भिन्न' रखें।
कार्यान्वयन जाँच सूची
- कैश कुंजी वर्णित: URL सामान्यीकरण, अनुमत प्रश्नों की सूची, केवल वांछित के लिए 'वैरी'।
- सार्वजनिक/निजी रास्ते अलग हो गए; निजी - 'नो-स्टोर' और बाईपास सीडीएन।
- सामग्री प्रकार द्वारा टीटीएल सीढ़ी; कॉन्फ़िगर 'एसडब्ल्यूआर/इफ-त्रुटि'।
- tiered-cache + मूल-ढाल कॉन्फ़िगर; नकारात्मक-कैश 5xx (लघु) सक्षम।
- टैग/यूआरएल पर्स, सॉफ्ट पर्स है; सीआई/सीडी के साथ एकीकरण।
- संपीड़न (br/gzip), वेब छवि प्रारूप और रेंज प्रतिक्रियाएँ शामिल हैं।
- मेट्रिक्स: परत द्वारा हिट-अनुपात, p95 टीटीएफबी, 304 दर, मूल अनुपात; असफलताओं के लिए अलर्ट।
- प्लेबुक: चोटियों, आपातकालीन पर्स, मूल गिरावट से पहले कैश वार्म-अप।
सामान्य त्रुटियाँ
उपयोगकर्ताओं से एक बड़े TTL → "चिपचिपा" बंडलों के साथ गैर-वर्सियो संपत्ति।
अत्यधिक 'वैरी' ('उपयोगकर्ता-एजेंट', सभी हेडर द्वारा) - कार्डिनैलिटी का विस्फोट और कम हिट-अनुपात।
कैशिंग 4xx/401/403/निजी सामग्री।
नकारात्मक-कैश की कमी - अपमानित मूल के अनुरोधों का एक हिमस्खलन।
कोई टैग-पर्ज नहीं - बड़े पैमाने पर बिंदु पर्स और तूफान फिर से भरें।
कैश कुंजी में "शोर" UTM/ref मापदंड शामिल हैं।
स्टेटिक्स के लिए बहुत कम टीटीएल - सीडीएन और मूल पर अतिरिक्त लोड।
मिनी प्लेबुक
1) घटना से पहले कैश गर्म करें
1. लॉग → 2 द्वारा शीर्ष-एन URL एकत्र करना) क्षेत्र → 3 द्वारा समानांतर प्रीफेच (दर-सीमित)) हिट-अनुपात ↑ और p95 ↓ की जाँच करें।
2) आपातकालीन नरम-शुद्ध कैटोलॉजिस्ट
1. 'PURGE '/टैग-क्लियर → 2) सीडीएन बासी देता है और पृष्ठभूमि → 3 के साथ ताजा खींचता है) मूल पर कोई स्पाइक्स के लिए जांच करें।
3) मूल विफलता
1. 'स्टेल-इफ-त्रुटि' X घंटे → 2 में मदद करता है) किनारे पर बैनर "तकनीकी काम" को सक्षम करें → 3) वसूली पर - लक्ष्य वार्म-अप।
परिणाम
मजबूत सीडीएन रणनीति = एसडब्ल्यूआर/यदि-त्रुटि + प्रबंधित विकलांगता + टियर/शील्ड + अवलोकन के साथ सही कैश कुंजी + सार्थक टीटीएल। हेडर और IaC में नीति को ठीक करें, हिट-अनुपात और p95 को मापें, चोटियों तक गर्म करने की योजना - और उपयोगकर्ताओं को हमेशा एक त्वरित जवाब मिलेगा, और मूल सबसे गर्म घंटे में भी जीवित रहेगा।