לאחר פריסה, Cloudflare Durable Object פעיל יכול כעת להמשיך לפעול בגרסת הקוד הנוכחית עד שיעבור למצב תרדמה, או עד שיחלוף פרק הזמן שנקבע. ב־30 באוקטובר Cloudflare קבעה עדכון מושהה כברירת מחדל, עם עיכוב מרבי של חמש דקות. עבור מפתחים, הדבר משנה את אופן פעולתם של אובייקטים פעילים במהלך פריסה: העדכון אינו חייב להפסיק אותם מיד, וחיבורי WebSocket נתמכים עשויים להישמר במעבר לגרסה החדשה.

מה קורה במהלך פריסה
Durable Objects הם אובייקטים שניתן לפנות אליהם, בעלי זהות ומצב מתמשכים, שבהם Cloudflare משתמשת, בין היתר, לתיאום בין לקוחות, למשימות ארוכות ולפעילויות WebSocket. לכל אובייקט פועלת גרסת קוד אחת בכל רגע נתון. לכן, החלפה מיידית עלולה לאפס מופע פעיל ולקטוע את הפעילות או את החיבורים.
כעת, תרחיש ברירת המחדל הוא מעבר מושהה. לאחר הפריסה, האובייקט הפעיל ממשיך לטפל בבקשות בגרסה הישנה. אם הוא עובר למצב תרדמה קודם לכן, הגרסה החדשה תופעל בפנייה הבאה. אם חמש הדקות חולפות והאובייקט עדיין פעיל, הוא מתאפס ומקבל את הגרסה החדשה. פריסת ה-Worker מסתיימת בנפרד: העיכוב נוגע למועד שבו אובייקט שכבר פעיל מתחיל להריץ את הקוד החדש.
למי זה מועיל
השינוי חשוב לשירותים שבהם אובייקט אחד שומר על פעילות בין בקשות, למשל במהלך הפעלה ממושכת, תיאום בין כמה לקוחות או חיבור WebSocket. המעבר המושהה יוצר חלון זמן שבו אובייקט כזה יכול להשלים את הפעילות הנוכחית באופן טבעי או לעבור למצב שינה לפני העדכון. לגבי WebSocket, Cloudflare מציינת תנאי נפרד: חיבורים המשתמשים ב-Hibernation API נשארים מחוברים כשהאובייקט מקבל קוד חדש לאחר שעבר למצב תרדמה.
המסקנה המעשית לצוות היא לזהות אילו אובייקטים פעילים עלולים להישאר עסוקים יותר מכמה דקות, ולברר באיזה API של WebSocket נעשה שימוש. הדבר קובע אם סדר הפריסה החדש ייתן ליישום הזדמנות לעבור באופן חלק, או שהחיבור יסתיים בעת עדכון כפוי.
חמש דקות הן חלון זמן, לא הבטחה
Cloudflare מתארת את העדכון המושהה כניסיון מיטבי: ייתכן שאובייקט יתאפס מוקדם יותר, למשל בעת עדכון סביבת הריצה. אם הוא לא עבר למצב תרדמה עד תום העיכוב המרבי, הפלטפורמה תחיל את הגרסה החדשה באמצעות איפוס. לכן יש לשמור מצב חשוב באחסון מתמשך ולתכנן פעולות מתוך הנחה שהן עשויות להתחיל מחדש. בתיעוד Cloudflare מומלץ לשמור מצב שאמור לשרוד פריסות, ולא להסתמך על זיכרון המופע הפעיל.
צוותים יכולים לשנות את ההתנהגות בהגדרות Durable Objects: לבחור מצב עדכון מיידי או לקבוע פרק זמן אחר למעבר המושהה. מצב מיידי מתאים כאשר הגרסה החדשה צריכה להיכנס לתוקף מיד, למשל במקרה של תיקון דחוף; עיכוב ארוך יותר עשוי לתת לאובייקטים זמן נוסף, אך גם להאריך את התקופה שבה חלק מהמופעים מפעילים את הגרסה הישנה.
מה לבדוק לפני הפריסה הבאה
בדקו את התאימות בין בקשות של Worker ושל Durable Object בזמן שהם עשויים לפעול בגרסאות שונות. ודאו שמצב קריטי נשמר באחסון ולא רק בזיכרון. לגבי WebSocket, בררו אם היישום משתמש ב-Hibernation API: חיבורים רגילים עלולים להסתיים בעת החלת העדכון. אם הפריסה מחייבת מעבר מיידי, בדקו את ההגדרה המפורשת של המצב במקום להסתמך על ברירת המחדל החדשה.
לסיכום, Cloudflare שינתה את ברירת המחדל של האיזון בפריסה: אובייקטים פעילים מקבלים זמן מוגבל למעבר טבעי, והצוותים עדיין יכולים להאיץ את העדכון באמצעות הגדרה. הצעד המועיל ביותר למפתחים הוא לבדוק את התאימות בין הגרסה הישנה לחדשה, את שימור המצב ואת סוג ה-WebSocket לפני הפריסה הבאה.