בדף הזה מוסבר מהם תורי משימות, מתי כדאי להשתמש בהם ואיך משתמשים בהם. תורי משימות מאפשרים לאפליקציות לבצע עבודה, שנקראת משימות, באופן אסינכרוני מחוץ לבקשת משתמש. אם אפליקציה צריכה לבצע עבודה ברקע, היא מוסיפה משימות לתורי משימות. המשימות מבוצעות בשלב מאוחר יותר על ידי שירותי worker.
שירות Task Queue מיועד לעבודה אסינכרונית. היא לא מספקת ערבויות חזקות לגבי התזמון של מסירת המשימה, ולכן היא לא מתאימה לאפליקציות אינטראקטיביות שבהן המשתמש מחכה לתוצאה.
תורים לדחיפה ותורים לשליפה
יש שני סוגים של תורי משימות: push ו-pull. האופן שבו שירות Task Queue שולח בקשות למשימות לשירותי Worker שונה בתורים שונים.
תורי Push מריצים משימות על ידי שליחת בקשות HTTP לשירותי worker של App Engine. הם שולחים את הבקשות האלה בקצב אמין ויציב ומבטיחים ביצוע אמין של המשימות. אתם יכולים לשלוט בקצב שבו המשימות נשלחות מהתור, ולכן אתם יכולים לשלוט בהתנהגות של שינוי הגודל של העובדים, וכך גם בעלויות.
מכיוון שהמשימות מבוצעות כבקשות שמיועדות לשירותי App Engine, הן כפופות למועדים מחמירים. משימות שמטופלות על ידי שירותי שינוי גודל אוטומטי חייבות להסתיים תוך עשר דקות. משימות שמטופלות על ידי שירותים עם קנה מידה בסיסי וידני יכולות לפעול עד 24 שעות.
תורי משיכה (pull queue) לא שולחות משימות בכלל. הם מסתמכים על שירותי worker אחרים כדי 'לשכור' משימות מהתור ביוזמתם. תורי משימות מסוג Pull מאפשרים לכם יותר עוצמה וגמישות לגבי הזמן והמקום שבהם המשימות מעובדות, אבל הם גם דורשים מכם לבצע יותר ניהול של התהליך. כשמשימה מושכרת, העובד ששוכר אותה מכריז על מועד אחרון. עד שהמועד האחרון יגיע, העובד חייב להשלים את המשימה ולמחוק אותה, אחרת שירות תור המשימות יאפשר לעובד אחר לשכור אותה.
כל המשימות בתור המשימות מבוצעות באופן אסינכרוני. האפליקציה שיוצרת את המשימה מעבירה אותה לתור. האפליקציה המקורית לא מקבלת הודעה אם המשימה הושלמה או לא, או אם היא הצליחה.
אם עובד נכשל בעיבוד משימה, שירות Task Queue מספק לתור מנגנון ניסיון חוזר, כך שאפשר לנסות לבצע את המשימה מספר סופי של פעמים.
תרחישים לדוגמה
תורים של הודעות Push
תרחיש שימוש נפוץ בתור דחיפה (push queue) הוא פעולה 'איטית'. אפשר להשתמש במערכת הודעות של רשת חברתית. בכל פעם שמשתמש שולח הודעה, הרשת צריכה לעדכן את העוקבים של השולח. זו יכולה להיות פעולה שלוקחת הרבה זמן. באמצעות תור של הודעות בדחיפה, האפליקציה יכולה להוסיף לתור משימה לכל הודעה שמגיעה, כדי לשלוח אותה לשירות של עובד לצורך עיבוד. כשהעובד מקבל את בקשת המשימה, הוא יכול לאחזר את רשימת העוקבים של השולח ולעדכן את מסד הנתונים עבור כל אחד מהם. כדי לשפר את היעילות של העובד, אפשר להוסיף לתור עוד משימת push לכל עדכון של מסד הנתונים.
עוד שימוש בתורים של הודעות Push הוא משימות מתוזמנות. נניח שיש אפליקציה שמטמיעה קמפיין פרסום. אפשר להוסיף קבוצת משימות שנועדו לשליחת אימיילים לתור דחיפה (push queue) עם הוראות להשהיית המשימות עד למועד ספציפי בעתיד. כשיגיע תאריך היעד, שירות תור המשימות יתחיל להנפיק בקשות לביצוע המשימות.
תורים של משיכות
תורי משיכה מתאימים במיוחד כשצריך לאגד משימות כדי לבצע אותן ביעילות. פתרון אחד מבוסס על היכולת לצרף תג למשימת שליפה. עובדים יכולים לשכור קבוצה של משימות עם אותו תג. דוגמה אופיינית היא אפליקציה שמנהלת טבלאות הישגים למשחקים שונים, עם הרבה שחקנים וקבוצות שמשחקים כל הזמן. בכל פעם שמופיעה תוצאה גבוהה חדשה, האפליקציה יכולה להוסיף לתור משימת שליפה עם הניקוד והשחקן, ולהשתמש במזהה המשחק כתג משימה. תהליך worker מתעורר מדי פעם, שוכר קבוצה של משימות עם אותו מזהה משחק ומעדכן את טבלת המובילים. אפשר להחכיר משימות באופן מפורש באמצעות ערך תג ספציפי, או לאפשר לשירות להחליט איזו קבוצה של משימות עם תגים דומים לשלוח.
שימוש בתגים כדי לקבץ פעולות יכול להיות יעיל מאוד. מכיוון שאפשר ליצור תגים באופן דינמי בזמן שהאפליקציה פועלת, תהליך העבודה יכול לטפל במזהי משחקים חדשים בלי מאמץ מיוחד.
המאמרים הבאים
- מידע נוסף על תורי דחיפה
- מידע נוסף על תורי משיכה