תזמון משימות שתלויות זו בזו

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

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

לפני שמתחילים

  1. אם עוד לא השתמשתם ב-Batch, כדאי לעיין במאמר תחילת העבודה עם Batch ולהפעיל את Batch על ידי השלמת הדרישות המוקדמות לפרויקטים ולמשתמשים.
  2. כדי לקבל את ההרשאות שדרושות ליצירת משימה, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

    להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

    יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

הגבלות

ההגבלות הבאות חלות על משימות שתלויות במשימות אחרות:

  • לג'וב תלוי יכולות להיות עד ארבע תלויות. כל תלות חייבת להכיל שם משימה ייחודי ואחד מהמצבים הנדרשים הבאים:

    • SUCCEEDED: succeeded
    • FAILED: נכשל
    • FINISHED: הצליח או נכשל
  • כשיוצרים משימה שתלויה במשימות אחרות, כל המשימות שהיא תלויה בהן צריכות להתקיים.

  • אי אפשר להעביר עבודה שתלויה בעבודה אחרת למצב מתוזמן (SCHEDULED) עד שכל העבודות שהיא תלויה בהן יעברו למצב הנדרש. אם משימת תלות לא יכולה להיכנס למצב הנדרש שלה, המשימה התלויה נכשלת באופן מיידי בלי שתתוזמן.

  • כמו כל המשימות, משימה תלויה לא יכולה לעבור לסטטוס מתוזמן (SCHEDULED) אם היא חורגת מזמן ההמתנה המקסימלי בתור. מערכת Batch אוכפת את המגבלה הזו כדי למנוע את התיישנות העבודות. לכן, אם אתם חושבים שהזמן שיידרש לסיום של אחת ממשימות התלות עשוי לחרוג מהמגבלה הזו, כדאי לבצע אחת או יותר מהפעולות הבאות:

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

יצירת משימה שתלויה במשימה אחרת

אפשר ליצור משימה שתהיה תלויה במשימה אחרת באמצעות השיטות הבאות:

כדי לציין שתהליך הוא תלוי, צריך לכלול את השדה dependencies[].items, שתומך בתלות אחת או יותר שמוגדרות כצמדי מפתח/ערך, בגוף הראשי בקובץ ה-JSON:

"dependencies": [
  {
    "items": {
      "DEPENDENCY_JOB_NAME": "REQUIRED_STATE"
    }
  }
]

מחליפים את מה שכתוב בשדות הבאים:

  • DEPENDENCY_JOB_NAME: השם של משימת תלות, שצריכה להגיע למצב הנדרש לפני שמותר לתזמן את המשימה התלויה הזו.

  • REQUIRED_STATE: המצב הנדרש של משימת התלות המתאימה, שחייב להיות SUCCEEDED, ‏FAILED או FINISHED.

לדוגמה, למשימה תלויה עם שלוש תלויות יכול להיות קובץ הגדרות בפורמט JSON שדומה לזה:

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello World! This is task $BATCH_TASK_INDEX."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "dependencies": [
    {
      "items": {
        "DEPENDENCY_JOB_NAME_1": "REQUIRED_STATE_1",
        "DEPENDENCY_JOB_NAME_2": "REQUIRED_STATE_2",
        "DEPENDENCY_JOB_NAME_3": "REQUIRED_STATE_3"
      }
    }
  ]
}

המאמרים הבאים