לפעמים יש עליות חדות בנתוני התנועה שמתפרסמים בצינורות להעברת נתונים. אם לא תהיו מוכנים לעלייה החדה הזו, היא עלולה להציף את המנויים. פתרון פשוט להימנעות מעליות חדות בתנועה הוא להגדיל באופן דינמי את המשאבים של המנויים ב-Pub/Sub כדי לעבד יותר הודעות. עם זאת, יכול להיות שהפתרון הזה יעלה את העלויות או שלא יפעל באופן מיידי. לדוגמה, יכול להיות שתצטרכו הרבה מכונות וירטואליות.
בצד המנוי, בקרה על זרימת נתונים מאפשרת למנוי לווסת את קצב ההטמעה של ההודעות. לכן, בקרה על זרימת נתונים מטפלת בעליות חדות בתעבורת נתונים בלי להגדיל את העלויות או עד שהאפליקציה הרשומה תורחב אנכית בהתאם לעומס.
בספריית הלקוח ברמה גבוהה של Pub/Sub יש תכונה של בקרה על זרימת נתונים. אפשר גם להטמיע תכנות משלכם של בקרה על זרימת נתונים כשמשתמשים בספריית לקוח ברמה נמוכה.
הצורך בבקרה על זרימת הנתונים מצביע על כך שההודעות מתפרסמות בקצב גבוה יותר מהקצב שבו הן נצרכות. אם התרחיש הזה הוא מצב קבוע ולא עלייה זמנית בנפח ההודעות, כדאי להגדיל את מספר המופעים של לקוח המנוי.
הגדרה של בקרה על זרימת נתונים
בקרה על זרימת נתונים מאפשרת להגדיר את המספר המקסימלי של בייטים שהוקצו לבקשות ממתינות, ואת המספר המקסימלי של הודעות ממתינות שמותרות. כדאי להגדיר את המגבלות האלה בהתאם לקיבולת התפוקה של מכונות הלקוח.
יכול להיות שערכי ברירת המחדל של משתני בקרה על זרימת נתונים והשמות של המשתנים יהיו שונים בספריות לקוח שונות. לדוגמה, בספריית הלקוח של Java, המשתנים הבאים מגדירים את בקרה על זרימת נתונים:
setMaxOutstandingElementCount(). מגדיר את המספר המקסימלי של הודעות שלא התקבלו לגביהן אישורים או אישורים שליליים ב-Pub/Sub.
setMaxOutstandingRequestBytes(). מגדיר את הגודל המקסימלי של הודעות שלא התקבלו לגביהן אישורים או אישורים שליליים ב-Pub/Sub.
אם חורגים מהמגבלה של setMaxOutstandingElementCount() או של setMaxOutstandingRequestBytes(), לקוח המינוי לא מושך יותר הודעות. ההתנהגות הזו נמשכת עד שהמערכת מקבלת אישור או אישור שלילי לגבי ההודעות שכבר נמשכו.
כך נוכל להתאים את קצב העברת הנתונים לעלות שקשורה להפעלת מספר גדול יותר של מינויים.
דוגמאות קוד לבקרה על זרימת נתונים
כדי לשלוט בקצב שבו לקוח המינוי מקבל הודעות, משתמשים בתכונות של בקרה על זרימת נתונים של המינוי. התכונות האלה של בקרה על זרימת נתונים מודגמות בדוגמאות הבאות:
C++
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C++ במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף זמין במאמרי העזרה של Pub/Sub C++ API.
C#
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של C# במאמר הפעלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub C# API.
המשך
בדוגמה הבאה נעשה שימוש בגרסה הראשית של ספריית הלקוח Go Pub/Sub (v2). אם אתם עדיין משתמשים בספרייה v1, כדאי לעיין במדריך להעברה לגרסה v2. כדי לראות רשימה של דוגמאות קוד מגרסה 1, אפשר לעיין ב דוגמאות הקוד שהוצאו משימוש.
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במאמר מדריך למתחילים: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Go API.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במאמר התחלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Java API.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במאמר הפעלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Node.js API.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במאמר הפעלה מהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Node.js API.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של ה-API בשפת Python של Pub/Sub.
Ruby
בדוגמה הבאה נעשה שימוש בספריית הלקוח של Ruby Pub/Sub בגרסה 3. אם אתם עדיין משתמשים בספרייה v2, כדאי לעיין במדריך להעברה לגרסה v3. כדי לראות רשימה של דוגמאות קוד של Ruby v2, אפשר לעיין ב דוגמאות הקוד שהוצאו משימוש.
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Ruby במאמר תחילת העבודה המהירה: שימוש בספריות לקוח. מידע נוסף מופיע במאמרי העזרה של Pub/Sub Ruby API.
המאמרים הבאים
מידע נוסף על אפשרויות משלוח אחרות שאפשר להגדיר למינוי: