במדריך הזה מוסבר איך ליצור תור של Cloud Tasks שיכול לווסת את קצב ההרצה של תהליכי העבודה.
יש מספר מקסימלי של הרצות פעילות של תהליכי עבודה שיכולות להתרחש בו-זמנית. אם חורגים מהמכסה הזו, וההרצות שמועברות להמתנה מושבתות או שמגיעים למכסה של ההרצות שמועברות להמתנה, כל ההרצות החדשות נכשלות ומוחזר קוד סטטוס HTTP 429 Too many requests. הפעלת תור של Cloud Tasks לביצוע תהליכי עבודה משניים בקצב שאתם מגדירים מאפשרת לכם להימנע מבעיות שקשורות למכסת Workflows ולהשיג קצב ביצוע טוב יותר.
שימו לב: Cloud Tasks מתוכנן לספק מסירה של 'לפחות פעם אחת', אבל Workflows לא מבטיח עיבוד של בקשות כפולות מ-Cloud Tasks בדיוק פעם אחת.
בתרשים הבא, תהליך עבודה ראשי מפעיל תהליכי עבודה משניים שמוסדרים על ידי תור של Cloud Tasks עם קצב שליחה מוגדר.
מטרות
במדריך הזה תלמדו:
- יוצרים תור של Cloud Tasks שמשמש כמתווך בין תהליכי העבודה של ההורה והצאצא.
- יצירה ופריסה של תהליך עבודה משני שמקבל נתונים מתהליך העבודה הראשי.
- יוצרים ופורסים את תהליך העבודה הראשי שמריץ את תהליך העבודה המשני דרך תור Cloud Tasks.
- מריצים את תהליך העבודה הראשי ללא הגבלת קצב שליחה, שמפעיל ביצועים של תהליך העבודה המשני.
- מגדירים מגבלת שליחה לתור של Cloud Tasks ומריצים את זרימת העבודה הראשית.
- אפשר לראות שהתבצעו זרימות עבודה של צאצאים בקצב שהוגדר בתור של Cloud Tasks.
אפשר להריץ את הפקודות הבאות במסוף Google Cloud או באמצעות Google Cloud CLI בטרמינל או ב-Cloud Shell.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
יכול להיות שהגבלות אבטחה שהוגדרו בארגון שלכם ימנעו מכם להשלים את השלבים הבאים. מידע לפתרון בעיות זמין במאמר פיתוח אפליקציות בסביבה מוגבלת. Google Cloud
המסוף
-
נכנסים לחשבון Google.
אם עדיין אין חשבון, יוצרים חשבון חדש.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.- נכנסים לדף IAM במסוף Google Cloud כדי להגדיר הרשאות לחשבון שירות ברירת המחדל של Compute Engine.
חשוב לשים לב לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, כי תצטרכו לשייך אותו לתהליכי העבודה במדריך הזה לצורך בדיקה. חשבון השירות הזה נוצר באופן אוטומטי אחרי שמפעילים או משתמשים בשירות Google Cloud שמשתמש ב-Compute Engine, והפורמט של כתובת האימייל שלו הוא:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
מחליפים את
PROJECT_NUMBERבמספר הפרויקט ב-Google Cloud . אפשר לראות את מספר הפרויקט בדף Welcome במסוף Google Cloud .בסביבות ייצור, מומלץ מאוד ליצור חשבון שירות חדש ולהקצות לו תפקיד אחד או יותר ב-IAM שמכילים את ההרשאות המינימליות הנדרשות, ולפעול לפי העיקרון של הרשאות מינימליות.
- בוחרים את חשבון השירות של Compute Engine שמוגדר כברירת מחדל, ובשורה הזו לוחצים על Edit principal.
- בתיבת הדו-שיח שמופיעה, לוחצים על Add another role ומוסיפים את התפקידים הבאים:
- ברשימה Select a role בוחרים באפשרות Workflows > Workflows Invoker כדי שלחשבון תהיה הרשאה להפעיל את הביצוע של תהליך העבודה.
- ברשימה Select a role בוחרים באפשרות Cloud Tasks > Cloud Tasks Enqueuer כדי שלחשבון תהיה הרשאה ליצור משימות.
- לוחצים על Save.
gcloud
-
נכנסים לחשבון Google.
אם עדיין אין חשבון, יוצרים חשבון חדש.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API Cloud Tasks, Compute Engine ו-Workflows:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API Cloud Tasks, Compute Engine ו-Workflows:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com חשוב לשים לב לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, כי תצטרכו לשייך אותו לתהליכי העבודה במדריך הזה לצורך בדיקה. חשבון השירות הזה נוצר באופן אוטומטי אחרי שמפעילים או משתמשים בשירות Google Cloud שמשתמש ב-Compute Engine, והפורמט של כתובת האימייל שלו הוא:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
מחליפים את
PROJECT_NUMBERבמספר הפרויקט ב-Google Cloud . כדי למצוא את מספר הפרויקט, מריצים את הפקודה הבאה:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
בסביבות ייצור, מומלץ מאוד ליצור חשבון שירות חדש ולהקצות לו תפקיד אחד או יותר ב-IAM שמכילים את ההרשאות המינימליות הנדרשות, ולפעול לפי העיקרון של הרשאות מינימליות.
- מעניקים לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine את התפקיד 'הפעלת Workflows' (
roles/workflows.invoker) בפרויקט, כדי שלחשבון תהיה הרשאה להפעיל את זרימת העבודה.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט Google Cloud -
PROJECT_NUMBER: מספר הפרויקט Google Cloud
-
- מקצים את התפקיד 'הוספת משימות לתור' ב-Cloud Tasks (
roles/cloudtasks.enqueuer) בפרויקט לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, כדי שלחשבון תהיה הרשאה ליצור משימות.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
יצירת תור ב-Cloud Tasks
יוצרים תור של Cloud Tasks שאפשר להשתמש בו בתהליך העבודה הראשי, ושמאפשר לווסת את קצב ההפעלה של תהליך העבודה.
המסוף
במסוף Google Cloud , נכנסים לדף Cloud Tasks:
לוחצים על Create push queue (יצירת תור לדחיפה).
מזינים את שם התור,
queue-workflow-child.ברשימה Region, בוחרים באפשרות us-central1 (Iowa).
לוחצים על יצירה.
gcloud
QUEUE=queue-workflow-child LOCATION=us-central1 gcloud tasks queues create $QUEUE --location=$LOCATION
יצירה ופריסה של תהליך עבודה צאצא
תהליך עבודה צאצא יכול לקבל ולעבד נתונים מתהליך עבודה אב. יוצרים ומפעילים תהליך צאצא שמבצע את הפעולות הבאות:
- מקבלת
iterationכארגומנט - הפונקציה נכנסת למצב שינה למשך 10 שניות כדי לדמות עיבוד
הפונקציה מחזירה מחרוזת אם ההרצה שלה מסתיימת בהצלחה
המסוף
נכנסים לדף Workflows במסוף Google Cloud .
לוחצים על Create.
מזינים את השם
workflow-childלתהליך העבודה החדש.ברשימה Region, בוחרים באפשרות us-central1 (Iowa).
ברשימה Service account, בוחרים באפשרות Compute Engine default service account.
לוחצים על הבא.
בעורך תהליכי העבודה, מזינים את ההגדרה הבאה לתהליך העבודה:
לוחצים על פריסה.
gcloud
יוצרים קובץ קוד מקור לתהליך העבודה:
touch workflow-child.yamlפותחים את קובץ קוד המקור בכלי לעריכת טקסט ומעתיקים את תהליך העבודה הבא לקובץ.
פריסת תהליך העבודה:
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER-compute@developer.gserviceaccount.com
יצירה ופריסה של תהליך העבודה הראשי
תהליך העבודה הראשי מפעיל כמה ענפים של תהליך העבודה המשני באמצעות לולאה for.
מעתיקים את קוד המקור שמגדיר את תהליך העבודה הראשי:
תהליך העבודה מורכב מהחלקים הבאים:
מיפוי שמשמש להקצאת קבועים שמתייחסים לתהליך העבודה של הצאצא ולשם התור של Cloud Tasks. מידע נוסף זמין במאמר בנושא מפות.
forלולאה שמופעלת כדי להפעיל את זרימת העבודה המשנית באופן איטרטיבי. מידע נוסף זמין במאמר בנושא איטרציה.שלב בתהליך העבודה שיוצר ומוסיף מספר גדול של משימות לתור של Cloud Tasks כדי להפעיל את תהליך העבודה המשני. מידע נוסף זמין במאמר מחבר Cloud Tasks API.
פריסת תהליך העבודה:
המסוף
נכנסים לדף Workflows במסוף Google Cloud :
לוחצים על Create.
מזינים את השם
workflow-parentלתהליך העבודה החדש.ברשימה Region, בוחרים באפשרות us-central1 (Iowa).
ברשימה Service account, בוחרים באפשרות Compute Engine default service account.
לוחצים על הבא.
בעורך תהליכי העבודה, מדביקים את ההגדרה של תהליך העבודה הראשי.
לוחצים על פריסה.
gcloud
יוצרים קובץ קוד מקור לתהליך העבודה:
touch workflow-parent.yamlפותחים את קובץ קוד המקור בכלי לעריכת טקסט ומדביקים את ההגדרה של תהליך העבודה הראשי.
פריסת תהליך העבודה:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER-compute@developer.gserviceaccount.com
הפעלת תהליך העבודה הראשי ללא מגבלות קצב
מריצים את תהליך העבודה הראשי כדי להפעיל את תהליכי העבודה המשניים דרך תור Cloud Tasks. ההרצות אמורות להימשך כ-10 שניות.
המסוף
נכנסים לדף Workflows במסוף Google Cloud :
בדף Workflows (תהליכי עבודה), לוחצים על תהליך העבודה workflow-parent כדי לעבור לדף הפרטים שלו.
בדף פרטי תהליך העבודה, לוחצים על play_arrow הפעלה.
לוחצים שוב על Execute.
בזמן שתהליך העבודה הראשי פועל, חוזרים לדף Workflows ולוחצים על תהליך העבודה workflow-child כדי לעבור לדף הפרטים שלו.
לוחצים על הכרטיסייה הפעלות.
אמורים לראות הרצות של זרימת העבודה המשנית, שמתבצעות בערך באותו הזמן, כמו בדוגמה הבאה:

gcloud
מריצים את תהליך העבודה:
gcloud workflows run workflow-parent \ --location=us-central1
כדי לוודא שהפעלת תהליך עבודה הופעלה, מציגים את ארבע ההפעלות האחרונות:
gcloud workflows executions list workflow-child --limit=4
מכיוון שמספר ההפעלות (100) נמוך ממגבלת ההפעלה בו-זמנית של זרימות העבודה, התוצאות צריכות להיות דומות לתוצאות הבאות. בעיות במכסת השימוש עלולות להתרחש אם שולחים אלפי הפעלות בו-זמנית.
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/1570d06e-d133-4536-a859-b7b6a1a85524 STATE: ACTIVE START_TIME: 2023-07-27T00:56:15.093934448Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/82724960-7d92-4961-aa2c-a0f0be46212c STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.903007626Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/598126fb-37f9-45bc-91d8-aea7d795d702 STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.698260524Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/d2e9960b-f93f-4df4-a594-3e7e5c2be53f STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.503818840Z END_TIME:
יצרתם ופרסתם תהליך עבודה שמפעיל 100 איטרציות של תהליך העבודה המשני.
הפעלת תהליך העבודה הראשי עם מגבלות קצב
מחילים הגבלת קצב של שליחה אחת לשנייה על התור של Cloud Tasks ואז מריצים את תהליך העבודה הראשי.
המסוף
במסוף Google Cloud , נכנסים לדף Cloud Tasks:
לוחצים על queue-workflow-child, התור של Cloud Tasks שיצרתם, ואז לוחצים על Edit queue (עריכת התור).
בקטע Rate limits for task dispatches, בשדה Max dispatches, מקלידים 1.
לוחצים על Save.
עוברים לדף Workflows (תהליכי עבודה):
לוחצים על זרימת העבודה workflow-parent כדי לעבור לדף הפרטים שלה.
בדף פרטי תהליך העבודה, לוחצים על play_arrow הפעלה.
לוחצים שוב על Execute.
בזמן שתהליך העבודה הראשי פועל, חוזרים לדף Workflows ולוחצים על תהליך העבודה workflow-child כדי לעבור לדף הפרטים שלו.
לוחצים על הכרטיסייה הפעלות.
אמורים לראות הרצות של זרימת העבודה המשנית, שפועלת בקצב של בקשה אחת לשנייה, בדומה לזה:

gcloud
מעדכנים את התור ב-Cloud Tasks כדי להחיל הגבלת קצב של שליחה אחת לשנייה:
gcloud tasks queues update $QUEUE \ --max-dispatches-per-second=1 \ --location=us-central1
מריצים את תהליך העבודה:
gcloud workflows run workflow-parent \ --location=us-central1
כדי לוודא שהפעלת תהליך עבודה הופעלה, מציגים את ארבע ההפעלות האחרונות:
gcloud workflows executions list workflow-child --limit=4
התוצאות צריכות להיות דומות לתוצאות הבאות, עם זרימת עבודה אחת שמופעלת בכל שנייה:
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/becf4957-9fb2-40d9-835d-0ff2dd0c1249 STATE: ACTIVE START_TIME: 2023-07-27T01:07:24.446361457Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/6c1e7c4b-7ac6-4121-b351-1e2d56d10903 STATE: ACTIVE START_TIME: 2023-07-27T01:07:23.448213989Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/f2ba5027-af40-4cd3-8cd0-b8033bcc6211 STATE: ACTIVE START_TIME: 2023-07-27T01:07:22.431485914Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/ecc61ee5-fe87-49eb-8803-89dba929f6c8 STATE: ACTIVE START_TIME: 2023-07-27T01:07:21.443466369Z END_TIME:
הצלחתם לפרוס תהליך עבודה שמפעיל 100 איטרציות של תהליך העבודה המשני עם קצב שליחה של ביצוע אחד בשנייה.
הסרת המשאבים
אם יצרתם פרויקט חדש בשביל המדריך הזה, תמחקו את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שנוספו במדריך הזה, תצטרכו למחוק את המשאבים שנוצרו לצורך המדריך.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת משאבי הדרכה
מוחקים את תהליכי העבודה ואת המשאבים של Cloud Tasks שנוצרו במדריך הזה:
המסוף
כדי למחוק את תהליכי העבודה, פועלים לפי השלבים הבאים:
נכנסים לדף Workflows במסוף Google Cloud :
ברשימת תהליכי העבודה, לוחצים על תהליך עבודה כדי לעבור לדף פרטי תהליך העבודה.
לוחצים על מחיקה.
מקלידים את השם של תהליך העבודה ולוחצים על אישור.
כדי למחוק את התור של Cloud Tasks:
במסוף Google Cloud , נכנסים לדף Cloud Tasks:
בוחרים את שם התור שרוצים למחוק ולוחצים על מחיקת התור.
מאשרים את הפעולה.
gcloud
כדי למחוק את תהליכי העבודה, מריצים את הפקודות הבאות:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
כדי למחוק את התור של Cloud Tasks, מריצים את הפקודה הבאה:
gcloud tasks queues delete queue-workflow-child
המאמרים הבאים
- מידע נוסף על השימוש ב-Cloud Tasks כדי להוסיף תהליך עבודה לתור ולהפעיל אותו באופן אסינכרוני זמין במאמר הוספת הפעלות של תהליכי עבודה לתור באמצעות Cloud Tasks.
- מידע נוסף על התחביר של Workflows זמין במאמר הפניה לתחביר של Workflows.