זמן אחזור ארוך בקצה העליון של ההתפלגות בפרסום הודעות יכול להיגרם בגלל עיכובים זמניים ברשת או איטיות זמנית בצד השרת. גידור פרסום מאפשר ללקוח פרסום ב-Pub/Sub לשלוח במקביל בקשת פרסום לגיבוי (מגודרת), אם בקשה שנמצאת בתהליך לא מסתיימת בתוך זמן ההשהיה שהוגדר. המערכת משתמשת בתגובה הראשונה שחוזרת.
במאמר הזה מוסבר איך להשתמש בגידור פרסום עם הודעות שפורסמו בנושא.
לפני שמתחילים
לפני שמגדירים את תהליך העבודה של הפרסום, צריך לבצע את המשימות הבאות:
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות לשליחת בקשות פרסום מגודרות לנושא, צריך לבקש מהאדמין להקצות לכם את התפקיד מפרסם ב-Pub/Sub (roles/pubsub.publisher) ב-IAM בנושא.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
כדי ליצור או לעדכן נושאים ומינויים, צריך הרשאות נוספות.
מידע על גידור פרסום
הגדרות הגידור קובעות איך ומתי ספריות הלקוח של Pub/Sub שולחות בקשות פרסום מגודרות. האפשרות "גידור פרסום" מושבתת כברירת מחדל. כשהאפשרות מופעלת, לספריות הלקוח יש את הגדרות הגידור הבאות:
- השהיית גידור: משך הזמן שספריית הלקוח ממתינה לפני שהיא שולחת בקשת פרסום נוספת במקביל, אם הבקשה הקודמת לא הושלמה. ערך ברירת המחדל הוא שנייה אחת, והערך שמוגדר צריך להיות בין 100 אלפיות השנייה ל-10 שניות.
- מספר האסימונים המקסימלי: מספר האסימונים המקסימלי שספריית הלקוח יכולה לצבור כדי לשלוח בקשות פרסום מגודרות. כל בקשת פרסום מגודרת צורכת אסימון אחד. ערך ברירת המחדל הוא 50, והערך שמוגדר צריך להיות בין 1 ל-250.
- קצב מילוי: מספר האסימונים שנוספים לכל בקשת פרסום שהושלמה בהצלחה. הערך הזה קובע את החלק המקסימלי של בקשות הפרסום שאפשר לגדר לאורך זמן. לדוגמה, יחס מילוי של 0.1 מאפשר לגדר עד 10% מבקשות הפרסום. ערך ברירת המחדל הוא 0.1, והערך שמוגדר צריך להיות בין 0.001 ל-0.2.
כדי לגדר בקשות פרסום, השהיית הגידור צריכה להיות קצרה יותר גם מזמן הקצוב לתפוגה של הבקשה הראשונית וגם מהזמן הקצוב לתפוגה הכולל בהגדרות הניסיון החוזר של המוציא לאור. אם לא, האתחול של לקוח בעל התוכן הדיגיטלי ייכשל. כשמפעילים גידור פרסום, ספריית הלקוח שולחת בקשות פרסום באופן הבא:
- אם בקשת פרסום פעילה לא מסתיימת בתוך פרק הזמן של השהיית הגידור, ולפחות אסימון אחד זמין, ספריית הלקוח צורכת אסימון אחד ושולחת בקשת פרסום נוספת לאותה קבוצת הודעות במקביל, תוך שמירה על הבקשה הראשונית פתוחה.
- אם אף אחת מהבקשות הפעילות לא הושלמה אחרי עיכוב נוסף, ספריית הלקוח ממשיכה לשלוח בקשות נוספות במרווחים של העיכוב, כל עוד יש אסימונים זמינים וזמן הקצוב הכולל לא פג.
- ברגע שאחת מבקשות הפרסום של האצווה מסתיימת בהצלחה, ספריית הלקוח משלימה את פעולת הפרסום, מבטלת את כל הניסיונות שנותרו לאותה אצווה ומגדילה את מספר האסימונים הזמינים לפי יחס המילוי, עד למספר האסימונים המקסימלי.
הגנה על בקשת פרסום
בניגוד לבקשות חוזרות, שממתינות עד שבקשת הפרסום הפעילה תיכשל או שהזמן הקצוב לתפוגה שלה יסתיים, גידור הפרסום משאיר את הבקשה הראשונית פתוחה בזמן שהוא שולח בקשת גידור בו-זמנית. כך אפשר לצמצם את זמן האחזור של הזנב בלי לבטל בטרם עת בקשות שעומדות להצליח.
יכול להיות שכמה בקשות לאותה קבוצת הודעות יתבצעו בו-זמנית, ולכן יכול להיות שיותר מניסיון אחד יצליח לפני ששאר הניסיונות יבוטלו, כי ביטול בקשת הפרסום מתבצע על בסיס "המאמץ המרבי". כתוצאה מכך, יכול להיות שתקבלו הודעות כפולות עם מזהי הודעות שונים, מה שיכול להגדיל את התנועה ברשת הלקוח ואת העלויות של Pub/Sub לפרסום ולשליחה של ההודעות הכפולות האלה. במאמר פתרון בעיות של הודעות כפולות, הודעות שנשלחו מחדש או הודעות חסרות מפורטים טיפים לטיפול בהודעות כפולות.
אם פגיעה בשירות גורמת לעלייה מתמשכת בזמן האחזור או בשגיאות, ההגדרות של מספר האסימונים המקסימלי ויחס המילוי מונעות משיעורי הפרסום המגודרים להיות גבוהים מדי. מכיוון שאסימונים מתווספים רק כשבקשות הפרסום מצליחות, איטיות או שגיאות מתמשכות מרוקנות במהירות את האסימונים הזמינים ומגבילות באופן אוטומטי את הבקשות המגודרות.
הקוד לדוגמה הזה מדגים איך ליצור בעל תוכן דיגיטלי עם הגדרות גידור בהתאמה אישית. לא כל ספריות הלקוח תומכות בגידור פרסום. אפשר לעיין במאמרי העזרה של ה-API בשפה שבחרתם.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Java API.
פרסום גידור עם מפתחות הזמנה
אי אפשר להשתמש בגידור פרסום עם סדר הודעות. בגלל שגידור פרסום שולח בקשות פרסום בו-זמנית לאותה קבוצת הודעות, יכול להיות ששירות Pub/Sub יקבל ויעבד את הבקשות האלה לא לפי הסדר. אם מפעילים גם את סידור ההודעות וגם את גידור הפרסום בלקוח של בעל התוכן הדיגיטלי, יצירת בעל התוכן הדיגיטלי נכשלת ומוצגת שגיאה.
טיפים ושיטות מומלצות
כדאי לפעול לפי השיטות המומלצות הבאות כשמגדירים גידור פרסום:
- שימוש בגידור לזמן אחזור זמני: גידור פרסום נועד להחליק קפיצות קצרות בזמן האחזור שנגרמות בגלל עיכובים זמניים ברשת או איטיות קצרה בצד השרת. אל תסתמכו על גידור כדי לצמצם את ההשפעה של הפסקות ממושכות או שגיאות מתמשכות.
- גידור באמצעות מדיניות ניסיונות חוזרים: מגדירים זמן קצוב ארוך יותר לבקשה הראשונית בהגדרות הניסיונות החוזרים, לצד עיכוב גידור קצר יותר. זמני קצובים קצרים ואגרסיביים מבטלים בקשות בטרם עת ומפעילים ניסיונות חוזרים מלאים, תוך ביטול העבודה שכבר מתבצעת בשרת. זמן קצוב ארוך יותר מאפשר לבקשה המקורית להסתיים אם היא מתעכבת רק קצת.
- בקרת זרימה וגידור בצד הלקוח: גידור פרסום לא פותר עיכובים בצד הלקוח, כמו תחרות על משאבי המעבד (CPU) או מחסור בשרשורים. אם זמן האחזור הגבוה של הפרסום נגרם בגלל תור של הודעות בזיכרון של הלקוח, יכול להיות ששימוש בבקרת זרימה לניהול גודל התור יעזור, אבל צריך גם לטפל באילוצים של משאבי המארח.
- מעקב אחרי מדדי זמן האחזור והתפוקה של הפרסום: השתמשו בתרשימי מדדים של Monitoring, כמו
topic/send_request_latencies, כדי לזהות קפיצות בזמן האחזור של הזנב ולהחליט אם גידור יכול לעזור. שיעורים גבוהים של שגיאותCANCELLEDעשויים להצביע על כך שהמועדים האחרונים לבקשות מוגדרים כנמוכים מדי. כשהוא מכוונן בצורה יעילה, גידור הפרסום שומר על קצב העברת ההודעות ועל עלות הבייטים של הנושא קבועים פחות או יותר, גם במהלך זמן האחזור של זנב הפרסום.
המאמרים הבאים
כדי ללמוד איך להגדיר אפשרויות פרסום מתקדמות, אפשר לעיין במאמרים הבאים: