עודכן לפני חודש
503 Service Unavailable הוא אחד מקודי מצב HTTP הבודדים שהם באמת אופטימיים. הוא לא אומר "משהו השתבש." הוא אומר "משהו השתבש באופן זמני, אני מודע לכך, והנה מתי לנסות שוב."
זוהי גישה שונה לגמרי כלפי כישלון.
ההבטחה של 503
503 הוא חוזה בין השרת לבין הלקוח:
- השרת קיבל והבין את הבקשה שלך
- הוא אינו יכול לטפל בה כרגע
- זה זמני
- הנה מתי לחזור
כותרת ה-Retry-After היא ההבטחה שהופכת למוחשית. בלעדיה, 503 הוא רק תלונה. איתה, 503 הוא תוכנית פעולה.
כשהשרתים אומרים "לא עכשיו"
תחזוקה מתוכננת
הדרך הכי כנה להשתמש ב-503 — אתה מכוון לרדת מהאוויר:
עומס יתר
השרת מוצף בבקשות:
כישלון תלות
תלות קריטית (מסד נתונים, מטמון, API חיצוני) אינה פעילה:
הפעלה וכיבוי
האפליקציה עדיין לא מוכנה, או שהיא עוברת כיבוי מסודר:
כותרת ה-Retry-After
כותרת זו הופכת את 503 משדר מצב לשיחה של ממש.
פורמט שניות להמתנות קצרות:
פורמט תאריך לתחזוקה מתוכננת:
בלי Retry-After, הלקוחות מנחשים. איתה, הם יודעים בדיוק מתי לחזור.
יישום מצב תחזוקה
הגישה הפשוטה ביותר — קובץ שקיים או לא:
הפעלת תחזוקה:
ביטול:
אין צורך בפריסה מחדש. אין צורך בהפעלה מחדש.
לקוחות שמכבדים את ההבטחה
לקוח שמכבד 503 ו-Retry-After:
בדיקות תקינות עם משמעות
נקודות קצה לבדיקת תקינות צריכות להחזיר 503 כשהשירות אינו תקין:
מאזני עומס עוקבים אחר נקודות קצה אלו. כשהם רואים 503, הם מוציאים את השרת מהסבב ומפסיקים לנתב אליו תעבורה עד שיתאושש.
503 לעומת שכניו
| סטטוס | משמעות | לנסות שוב? |
|---|---|---|
| 500 | משהו לא צפוי קרה | אולי לעולם לא |
| 502 | שרת upstream התנהג בצורה בעייתית | לא ידוע |
| 503 | זמנית אינו זמין | כן, ב-Retry-After |
| 429 | הגעת למגבלת הקצב שלך | כן, השרת בסדר |
503 הוא ייחודי: זה השרת מודה בחולשה זמנית תוך כדי הבטחת התאוששות. 500 הוא בלבול. 502 הוא האשמת אחרים. 429 הוא אשמת הלקוח. רק 503 אומר "זה עלי, ואני מטפל בזה."
משמעת ה-503
תמיד כלול Retry-After. 503 בלעדיו הוא הבטחה ללא לוח זמנים.
השתמש רק לתנאים זמניים. אם סכמת מסד הנתונים שגויה, זה 500. אם מסד הנתונים מתחיל מחדש, זה 503.
כשל מהיר. אם אתה יודע שאינך יכול לטפל בבקשה, החזר 503 מיד. אל תבזבז משאבים לגלות מה שכבר ידעת.
עקוב אחר שיעור ה-503 שלך. 503 תכופות חושפות בעיות קיבולת, תלויות לא יציבות, או תהליכי תחזוקה שרצים זמן רב מדי.
שאלות נפוצות על 503 Service Unavailable
מה ההבדל בין 503 ל-500?
500 אומר שמשהו לא צפוי קרה — באג, חריגה שלא טופלה, מצב פגום. השרת לא יודע מתי ואם יתאושש. 503 אומר שהשרת יודע שהוא זמנית אינו זמין ומצפה להתאושש. השתמש ב-503 כשאתה מבין את הבעיה והיא חולפת; השתמש ב-500 כשאינך מבין.
האם תמיד צריך לכלול Retry-After עם 503?
כן. בלי Retry-After, לקוחות צריכים לנחש מתי לנסות שוב, מה שמוביל לניסיונות חוזרים ונשנים אגרסיביים (שמעמיסים על השרת המתאושש) או לוויתור מוקדם מדי. Retry-After הופך "נסה מאוחר יותר" עמום לחוזה ברור.
מתי להשתמש ב-503 לעומת 429 להגבלת קצב?
429 אומר "אתה ספציפית הגעת למגבלה שלך, אבל השרת בסדר." 503 אומר "השרת לא יכול לטפל בבקשות של אף אחד כרגע." השתמש ב-429 להגבלות קצב לכל לקוח. השתמש ב-503 כשהשרת באמת עמוס ולא יכול לשרת אף לקוח.
כיצד מאזני עומס משתמשים ב-503?
רוב מאזני העומס עוקבים אחר נקודות קצה לבדיקת תקינות. כשרת מחזיר 503, מאזן העומס מוציא אותו מהסבב ומפסיק לנתב אליו תעבורה. ברגע שהשרת מתחיל להחזיר 200 שוב, התעבורה מתחדשת. מנגנון ה-failover האוטומטי הזה הוא הסיבה ש-503 חשוב כל כך לזמינות גבוהה.
האם דף זה היה מועיל?