לדלג לתוכן

תרגול עצירה והתאוששות של שירות

תרגיל ראשון - גבול הקבלה

ממשו מחלקת תור קטנה עם submit, begin_stop וtake. הקיבולת היא ארבע בקשות. אחרי begin_stop אסור לקבל בקשות חדשות, אבל חייבים לאפשר לworker להוציא את הקיימות עד ריקון. הגדירו תוצאה נפרדת לתור מלא ולשירות שסוגר קבלה.

כתבו בדיקה שמכניסה שתי בקשות, סוגרת קבלה, מנסה להכניס שלישית ומוציאה את השתיים הראשונות. הסבירו מה נקודת ההכרעה אם submit וbegin_stop מגיעים במקביל.

תרגיל שני - דיווח שקרי

נתון thread שמגדיל checkpoint כל שנייה, וthread אחר שמבצע recovery ללא שום דיווח התקדמות. הסבירו מה יראה מנהל השירותים אם הrecovery נתקע. הציעו מבנה שבו checkpoint מתקדם רק כשעבודה מוגדרת הושלמה, כולל מצב שבו אין התקדמות וצריך לסיים בכשל.

תרגיל שלישי - כשל אחרי אישור

השירות אישר בקשה ללקוח, כתב את התוצאה, וקרס לפני שסימן אותה כהושלמה בjournal. בעלייה הבאה הוא רואה בקשה ממתינה. תכננו דרך למנוע ביצוע כפול עבור פעולה שאינה idempotent, או הסבירו איזו התחייבות חייבים לשנות כדי שהמערכת תהיה ניתנת למימוש.

הבדילו בין תשובת "התקבל לתור" לבין "בוצע ונשמר". הגדירו בדיקת crash injection עבור כל אחת מהן.