בדף הזה מובאת סקירה כללית על תורים של שליפת נתונים בסביבה הרגילה של App Engine.
בתורי push, המשימות מועברות לשירות worker על סמך ההגדרות של התור. בתורי pull, שירות העובד צריך לבקש משימות מהתור. התור מגיב בכך שהוא מאפשר לעובד גישה ייחודית לעיבוד המשימה למשך תקופת זמן מוגדרת, שנקראת חכירה.
באמצעות תורי משימות מסוג pull, אפשר גם לקבץ משימות קשורות באמצעות תגים, ואז להגדיר את העובד כך שימשוך כמה משימות עם תג מסוים בבת אחת. התהליך הזה נקרא איגום.
אם לעובד אין אפשרות לעבד משימה לפני שתוקף ההרשאה שלה פג, הוא יכול לחדש את ההרשאה או לאפשר לה לפוג. בשלב הזה, עובד אחר יכול לקבל את ההרשאה. אחרי שהעובד מסיים את העבודה שמשויכת למשימה, הוא צריך למחוק אותה.
כדי להשתמש בתורים מסוג pull, הקוד צריך לטפל בפונקציות מסוימות שאוטומטיות בתורים מסוג push:
- הגדלת מספר העובדים
- הקוד צריך לשנות את מספר העובדים בהתאם לנפח העיבוד. אם הקוד לא מטפל בהרחבת היקף הפעולה, אתם עלולים לבזבז משאבי מחשוב אם אין משימות לעיבוד, וגם עלולים להיתקל בבעיות של זמן אחזור אם יש יותר מדי משימות לעיבוד.
- מחיקת המשימות
- הקוד צריך גם למחוק משימות באופן מפורש אחרי העיבוד. בתורי הודעות מסוג Push, App Engine מוחק את המשימות בשבילכם. אם העובד לא מוחק משימות מתור משיכה (pull queue) אחרי העיבוד, עובד אחר יעבד מחדש את המשימה. הפעולה הזו מבזבזת משאבי מחשוב ועלולה לגרום לשגיאות אם המשימות לא אידמפוטנטיות.
תורים של שליפת הודעות בסביבה הסטנדרטית של App Engine נוצרים על ידי הגדרת מאפיין בקובץ הגדרה בשם
queue.yaml
.
תהליך עבודה של תור משיכה
צריך להגדיר עובדים שמבצעים משימות מתורים של משיכות בתוך שירות שפועל בסביבה הסטנדרטית של App Engine.
זהו תהליך העבודה:
- יוצרים תור שליפה באמצעות
queue.yaml. - יוצרים משימות ומוסיפים אותן לתור.
- ה-Worker שיצרתם שוכר את המשימה באמצעות [TaskQueue](/appengine/docs/standard/go/reference/services/bundled/latest/taskqueue).
- App Engine שולח את נתוני המשימה לעובד בתגובה להשכרה.
- העובד מעבד את המשימה. אם המשימה לא מסתיימת לפני שתוקף ההרשאה פג, העובד יכול לשנות את משך ההרשאה. אם השכירות פגה, המשימה תהיה זמינה להשכרה לעובד אחר.
- אחרי שמשימה עוברת עיבוד בהצלחה, ה-Worker מוחק אותה.