סביבות הרצה מבודדות בענן נוטות להיראות כמו קסם עד שהן נתקלות בטיימאאוט הראשון שלהן. אתמול, ב-8 באוקטובר 2026, Vercel פרסה עדכון שקט בצד השרת למוצר ה-Sandbox שלה, כזה שלא דורש התקנת גרסה חדשה של החבילה אבל משנה לחלוטין את לוח הזמנים של הקוד. לפי הודעת העדכון של Vercel, הקריאה לפונקציה Sandbox.create מחזירה מעתה סביבה מוכנה לחלוטין להרצה, כזו שסיימה כבר את כל שלב שחזור ה-snapshot. התוצאה נשמעת נוחה על הנייר, אך בתוך פונקציית Serverless חסרת סבלנות היא עלולה להפוך למלכודת שגיאות מיידית שמשבשת שירותים פעילים.
ההמתנה עוברת להתחלה
עד השינוי הנוכחי, הקריאה לפונקציה יצרה את המופע במהירות והחזירה Promise שנפתר כמעט מיד. העבודה הכבדה, שכללה את שחזור מערכת הקבצים מה-snapshot השמור, התרחשה בפועל ברקע ונחשפה רק כשהרצתם את הפקודה הראשונה דרך runCommand או כשניסיתם לקרוא קובץ דרך sandbox.fs. כעת ההתנהגות התהפכה לחלוטין מול התשתית: ה-Promise של היצירה נפתר רק אחרי ששחזור המצב הושלם במלואו בתוך ה-microVM, מה שמשהה את שורת הקוד הראשונה שלכם.
השינוי הזה קורה ברקע.
שגיאות אתחול דוחות כעת את Sandbox.create במקום לצוף במהלך הפעולה הראשונה.הדוקומנטציה של Vercel
המשמעות הארכיטקטונית מיידית: אם סביבת ההרצה נכשלת בעלייה או אם קובץ ה-snapshot פגום, הקריסה מגיעה עכשיו ישירות מבלוק הבנייה. מי שהחזיק בלוקי try ו-catch רק סביב הרצת הפקודות יגלה שגיאות לא מטופלות שקורסות עוד בשלב ההקמה. מעבר לכך, שחזור הנתונים נגרע מזמן הפקודה ונרשם כולו לחובת הבנייה, כך שכל כישלון ברשת או במערכת הקבצים יפיל את תהליך ההקמה הראשוני.
המחיר הנסתר בשרתים ללא שרת
לפי מדריך ה-SDK של החברה, סביבות Sandbox מוגדרות כברירת מחדל כסביבות persistent עם ערך true. המשמעות היא שכל עצירה שומרת snapshot לצורך שחזור מהיר בריצה הבאה דרך Sandbox.get או יצירה מחודשת. כאשר מריצים את הקוד הזה מתוך סביבת Serverless טיפוסית ב-Node.js או ב-TypeScript, הפונקציה חיה תחת מגבלת זמן קשיחה, לרוב בין 10 ל-15 שניות בלבד.
כאשר ה-snapshot אינו שמור במטמון המקומי של השרת המארח, פעולת השחזור מתארכת. לפי החברה, זמן שחזור ה-snapshot נספר כעת לטובת שלב היצירה במקום לפעולה הראשונה. אם הפונקציה נדרשת לטעון מופע כבד, היא מסתכנת בחריגה ממגבלת הזמן עוד לפני שהגיעה לשורת הקוד שמריצה את המשימה עצמה. במצב כזה, סביבות שצורכות זיכרון של 2048 מגה-בייט לכל מעבד וירטואלי ייעצרו באמצע הדרך.
הגבול פה קשיח מדי.
לא הייתי ממהר להשאיר את הגדרות ברירת המחדל בפרויקטים שרצים תחת עומס. מי שמחזיק קוד שמסתמך על snapshots גדולים בייצור בלי להגדיל את מכסת השניות השרתית לוקח הימור מיותר על יציבות המערכת כולה.
| מאפיין | לפני השינוי | אחרי השינוי |
|---|---|---|
| פתרון ה-Promise ביצירה | מהיר, לפני שחזור ה-snapshot | רק לאחר סיום שחזור מלא |
| עיתוי שגיאות אתחול | נחשפות בפקודה הראשונה | נזרקות מיד מ-Sandbox.create |
| זמן יצירה חציוני (p50) | לא פורסם | תוספת של כ-50 מילי-שניות לפי החברה |
| ייחוס זמני שחזור | נמדד על הפעולה הראשונה | נמדד כולו על פעולת היצירה |
המרחק מישראל והבטחת החמישים מילישניות
בהודעה הרשמית נטען כי חציון זמן היצירה עלה בכ-50 מילי-שניות בלבד. מדובר בטענה של החברה שנמסרה ללא בנצ'מרק פומבי או נתוני זנב, כשבדוקומנטציה מצוין שייתכן עיכוב גדול יותר לשחזורים ללא מטמון. מעבר למספרים היבשים, יש כאן פער תשתיתי שנוגע ישירות למי שמפתח מישראל ומריץ קוד מול סביבות מרוחקות.
ל-Vercel אין אזור מחשוב פעיל עבור Sandbox בישראל, וברירת המחדל שמופיעה בתיעוד היא אזור iad1 בווירג'יניה שבארה"ב. כל קריאה סינכרונית ל-Sandbox.create מחייבת עכשיו תקשורת מלאה עד לסיום השחזור באמריקה. כשמחברים את השהיית הרשת הטרנס-אטלנטית לזמני שחזור משתנים, הפונקציות המקומיות שלכם משלמות מחיר כפול על כל בקשה סינכרונית שנשלחת אל מעבר לים.
מה לשנות בקוד עכשיו
אם יש לכם קוד שרץ בייצור, יש כמה דברים שצריך לבצע מיד כדי למנוע נפילות. ראשית, העבירו את מנגנוני ה-try וה-catch כך שיעטפו את הקריאה ל-Sandbox.create, כדי לטפל בכשלי שחזור ישירות במקום שבו הם קורים. שנית, מחקו לולאות polling ידניות שבדקו את השדה status בחיפוש אחר מצב running, שכן ה-Promise לא ייפתר לפני שהמכונה אכן פועלת במלואה.
הצעד הנוסף הוא בדיקת הגדרות ה-Serverless: מומלץ להעלות את תקרת ה-timeout של הפונקציה ב-Vercel, כדי למנוע קריסות שנובעות משחזורי snapshots כבדים. בדקו גם את הגדרות ה-timeout ו-expiresAt ב-SDK כדי לוודא שהסשן עצמו לא ייסגר מוקדם מהצפוי.
בינתיים, הסביבה שלכם מוכנה לפעולה קצת יותר מהר, בהנחה שהשרת בכלל שרד את ההמתנה.
מקורות
- Vercel Sandbox creation now returns a ready sandboxhttps://vercel.com/changelog/sandbox-create-waits-until-ready
- JS SDK Referencehttps://vercel.com/docs/sandbox/sdk-reference
- Vercelhttps://weba.co.il/tools/vercel/
- TypeScripthttps://weba.co.il/glossary/typescript/
הידיעה נכתבה מהמקורות שלמעלה בתאריך הפרסום, וכל טענה בה נבדקה מולם. מצאתם טעות? כתבו.