یک قانون اشتباه در CDN میتواند صفحه حساب یک کاربر را به کاربر دیگر نشان دهد؛ همان زیرساختی که برای سرعت خریدهاید، به نشت داده تبدیل میشود. از طرف دیگر، Cache Key بسیار ریز، نرخ Hit را میکشد و Origin را زیر موج درخواست تنها میگذارد. تفاوت CDN پیشرفته با یک Proxy ساده در تعداد قابلیتها نیست؛ در قرارداد دقیق میان Edge، Cache، امنیت، Origin و عملیات است.
این راهنما بهجای پیشبینی سالمحور و فهرست بازاری ابزارها، معماری و روش تصمیم میدهد: Cache contract، Edge Computing، Tiered Cache، WAF و Bot، محافظت Origin، Failover، Observability، TCO، محدودیتهای ایران، Pilot و Rollback. قابلیت و محدودیت هر ارائهدهنده با Plan، Region و تاریخ تغییر میکند؛ برای خرید باید مستند رسمی روز و تست واقعی خودتان را ملاک قرار دهید.
پاسخ کوتاه: CDN پیشرفته چیست؟
CDN پیشرفته علاوه بر تحویل و Cache محتوای HTTP، معمولاً بخشی از این قابلیتها را دارد: Cache Key و Purge قابل برنامهریزی، لایه میانی یا Origin Shield، Edge Function، WAF و Rate limit، مدیریت Bot، مسیریابی چند Origin، پردازش تصویر/ویدیو، HTTP/۳، لاگ نزدیک real-time و کنترل Configuration as Code. اما داشتن checkbox به معنی مناسببودن برای Workload شما نیست.
قبل از خرید، برای هر قابلیت چهار شاهد بخواهید: Eligibility در حساب و کشور شما، Limit دقیق، Failure behavior و Telemetry. اگر نمیتوانید بگویید هنگام timeout، purge ناقص، function error یا Origin outage چه میشود، معماری هنوز آماده تولید نیست.
| سؤال | CDN پایه | نیاز پیشرفته |
|---|---|---|
| محتوا چیست؟ | فایل ثابت عمومی | HTML/API/Video و variantهای کنترلشده |
| منطق کجاست؟ | Origin | بخشی در Edge با boundary روشن |
| ریسک چیست؟ | کندی و بار Origin | Data leak، bypass، consistency و vendor failure |
| عملیات چگونه است؟ | TTL و Purge دستی | Version، canary، telemetry، rollback و evidence |
| تصمیم چگونه گرفته میشود؟ | قیمت/PoP | Journey SLO، Iran probe، TCO و exit |
اگر دنبال تعریف عمومی، تفاوت CDN داخلی و خارجی و راهاندازی DNS هستید، راهنمای CDN برای سایت ایرانی نقطه شروع است. این مقاله روی لایه پیشرفته معماری و عملیات تمرکز دارد.
مسیر واقعی درخواست را روی یک صفحه بکشید
برچسب «Edge» میتواند چند جزء متفاوت را پنهان کند. مسیر را از نگاه هر Journey رسم کنید:
User → DNS → Edge TLS → DDoS/WAF/Bot → Cache/Edge Function → Regional Cache/Shield → Origin Gateway/App → Database/Dependency
| مرز | تصمیم | خرابی نمونه | شاهد |
|---|---|---|---|
| DNS/Route | کدام Edge پاسخ میدهد؟ | Route بد یک ISP یا TTL نامناسب | Probe مستقل چند شبکه |
| TLS Edge | Certificate و Protocol | زنجیره ناقص، SNI یا تمدید | Handshake test و expiry alert |
| Security | Allow/Challenge/Block/Rate | False positive یا bypass Origin | Rule ID، sample و replay |
| Cache | Identity/Freshness/Serve | Cross-user leak یا stale price | Header و synthetic matrix |
| Function | Rewrite/Auth/Route | CPU limit، exception یا rollout بد | Version، error rate و rollback |
| Shield | Collapse/Origin offload | لایه اضافی برای Dynamic request | Hit/offload و cost |
| Origin | چه کسی مجاز است؟ | IP مستقیم یا spoofed client IP | ACL/mTLS و bypass scan |
| Dependency | Edge چه چیزی را پنهان نمیکند؟ | DB/API پاییندست از کار افتاده | Trace و failure drill |
CDN نمیتواند یک Database ناسازگار، API بدون idempotency یا Session اشتباه را جادویی حل کند. هر لایه باید owner، SLO، timeout و failure policy داشته باشد.
قرارداد Cache: مهمترین بخش معماری CDN
RFC ۹۱۱۱ درباره HTTP Caching semantics اصلی Cache را تعریف میکند. Rule پنل ارائهدهنده میتواند رفتار را override کند، اما نباید بدون فهم پاسخ Origin ساخته شود. برای هر نوع response این شش بخش را ثبت کنید:
| جزء قرارداد | پرسش | شاهد |
|---|---|---|
| Identity | چه Requestهایی یک response مشترک دارند؟ | Cache Key و variant matrix |
| Freshness | تا چه زمانی پاسخ قابل استفاده است؟ | Cache-Control/Age/TTL policy |
| Consistency | پس از تغییر چه زمانی همه Edgeها تازهاند؟ | Purge/Version propagation test |
| Privacy | چه چیزی هرگز Shared cache نمیشود؟ | Auth/cookie/account negative tests |
| Failure | در timeout/error پاسخ stale مجاز است؟ | stale-if-error و outage drill |
| Evidence | Hit/Miss/Bypass/Revalidate چرا رخ داد؟ | Cache-Status/vendor header و log |
معماری Cache مستقل از CDN را در راهنمای جامع Cache وب با مرز Browser، Edge، Application و Database کامل کنید.
Cache Key: میان نشت داده و انفجار Cardinality
Cache Key هویت شیء است. اگر دو پاسخ متفاوت یک Key بگیرند، داده یا زبان اشتباه تحویل میشود. اگر هر Header، Cookie و Query وارد Key شود، variantها منفجر میشوند و Hit ratio افت میکند. مستند CloudFront درباره Cache Key نیز توصیه میکند فقط مقدارهایی وارد Key شوند که واقعاً پاسخ Origin را تغییر میدهند.
| ورودی | پیشفرض تصمیم | خطر |
|---|---|---|
| Path | معمولاً هویت پایه | Normalization و slash متفاوت |
| Query | Allowlist پارامتر اثرگذار | utm و ترتیب پارامتر duplicate میسازند |
| Host | در چند دامنه/tenant صریح | Host confusion و اشتراک ناخواسته |
| Accept-Encoding | طبق رفتار پلتفرم | variant فشرده ناسازگار |
| Accept-Language | فقط اگر پاسخ واقعاً زبانمحور است | cardinality بالا و fallback نامعلوم |
| Device | ترجیحاً responsive مشترک | User-Agent entropy و duplicate |
| Cookie | Bypass/allowlist محدود | Session leak یا Hit ratio صفر |
| Authorization | Shared cache فقط با طراحی صریح | Cross-user data exposure |
| Geo | برای الزام روشن، نه شخصیسازی بیدلیل | Privacy، تعداد variant و VPN |
برای هر Key، جفت Requestهایی بسازید که باید Hit مشترک و جفتهایی که باید پاسخ جدا داشته باشند. تست منفی با دو حساب کاربری و cookie متفاوت حیاتی است. Cache HTML حساب، سبد، قیمت شخصی یا API خصوصی را پیش از threat model مشترک نکنید.
Freshness، Revalidation و Stale
max-age، s-maxage، no-cache، no-store و must-revalidate یک معنا ندارند. no-cache لزوماً «ذخیره نکن» نیست؛ یعنی پیش از استفاده مجدد باید validation انجام شود. برای داده حساس یا نگهداری ممنوع، no-store و policy پلتفرم را با تست بررسی کنید.
RFC 5861 دو extension مهم را توضیح میدهد:
stale-while-revalidateاجازه میدهد در بازه محدود، پاسخ stale همزمان با بازاعتبارسنجی غیرهمزمان سرو شود.stale-if-errorاجازه میدهد در خطا، پاسخ stale در محدوده تعریفشده استفاده شود.
این گزینهها Availability را بهتر میکنند، اما برای موجودی، قیمت، خبر فوری یا داده حقوقی میتوانند پاسخ نادرست بدهند. برای هر endpoint، حداکثر staleness قابل تحمل و خطاهای مجاز را بنویسید. «Always online» بدون قید freshness یک SLO ناقص است.
Invalidation و Purge را بخشی از Deployment بدانید
| روش | مناسب | ریسک |
|---|---|---|
| Versioned URL | CSS/JS/Image immutable | Reference قدیمی و cleanup |
| Purge by URL | صفحه یا شیء معلوم | Variantهای Key جا میمانند |
| Purge by tag/key | مجموعه محصول/مقاله | Tagging ناقص یا plan-dependent |
| Purge by prefix/host | دامنه مشخص تغییر | Blast radius بزرگ |
| Purge everything | حادثه کنترلشده | Origin stampede و افت شدید Hit |
| TTL-only | داده با stale tolerance روشن | اصلاح فوری ممکن نیست |
مستند Cloudflare برای Purge با Cache Key نشان میدهد در Custom Key ممکن است Header، Query یا نوع دستگاه برای purge همان variant لازم باشد و برخی مسیرهای Cache API محدودیت متفاوت دارند. این جزئیات مثال خوبی است که checkbox «Purge by URL» بدون Key contract کافی نیست.
Purge را با version deployment، idempotency، retry، rate limit، نتیجه per-item و propagation probe بسازید. پس از انتشار، URLهای representative را از چند Edge بخوانید و نسخه/ETag مورد انتظار را تأیید کنید. Rollback باید نسخه قبلی asset و rule را برگرداند، نه اینکه صرفاً همه Cache را خالی کند.
Tiered Cache، Origin Shield و Request Collapsing
در CDN چندلایه، Edgeهای نزدیک کاربر میتوانند Miss را به Regional cache یا Shield بفرستند؛ این لایه قبل از Origin شانس Hit مشترک و collapse درخواستهای همزمان را بالا میبرد. نتیجه ممکن است کاهش Origin egress و جلوگیری از stampede باشد.
مستند CloudFront Origin Shield توضیح میدهد این لایه برای محتوای cacheable و Origin محدود میتواند مفید باشد، اما برای requestهای dynamic/کمتکرار یا کمقابلیت Cache لزوماً مناسب نیست و هزینه افزوده دارد. پس Shield را بهصورت «همیشه بهتر» فعال نکنید.
| شاخص | قبل | بعد | هشدار |
|---|---|---|---|
| Edge hit ratio | پایه | ممکن است ثابت بماند | فقط Edge را نبینید |
| Origin request rate | پایه | باید کم شود | Dynamic را جدا کنید |
| Origin egress | پایه | باید کم شود | Byte hit ratio مهم است |
| Miss TTFB | پایه | ممکن است بهتر یا بدتر شود | مکان Shield مهم است |
| Cost/request | پایه | لایه جدید هزینه دارد | صرفهجویی Origin را کم کنید |
Edge Computing: چه منطقهایی واقعاً در لبه مناسباند؟
Edge function بخشی از برنامه است، با quota، runtime، deployment، observability و failure domain خودش. «نزدیک کاربر» لزوماً به معنی سریعتر نیست؛ اگر function برای هر درخواست به Database دور تماس بگیرد، مسیر پیچیدهتر و کندتر میشود.
| Use case | تناسب اولیه | شرط |
|---|---|---|
| Header/security policy | زیاد | منطق کوچک، deterministic و تستشده |
| URL rewrite/redirect | زیاد | Loop و canonical کنترل شوند |
| A/B assignment | متوسط | Stable allocation، cache key و analytics |
| Auth precheck | متوسط | Issuer/audience/key rotation و revocation روشن |
| Personalization | متوسط تا کم | Privacy، state و variant cardinality محدود |
| Image transform | متوسط | Cache، format، quality و cost guard |
| Database transaction | کم | Consistency/latency و authority معمولاً Origin میماند |
| پرداخت/سفارش write | کم | Idempotency، reconciliation و region authority لازم |
مستند AWS برای CloudFront Functions و Lambda@Edge نشان میدهد حتی در یک پلتفرم، runtime سبک و تابع پیچیدهتر trigger، زبان و محدودیت متفاوت دارند. صفحه Limits مربوط به Cloudflare Workers نیز quotaهای CPU، Subrequest، Cache API، Log و asset را plan-dependent فهرست میکند. برای هر گزینه یک snapshot تاریخدار بسازید.
قرارداد Edge Function
- Trigger و فاز Viewer/Origin Request/Response؛
- ورودیهای قابل اعتماد و normalization؛
- CPU، memory، wall time، subrequest و body limit؛
- State model، consistency و data residency؛
- Secret، key rotation و least privilege؛
- Timeout، exception و fail-open/fail-closed per action؛
- Version، canary، propagation و rollback؛
- Log sampling، redaction، request ID و cost؛
- Portability و exit test.
برای مقایسه workload و TCO اجرای Serverless با سرور، راهنمای Serverless و هاست سنتی مکمل این بخش است.
امنیت Edge: CDN مرز اعتماد جدید است، نه سپر جادویی
| تهدید | کنترل Edge | چیزی که باقی میماند |
|---|---|---|
| DDoS حجمی/پروتکل | Anycast/scrubbing/rate | ظرفیت و Terms واقعی plan |
| HTTP flood | WAF/Bot/challenge | False positive و حمله شبیه کاربر |
| Injection | WAF rule | Validation و query امن در App |
| BOLA/API abuse | Token/rate/schema اولیه | Authorization شیء در سرویس |
| Credential stuffing | Bot/rate/risk signal | MFA، recovery و account telemetry |
| Origin bypass | ACL/mTLS/secret header | IP leak و سرویسهای موازی |
| Cache poisoning | Normalization/key policy | Origin behavior و unkeyed input |
| Supply-chain/config | Version/RBAC/audit | Account takeover و rule drift |
«WAF مبتنی بر AI» بدون Detection scope، false-positive rate، rule ID، sample، mode و rollback یک ادعای بازاری است. ابتدا در Log/Count mode، سپس روی مسیر محدود و با Exclusion تاریخدار اجرا کنید. راهنمای تفصیلی Policy در فایروال و WAF سایت و تهدیدهای BOLA/OAuth/JWT در امنیت API آمده است.
Origin را واقعاً قفل کنید
اگر IP Origin از DNS قدیمی، certificate transparency، ایمیل، asset یا سرویس موازی پیدا شود و مستقیم پاسخ دهد، مهاجم میتواند WAF/CDN را دور بزند. راهنمای رسمی Cloudflare برای حفاظت Origin نمونههایی مانند Proxy record، محدودکردن IP و Authenticated Origin Pulls را مطرح میکند.
- فقط Range یا اتصال احرازشده CDN به Origin اجازه دهید؛
- TLS را در مسیر Edge→Origin هم validate کنید؛
- Header محرمانه را با mTLS اشتباه نگیرید و rotation داشته باشید؛
- Real client IP را فقط از Proxyهای trusted بپذیرید؛
- Host مستقیم، IP، دامنه قدیمی و IPv6 را جدا تست کنید؛
- پنل، SSH، API داخلی و Storage را پشت همان مرز فرض نکنید.
حریم خصوصی و شخصیسازی در Edge
Edge محل مناسبی برای جمعآوری بیحد داده نیست. Geo، fingerprint، Bot signal، Cookie و log میتوانند داده شخصی یا حساس عملیاتی باشند. Purpose، retention، دسترسی، انتقال و redaction را پیش از فعالکردن محصول امنیتی/تحلیلی تعیین کنید.
برای Personalization سه مرز را روشن کنید:
- کدام attribute واقعاً پاسخ را عوض میکند؟
- آیا این attribute وارد Cache Key میشود، response private است یا bypass میشود؟
- کاربر، تیم پشتیبانی و سیستم Purge چگونه variant را تشخیص میدهند؟
Geo-IP قطعی نیست؛ VPN، اپراتور موبایل و route مرزی میتواند مکان را اشتباه نشان دهد. Redirect اجباری زبان/کشور را بر IP بنا نکنید؛ انتخاب کاربر و URL قابل crawl/اشتراک باید authority روشن داشته باشند.
Failover و Availability: Read با Write یکی نیست
Failover CDN معمولاً برای GET/HEAD cacheable سادهتر از POST پرداخت یا سفارش است. مستند CloudFront Origin Failover نمونهای است که Failover را برای methodها و statusهای مشخص محدود میکند؛ این رفتار را نمیتوان به همه ارائهدهندگان تعمیم داد.
| Journey | Fallback امن | خطر |
|---|---|---|
| Asset immutable | Origin دوم یا stale | نسخه ناسازگار App/Asset |
| مقاله/کاتالوگ | stale محدود | قیمت/موجودی منقضی |
| API خواندنی | Replica با consistency معلوم | read-after-write قدیمی |
| Login | مسیر IdP/Session طراحیشده | Key/session mismatch |
| Cart/Order | Application-level idempotency | duplicate یا split brain |
| Payment callback | Queue/retry/reconciliation | تأیید یا رد دوگانه |
RTO/RPO، timeout، retry budget، idempotency key، consistency و rollback را برای هر Journey بنویسید. CDN نمیتواند state write را بدون قرارداد Application به Origin دوم منتقل کند.
HTTP/۳، TLS، Compression و Media Optimization
HTTP/۳ یک قابلیت Edge-to-user است و فعالبودنش الزاماً مسیر Edge-to-Origin یا تجربه همه کاربران را عوض نمیکند. Protocol adoption، fallback، handshake failure و p75/p95 را به تفکیک ISP و device بسنجید. برای QUIC، migration و روش اندازهگیری، راهنمای HTTP/۳ را ببینید.
- TLS: Edge certificate، Origin certificate، version/cipher و renewal را جدا کنید.
- Compression: Brotli/Gzip باید با Content-Type، ETag و Vary سازگار باشد.
- Image: Format/quality/width DPR میتواند variant و هزینه را زیاد کند.
- Video: Packaging، range request، origin egress و cache key اهمیت دارند.
- WebSocket/gRPC: Proxy support، timeout، Shield و WAF behavior را plan-specific بررسی کنید.
- Early Hints/Preload: فقط با dependency graph و measurement؛ header زیاد تضمین سرعت نیست.
Observability: Hit Ratio تنها KPI نیست
RFC 9211 Header استاندارد Cache-Status را برای توضیح رفتار Cache تعریف میکند. بسیاری از CDNها Header اختصاصی هم دارند. این Header را با Request ID و trace داخلی پیوند دهید، اما اطلاعات حساس یا جزئیات قابل سوءاستفاده را بیدلیل عمومی نکنید.
| SLI | تقسیم لازم | تفسیر |
|---|---|---|
| Eligible hit ratio | Content class/PoP | فقط درخواست قابل Cache در مخرج |
| Byte hit ratio | Asset/Video | اثر واقعی بر Origin egress |
| Origin offload | Method/endpoint | تعداد و پهنایباند کمشده |
| TTFB p75/p95 | ISP/City/Protocol/Hit-Miss | میانه بهتنهایی tail را پنهان میکند |
| Edge 4xx/5xx | Rule/function/origin | منبع خطا جدا شود |
| WAF/Bot action | Rule/path/outcome | Block زیاد موفقیت نیست |
| Purge propagation | Region/key/version | زمان تا نسخه مطلوب |
| Function SLI | Version/trigger | Error، CPU، timeout و subrequest |
| Cost per success | Journey/feature | Request، log، compute و egress |
Log ممکن است sampled، delayed یا best-effort باشد. مستند AWS برای Edge function logs صریحاً هشدار میدهد برخی logها accounting کامل درخواستها نیستند. Billing، security investigation و SLO را به منبعی تکی وابسته نکنید.
برای طراحی Metric/Log/Trace/SLO به راهنمای Observability و برای Probe بیرونی مستقل از Vendor به راهنمای مانیتورینگ Uptime مراجعه کنید.
TCO واقعی CDN پیشرفته
قیمت هر گیگابایت فقط یک ردیف است. هزینه ماهانه را برای سناریوی کم/پایه/پیک بسازید:
TCO = Data delivery + Requests + Origin egress + Edge compute + WAF/Bot/DDoS + Log/Analytics + Image/Video + Shield/Load balance + DNS/Certificate + Support + Engineering/Ops + FX/Payment + Exit
| محرک | واحد | دام هزینه پنهان |
|---|---|---|
| Request | میلیون درخواست/Region | فایل ریز و API chatty |
| Transfer | GB/TB destination | Region/commit/overage |
| Compute | Invocation/CPU/duration | همه requestها trigger میشوند |
| Security | Rule/request/domain | Bot/API feature در plan بالاتر |
| Logging | GB ingest/store/query | Cardinality و retention |
| Media | Transform/minute/output | Variant abuse و cache miss |
| Origin | Egress/request/compute | Key بد و Purge storm |
| People | نفر-روز | Rule، incident، migration و audit |
| Exit | پروژه/dual run | syntax، function، log و DNS lock-in |
Cost per successful Journey و Cost per protected request را کنار هزینه خام گزارش کنید. CDN ارزان با Hit پایین، Origin egress زیاد، log ناکافی یا Support غیرقابل دسترس ممکن است TCO بالاتری داشته باشد.
CDN پیشرفته برای ایران: نام PoP کافی نیست
فهرست شهرها یا نقشه Anycast نمیگوید کاربر هر ISP در ساعت اوج از کدام Route میرود. از شبکههای موبایل و ثابت، چند شهر، VPN/no-VPN و DNS resolverهای متفاوت اندازهگیری کنید. داده باید timestamp، ISP، IP family، Protocol و Hit/Miss را نگه دارد.
| محور ایران | آزمون | تصمیم |
|---|---|---|
| Route/Peering | TTFB/loss/jitter چند ISP | Vendor/route واقعی، نه نزدیکترین شهر |
| Eligibility | Terms/Account/Region feature | Knockout پیش از معماری |
| Payment/FX | تمدید، سقف و جهش ارز | Reserve و fallback |
| Support | Incident drill و channel | SLA قابل استفاده در timezone شما |
| Data/Log | محل، retention و export | حقوق/حریم خصوصی/IR |
| Protocol | HTTP/۲/۳، IPv4/۶، TLS | Fallback per network |
| Origin route | Edge→Origin p95 و timeout | Shield/Origin location |
| Continuity | Account/DNS/vendor outage | Runbook و exit |
Hybrid CDN داخلی/خارجی یا Multi-CDN فقط وقتی ارزش دارد که یک failure mode یا audience واقعی را پوشش دهد. دو CDN بدون common key، log normalization، certificate/DNS ownership و config parity میتوانند پیچیدگی را دو برابر کنند و Origin را با Missهای تکراری تحت فشار بگذارند.
Multi-CDN چه زمانی منطقی است؟
- رویداد یا ویدیوی بزرگ با capacity/contract چندشبکه؛
- Audience چندمنطقهای با اختلاف اثباتشده Route؛
- نیاز Availability که یک Vendor failure را پوشش میدهد؛
- محدودیت Eligibility/Business continuity با مسیر خروج تمرینشده.
هزینههای پنهان شامل Steering DNS/Client، warm cache، دو Rule language، WAF parity، Log merge، certificate، purge هماهنگ، incident ownership و double billing است. Active-active، weighted و failover را با failure injection مقایسه کنید. Health check «صفحه ۲۰۰» برای Journey دیتابیس/پرداخت کافی نیست.
Scorecard انتخاب CDN پیشرفته
ابتدا Knockoutها را بررسی کنید؛ سپس وزن بدهید. قابلیت فاقد Eligibility یا telemetry با امتیاز بازاری جبران نمیشود.
| معیار | وزن نمونه | شاهد |
|---|---|---|
| Iran journey performance | ۲۰ | p75/p95 چند ISP و Hit/Miss |
| Cache correctness | ۱۵ | Key/TTL/Purge negative test |
| Origin/security | ۱۵ | Bypass/WAF/Bot false-positive drill |
| Reliability | ۱۲ | Stale/failover/function failure |
| Edge fit | ۱۰ | Quota/runtime/dependency pilot |
| Observability | ۱۰ | Log completeness/correlation/export |
| TCO | ۱۰ | Low/base/peak + FX/Ops/Exit |
| Portability/support | ۸ | Config export/rollback/incident test |
وزنها نمونهاند. فروشگاه ایرانی ممکن است پرداخت/false positive را Knockout بداند؛ سایت رسانهای Byte hit ratio و video را سنگینتر وزن دهد. Confidence هر امتیاز را High/Medium/Low ثبت کنید؛ Demo فروشنده با Pilot تولید برابر نیست.
Pilot مرحلهای بدون قمار روی کل دامنه
مرحله ۱: Baseline و Shadow
- Journey، audience، traffic shape و SLO را ثبت کنید.
- Header/Cache behavior فعلی و Origin capacity را baseline بگیرید.
- Log/Count mode امنیتی و mirror/replay امن را فعال کنید.
- Knockoutهای Terms، پرداخت، TLS، DNS و data را ببندید.
مرحله ۲: Static Canary
- دامنه یا path محدود با asset immutable را مسیر دهید.
- Hit/Miss/Key/Purge/Protocol/PoP و Origin offload را بسنجید.
- Probe چند ISP ایران و مرورگر واقعی اجرا کنید.
- Rollback DNS/config و cache warm-up را تمرین کنید.
مرحله ۳: HTML/API محدود
- Cache matrix و دو-account negative test اجرا کنید.
- WAF/Bot را از Count به Canary rule ببرید.
- Edge function را Version/Canary و failure inject کنید.
- Stale، Origin timeout، purge storm و dependency outage را تست کنید.
مرحله ۴: Ramp یا Stop
- ۵→۲۵→۵۰→۱۰۰ درصد را با Hold point تعریفشده طی کنید.
- Guardrailهای p95، error، false positive، cost و support را بررسی کنید.
- اگر Kill criterion شکست، Rollback کنید؛ rollout موفقیت اجباری نیست.
- پس از ثبات، Origin bypass و configuration drift را دوباره ممیزی کنید.
Runbook مهاجرت و Rollback
- Inventory رکورد DNS، certificate، Origin، path، method و integration؛
- کاهش TTL با فاصله کافی و ثبت resolver behavior؛
- صدور/آزمون Certificate و TLS دو مسیر؛
- تنظیم Cache/Security در staging و version control؛
- اعتماد Real IP فقط از Proxyهای مجاز و جلوگیری از spoof؛
- فعالکردن telemetry قبل از traffic؛
- Canary، observation window و owner شیفت؛
- قفل Origin پس از تأیید مسیر CDN و نگهداشت break-glass؛
- Rollback برای DNS، Config، Function، WAF و Cache جدا؛
- Post-check برای SEO headers، canonical، redirect، robots و uptime.
Rollback DNS آنی نیست؛ resolverها و connectionهای باز میتوانند مسیر قبلی را نگه دارند. پنجره dual-run و observability هر دو مسیر را در برنامه بیاورید. Secret و allowlist موقت باید تاریخ انقضا داشته باشند.
برنامه ۳۰روزه ارزیابی CDN پیشرفته
روزهای ۱ تا ۷: قرارداد Workload
- Journey، SLO، audience، traffic، data و Origin dependency را ثبت کنید.
- Cache contract برای پنج response مهم بسازید.
- Security trust boundary و bypass inventory را رسم کنید.
- Knockoutهای ایران، Terms، payment و data را بررسی کنید.
روزهای ۸ تا ۱۴: Baseline و Config
- p75/p95 چند ISP، Hit/Miss، Origin egress و error را baseline بگیرید.
- Rule/Function/WAF را در version control و staging بسازید.
- Log schema، request ID، redaction و retention را تعیین کنید.
- TCO کم/پایه/پیک و هزینه Exit را محاسبه کنید.
روزهای ۱۵ تا ۲۱: Pilot و Failure test
- Static Canary سپس HTML/API کمریسک را اجرا کنید.
- Cache leak، poisoning، purge، timeout و stale را آزمایش کنید.
- Edge quota/error، WAF false positive و Origin bypass را تست کنید.
- Rollback و تماس Support را در ساعت واقعی تمرین کنید.
روزهای ۲۲ تا ۳۰: تصمیم
- Scorecard با Confidence و Evidence تکمیل کنید.
- مقایسه before/after و Cost per success را ارائه دهید.
- Gap، risk acceptance و owner را ثبت کنید.
- Scale، Hybrid، Multi-CDN، Defer یا Stop را صریح انتخاب کنید.
اشتباههای رایج در CDN پیشرفته
- سال و Trend بهجای نیاز: قابلیت جدید بدون Workload fit خریداری میشود.
- تعداد PoP: Route واقعی ISP و کیفیت اتصال به Origin سنجیده نمیشود.
- Cache همه HTML: Session و داده شخصی به خطر میافتد.
- Key بزرگ: Header/Cookie بیاثر variant و هزینه میسازد.
- Purge everything: Origin stampede پس از انتشار ایجاد میشود.
- Edge برای Database: latency dependency مزیت جغرافیایی را از بین میبرد.
- WAF=امنیت کامل: Authorization و validation برنامه فراموش میشود.
- Origin باز: همه کنترلهای Edge قابل دورزدن میشوند.
- Failover برای POST: duplicate و split-brain نادیده گرفته میشود.
- Hit ratio خام: requestهای غیرقابل Cache و byte offload پنهان میمانند.
- Log=حقیقت کامل: sampling/delay/best-effort در نظر گرفته نمیشود.
- AI label: Detection scope، FP، explainability و rollback شاهد ندارند.
- رایگان برای همیشه: Quota، overage، FX، Support و exit در TCO نیست.
- Multi-CDN نمایشی: Config، key، purge و incident دوگانه میشوند.
چکلیست تصمیم نهایی
- مسیر DNS→Edge→Shield→Origin→Dependency با owner رسم شده است.
- Cache identity/freshness/consistency/privacy/failure/evidence تعریف شده است.
- دو-account negative test و purge propagation موفقاند.
- Edge function quota، state، failure و rollback دارد.
- Origin برای IPv4/IPv6/domain/IP و سرویس موازی قفل و تست شده است.
- WAF/Bot از Count/Canary با false-positive guardrail عبور کردهاند.
- Read failover و Write semantics جدا طراحی شدهاند.
- Telemetry hit/offload/tail/error/security/purge/function/cost را پوشش میدهد.
- Probe چند ISP و device ایران، نه فقط Vendor dashboard، موجود است.
- TCO شامل FX، log، compute، security، people، support و exit است.
- Pilot، Hold point، Kill criterion و Rollback تمرین شدهاند.
- قابلیتها با Plan/Region/Date snapshot و مستند رسمی تأیید شدهاند.
سوالات متداول درباره CDN پیشرفته
تفاوت CDN معمولی و CDN پیشرفته چیست؟
CDN پایه عمدتاً فایل cacheable را نزدیک کاربر تحویل میدهد. CDN پیشرفته میتواند Cache قابل برنامهریزی، Edge Function، Shield، WAF/Bot، چند Origin و telemetry عمیقتر بدهد. تفاوت واقعی وقتی معنا دارد که این قابلیتها برای Workload شما Eligible، قابل اندازهگیری و قابل rollback باشند.
آیا Edge Computing همیشه سرعت را بیشتر میکند؟
خیر. منطق کوچک و بدون dependency دور میتواند latency را کم کند؛ اما function سنگین یا تماس با Database دور، quota و لایه جدید اضافه میکند. Hit/Miss، CPU، subrequest، p95 و failure را روی مسیر واقعی بسنجید.
آیا میتوان HTML و API را در CDN Cache کرد؟
بله، اگر هویت پاسخ، Cache Key، TTL، privacy، invalidation و failure دقیق باشند. صفحه حساب، سبد یا API خصوصی را بدون دو-account negative test و طراحی صریح Shared cache نکنید. برای داده پویا گاهی revalidation یا bypass درستتر است.
آیا CDN جایگزین WAF، هاست و امنیت API میشود؟
خیر. بعضی CDNها WAF و Edge compute ارائه میکنند، اما validation، object authorization، state، Database و منطق اصلی همچنان مسئولیت برنامه و Origin است. Origin باز نیز کنترل Edge را قابل دورزدن میکند.
بهترین CDN پیشرفته برای کاربران ایرانی کدام است؟
پاسخ عمومی و پایدار ندارد. Eligibility، پرداخت، Route چند ISP، Edge→Origin، feature plan، Support، log، امنیت، TCO و exit را با Pilot مقایسه کنید. فهرست PoP یا benchmark یک شبکه برای نتیجهگیری کافی نیست.
جمعبندی: Edge را با قرارداد و Evidence بخرید
CDN پیشرفته زمانی مزیت میسازد که Cache درست، Origin محدود، Edge function کوچک و قابل بازیابی، security قابل توضیح و telemetry مستقل داشته باشد. از قابلیتهای مد روز شروع نکنید؛ Journey و SLO را مشخص کنید، Cache و failure contract بنویسید و با Probe ایران، failure drill و TCO تصمیم بگیرید.
بهترین نتیجه ممکن است فعالکردن فقط Tiered Cache و محافظت Origin باشد، نه انتقال کل برنامه به Edge. Pilot باید اجازه بدهد با شواهد Scale، Hybrid، Defer یا Stop را انتخاب کنید.
مطالب مرتبط
- CDN چیست؟ انتخاب و راهاندازی برای سایت ایرانی
- معماری Cache وب و قرارداد Freshness
- HTTP/۳ و QUIC؛ تصمیم فعالسازی
- فایروال و WAF سایت
- Observability، SLO و Telemetry
- مانیتورینگ بیرونی Uptime
- امنیت API، OAuth و JWT
- مقایسه Serverless و سرور سنتی






