مهاجرت تصاویر به Cloudflare Images؛ تخمین ترافیک و انتشار امن
خلاصهٔ کاملتر
تیم شبکهی پلتفرم مرکاری یک خط لولهی قدیمی تغییر اندازهی تصویر را به Cloudflare Images منتقل کرد، با یک قید غیرقابلمذاکره: همهی URLهای تصویر موجود باید در طول گذار کار میکردن. همین یک شرط تقریباً همهی تصمیمات را شکل داد، چون مجبور شدن مسیر قدیم و جدید را کنار هم اجرا و امنیت را با ترافیک واقعی ثابت کنن. درس کلیدی اینه که چنین مهاجرتی کمتر «سوییچ بکاند» و بیشتر «کشف وابستگی» است؛ الگوهای قدیمی سالها از طریق کش، بوکمارک و کد کلاینت زنده میمونن و حجم ترافیکشون کوچک ولی شعاع آسیبشون بزرگه.
اولین چالش، دسترسی S3 از Cloudflare بود. باکت تصاویر مرکاری نام قدیمی شبیه دامنه داشت و دسترسی virtual-host-style بهخاطر عدمتطابق گواهی، HTTPS را میشکست (خطای 526). راهحل، روش host-header بود: اتصال به endpoint منطقهای S3 و ارائهی نام باکت قدیمی در هدر Host، که با یک origin override در ماژول Terraform داخلیشون پیاده شد و کار را برگشتپذیر نگه داشت.
چالش دوم، کیفیت و هزینه بود. Cloudflare Images الگوریتم فشردهسازی کمی متفاوت داره؛ با نمونهگیری هزاران تصویر دیدن که فایلها اغلب بزرگتر میشن (بهخصوص WebP، تا ~۵۰٪ egress بیشتر)، اما شباهت ادراکی تقریباً ثابت میمونه، پس کیفیت پایینتری از پیشفرض انتخاب کردن. چون قیمتگذاری بر اساس تبدیلهای یکتا در پنجرهی ۳۰روزه است، برای تخمین باید یک کوئری ۳۰روزه اجرا کرد، نه نمونهی روزانه.
برای انتشار بدون توقف، یک لایهی مسیر انتزاعی ساختن که میتونست هم به ارائهدهندهی قدیمی و هم Cloudflare مسیر بده، و بهجای تقسیم تصادفی، با تطبیق regex روی شناسهی تصویر، انتشار را قطعی و قابلدیباگ کردن:
path_regex="/\d+(000[0-9]{1})_\d+\.jpg" # 0.1%
path_regex="/\d+(0[0-9]{3})_\d+\.jpg" # 10%
path_regex="/\d+([0-7][0-9]{3})_\d+\.jpg" # 80%
ریسک اصلی عملیاتی، بازسازی کش بود؛ اگه خیلی سریع بازسازی میشد، S3 اشباع و شبیه قطعی CDN میشد. پس یک انتشار سهفازی (کانری زیر ۰.۱٪، سپس ۱٪، ۵٪، ۱۰٪ و بعد ۱۰٪ در هر ریلیز تا ۱۰۰٪) به کار بردن و سیستم purge کش را اول بهروز کردن. جمعبندی: اول ترافیک را سوییچ نکن؛ اول یاد بگیر چی را میشکنی و انتشار را طوری طراحی کن که خطاها کوچک، قابلسنجش و برگشتپذیر باشن.
نکات کلیدی:
- قید اصلی: همهی URLهای تصویر موجود باید کار کنن؛ کار اصلی کشف وابستگی بود
- مشکل TLS باکت با نام قدیمی با روش host-header و origin override حل شد
- Cloudflare Images فایلهای بزرگتر (بهخصوص WebP) تولید میکنه؛ کیفیت پایینتر انتخاب شد
- انتشار قطعی مبتنی بر regex و سهفازی برای کنترل بازسازی کش




