چرا purge نیمه دیگر cache است
یک CDN دقیقاً به این دلیل سایت شما را سریع میکند که محتوا را نگه میدارد، اما همین رفتار به این معناست که یک ویرایش تا انقضای نسخه cacheشده نامرئی میماند، که میتواند ساعتها طول بکشد. purge دریچه فرار است: به edge میگوید اشیای مشخصی را بیدرنگ رها کند تا درخواست بعدی نسخهای تازه از origin بکشد. بدون یک purge قابلاتکا، cache تهاجمی به یک ریسک تبدیل میشود چون جرئت نمیکنید چیزی را برای مدت طولانی cache کنید؛ با آن، میتوانید TTL های سخاوتمندانه برای سرعت تنظیم کنید و همچنان تغییرات فوری را ظرف چند ثانیه زنده کنید. به همین دلیل purge و cache دو نیمه یک ابزار واحدند، نه دو امکان جداگانه.
purge جراحی در برابر کامل
پاک کردن کل cache پس از یک ویرایش یکخطی متن جواب میدهد، اما هر شیء گرم را دور میریزد و edge را وادار میکند همه چیز را دوباره بکشد، که کوتاهمدت بار origin را بالا میبرد و اولین بازدیدکنندگان را کند میکند. cdn.com.tr به شما امکان میدهد یک URL واحد یا مجموعهای از مسیرها را پاک کنید تا دقیقاً همان چیزی را که تغییر کرده باطل کنید و بقیه cache را گرم بگذارید. قاعده سرانگشتی این است که برای ویرایش محتوا بهصورت محدود purge کنید و purge کامل را برای انتشارهایی نگه دارید که به داراییهای مشترک مانند یک stylesheet سراسری یا یک قالب پُرکاربرد دست میزنند، و انتخاب دامنه درست هم درستی و هم کارایی را دستنخورده نگه میدارد.
purge API برای خطوط خودکار
purge دستی تا وقتی که فراموش نکنید کار میکند، و یک purge فراموششده یعنی کاربران به یک صفحه کهنه خیره شدهاند در حالی که شما قسم میخورید اصلاح deploy شده است. purge API گام انسانی را حذف میکند با اجازه دادن به خط deploy شما تا باطلسازی را بهعنوان بخشی از انتشار فراخوانی کند، بنابراین یک merge که یک build را راه میاندازد میتواند دقیقاً همان URLهایی را که آن build تغییر داده پاک کند. این تفاوت میان cache بهعنوان چیزی است که باید مراقبش باشید و cache بهعنوان یک لایه نامرئی که خودبهخود درست میماند، و برای تیمهایی که روزی چند بار deploy میکنند ضروری است.
لاگهای زنده وقتی چیزی خراب میشود
وقتی یک صفحه خطا برمیگرداند یا یک deploy درست رفتار نمیکند، حدس زدن پرهزینه است و پخش لاگ راهی است برای توقف حدس زدن. برای اپلیکیشنهای container، cdn.com.tr، stdout و stderr را پخش میکند تا بتوانید خروجی خودِ اپلیکیشن را تقریباً بلادرنگ تماشا کنید و stack trace واقعی، کوئری ناموفق یا خطای راهاندازی را بخوانید بهجای استنتاج آن از یک خطای عمومی ۵۰۰. باز نگه داشتن نمای لاگ در حین یک انتشار یعنی یک rollout بد را در چند ثانیه اول میگیرید، وقتی اصلاح هنوز ارزان است، بهجای شنیدن آن از کاربران بعداً.
وضعیت: دانستن اینکه واقعاً چه چیزی زنده است
یک شکاف خطرناک میان deploy کردن یک نسخه و پاسخدهی واقعی آن نسخه به ترافیک وجود دارد، و وضعیت آن را میبندد. پنل نشان میدهد کدام انتشار جاری است، چه زمانی deploy شده و آیا healthcheck موفق است، بنابراین یک وضعیت سبز تأیید ملموسی است که container جدید بالا آمده و به درخواستها پاسخ میدهد. این درست پس از یک rollout بیشترین اهمیت را دارد، وقتی یک build میتواند موفق شود اما اپلیکیشن همچنان بهدلیل یک مقدار محیطی بد یا یک وابستگی گمشده در راهاندازی ناموفق بماند، و healthcheck همان چیزی است که این را بیدرنگ آشکار میکند.
یک جا برای انتشار و راستیآزمایی
ارزش کنار هم گذاشتن purge، لاگها و وضعیت این است که کل حلقه deploy-و-تأیید روی یک سطح قرار دارد بهجای پراکنده شدن در چند ابزار. یک تغییر را منتشر میکنید، cache متأثر را purge میکنید، لاگها را برای خطا تماشا میکنید و وضعیت سلامت را برای تأیید موفقیت میخوانید، همه بدون ترک پنل یا همبسته کردن سه داشبورد مختلف. برای تیمهایی که تغییرات تولیدی مکرر انجام میدهند، همین یکپارچگی است که کار کردن با سایت را کنترلشده حس میکند نه پُر از دلهره، چون هر پرسشی که پس از یک deploy دارید پاسخش همانجاست.
راهاندازی گامبهگام
کنترلهای purge را پیدا کنید
دامنه یا اپلیکیشن خود را در پنل باز کنید و به بخش cache/purge بروید. اینجا میتوانید یک URL واحد، گروهی از مسیرها، یا کل cache برای zone را پاک کنید. purge تکURL گزینه جراحی برای یک صفحه تغییریافته است؛ purge کامل ابزار درشت برای یک انتشار سراسری سایت.
پس از هر تغییر محتوا، purge کنید
وقتی یک صفحه را ویرایش میکنید، تصویری را جایگزین میکنید یا یک deploy را منتشر میکنید، URLهای متأثر را پاک کنید تا edge در درخواست بعدی نسخههای تازه را دریافت کند بهجای ارائه نسخههای cacheشده تا انقضای TTL. این را به عادت تبدیل کنید تا بازدیدکنندگان هرگز محتوای دیروز را نبینند.
purge را به خط تولید خود متصل کنید
از purge API استفاده کنید تا باطلسازی را بهصورت خودکار از CI/CD یا اسکریپت deploy خود راهاندازی کنید، بنابراین بهمحض انتشار یک build، ورودیهای cache مرتبط بدون آنکه کسی پنل را باز کند پاک میشوند. اینگونه درستی cache را بدون تکیه بر حافظه انسان حفظ میکنید.
لاگهای اپلیکیشن خود را پخش کنید
برای اپلیکیشنهای container، نمای لاگها را باز کنید تا stdout و stderr را تقریباً بلادرنگ دنبال کنید. وقتی یک درخواست ناموفق میشود یا یک deploy بدرفتاری میکند، جریان لاگ همان جایی است که خطای واقعی را میبینید، بنابراین آن را در حین و درست پس از یک انتشار باز نگه دارید.
وضعیت deploy و سلامت را بخوانید
نمای وضعیت را بررسی کنید تا تأیید کنید کدام انتشار فعال است، چه زمانی deploy شده و آیا healthcheck موفق است. یک وضعیت سلامتِ سبز پس از یک rollout، نشانه شماست که نسخه جدید واقعاً به ترافیک پاسخ میدهد، نه اینکه فقط آپلود شده باشد.
آن را به یک روال تبدیل کنید
یک حلقه ثابت پس از deploy را بپذیرید: منتشر کن، purge کن، لاگها را تماشا کن، سلامت را تأیید کن. دنبال کردن همان چکلیست کوتاه در هر بار همان چیزی است که deploy را از یک قمار به یک عملیات کنترلشده و قابلمشاهده تبدیل میکند.
نمونه سناریوها
یک توسعهدهنده CSS و JavaScript جدید منتشر میکند، همان URLهای دارایی مشخص را از خط تولید purge میکند، و تأیید میکند که بازدیدکنندگان بلافاصله build جدید را بارگذاری میکنند بهجای نسخههای cacheشده که زیر یک TTL طولانی نگه داشته شدهاند.
پس از آنکه یک rollout خطا برمیگرداند، تیم لاگهای زنده اپلیکیشن را پخش میکند، یک متغیر محیطی گمشده را در ردِ راهاندازی مییابد، آن را اصلاح میکند، دوباره deploy میکند و تماشا میکند که healthcheck سبز میشود تا بازیابی را تأیید کند.
یک ویراستار یک خطای واقعیتی را در یک مقاله منتشرشده اصلاح میکند، همان URL واحد را purge میکند، و صفحه اصلاحشده ظرف چند ثانیه زنده میشود بدون انتظار برای انقضای خودبهخودی cache.
پرسشهای پرتکرار
یک purge چقدر سریع اثر میکند؟
purge اشیای هدف را نامعتبر علامت میزند تا درخواست بعدی برای آنها بهجای ارائه از cache، تازه از origin دریافت شود. در عمل تغییر ظرف چند ثانیه مؤثر است، به همین دلیل purge ابزار درست برای اصلاحات فوری است بهجای انتظار برای پایان TTL.
آیا همه چیز را purge کنم یا فقط URLهای تغییریافته را؟
هرجا میتوانید بهصورت محدود purge کنید. پاک کردن یک URL واحد یا مجموعه کوچکی از مسیرها دقیقاً همان چیزی را که تغییر کرده تازه میکند در حالی که بقیه cache را گرم نگه میدارد، بنابراین از یک انفجار ترافیک origin پرهیز میکنید. purge کامل را برای انتشارهایی نگه دارید که داراییهای مشترک پُرکاربرد در کل سایت را تغییر میدهند.
آیا میتوانم purge ها را بهصورت خودکار از خط deploy خود راهاندازی کنم؟
بله. purge API به CI/CD یا اسکریپت deploy شما امکان میدهد باطلسازی را بهعنوان بخشی از انتشار فراخوانی کند، بنابراین cache برای URLهایی که یک build تغییر داده بهمحض deploy بهصورت خودکار پاک میشود، بدون آنکه کسی نیاز به باز کردن پنل داشته باشد.
لاگهای container چه چیزی به من نشان میدهند؟
آنها stdout و stderr خودِ اپلیکیشن شما را تقریباً بلادرنگ پخش میکنند، بنابراین خروجی زمان اجرا واقعی مانند stack trace خطاها، کوئریهای ناموفق و پیامهای راهاندازی را میبینید. این تفاوت میان خواندن علت واقعی یک خرابی و حدس زدن از یک صفحه خطای عمومی است.
چگونه بفهمم یک deploy واقعاً موفق شده؟
نمای وضعیت را بخوانید. نشان میدهد کدام انتشار جاری است، چه زمانی deploy شده و آیا healthcheck موفق است. یک build میتواند تمام شود اما اپلیکیشن همچنان در راهاندازی ناموفق بماند، بنابراین یک healthcheck موفق تأیید ملموسی است که نسخه جدید واقعاً به ترافیک پاسخ میدهد.
ترتیب توصیهشده پس از یک deploy چیست؟
تغییر را منتشر کنید، cache متأثر را purge کنید تا بازدیدکنندگان نسخه جدید را بگیرند، لاگهای زنده را برای هر خطایی در حین راهاندازی تماشا کنید و در نهایت سبز بودن healthcheck را تأیید کنید. اجرای همان حلقه کوتاه در هر بار، deploy ها را قابلمشاهده و کمریسک نگه میدارد.