מה זה בעצם RUD PDC - ולמה מערכות תקשורת משתמשות בו?

📚 סדרת UET - חלק 1 תקשורת #RUD PDC#UET
תוכן עניינים

מה זה בעצם RUD PDC - ולמה מערכות תקשורת משתמשות בו?

כאשר מערכות תוכנה ורכיבים שונים צריכים להעביר הודעות ביניהם, יש כמה דרכים לבצע את ההעברה. חלק מהדרכים מבטיחות סדר, חלק מבטיחות אמינות, וחלק מכוונות למהירות.

RUD PDC הוא אחד מאותם מנגנוני תקשורת - והוא משלב שני מאפיינים חשובים:

  • RUD - Reliable Unordered Delivery
  • PDC - Provider Delivery Control

אבל מה זה אומר בפועל?

נפרק את זה למשהו פשוט.

החלק הראשון: RUD - Reliable Unordered Delivery

אמין - אבל לא מסודר

RUD אומר שני דברים:

1. Reliable - אמין

כל הודעה שנשלחת תגיע. אין מצב שהודעה “נופלת בין הכיסאות”.

2. Unordered - לא מסודר

ההודעות לא בהכרח יגיעו לפי הסדר שנשלחו.

למשל:

שלחתי: 1 → 2 → 3

יכול להגיע: 2 → 3 → 1

זה לא באג - זה חלק מהתנהגות RUD.

הוא דומה לדואר: כל החבילות יגיעו - רק לא בטוח באיזה סדר.

למה שזה יקרה?

כי הודעות יכולות לעבור דרך מסלולים שונים, חלק יכולות להתעכב, חלק לעבור מהר.

התוצאה:

  • אמינות ✔
  • סדר ✘

החלק השני: PDC - Provider Delivery Control

השליטה איך ומתי ההודעה נמסרת למשתמש

PDC מתייחס לכך שהשליטה על המסירה לאפליקציה לא מגיעה “באופן אוטומטי”, אלא דרך שכבת התשתית (Provider).

התשתית יכולה:

  • לעכב הודעה
  • לארגן מחדש
  • לסנן
  • לאפשר ליישום לקבל הודעות רק כשהן מוכנות
  • להוסיף חוקים לניהול עומס, שגיאות ותזמון

כלומר, האפליקציה עצמה לא מתעסקת בלוגיקה הסבוכה של “מתי” ו”איך” לקבל הודעה.

אז מה זה RUD PDC כשמחברים הכול?

RUD PDC הוא ערוץ תקשורת אמין ומהיר, שבו:

  • כל הודעה כן מגיעה למקבל (אמינות)
  • אבל הן לא מגיעות לפי סדר (חוסר סדר מובנה)
  • ובנוסף, יש שכבת תשתית (PDC) שאחראית על מסירה, טיפול בשגיאות, ועומס

זו צורה מאוד נפוצה במערכות זמן-אמת, מערכות מבוזרות, ותקשורת מסיבית.

למה לא מסדרים את זה מראש?

שאלה מצוינת. למה לא להגיד: “בואו נשלח הכול לפי סדר”?

כי שמירה על סדר מאוד יקרה:

  • דורשת אחסון של הודעות
  • דורשת המתנה להודעות חסרות
  • גורמת להשהיות
  • מאטה את המערכת

RUD PDC בוחר בפתרון מהיר וחסכוני: “אני מבטיח שהכול מגיע - אבל לא מבטיח מתי.”

ואם האפליקציה צריכה סדר?

פה נכנסים מנגנונים כמו UET, שעליהם נדבר בפוסט הבא - הם מוסיפים את שכבת הסדר מעל RUD PDC.

דוגמה אינטואיטיבית

דמיינו שליח שלוקח שלוש חבילות לאותה כתובת:

  • הוא מבטיח להביא את כולן
  • אבל הוא לא מבטיח להביא אותן באותו סדר
  • אולי אחת בבוקר, אחת בצהריים, אחת בערב
  • אולי אפילו יעצור בדרך לסידורים

זו מערכת אמינה - אבל לא מסודרת.

עכשיו, אם בעל הבית רוצה לקבל את החבילות בסדר מסוים, הוא צריך מנגנון נוסף שאומר: “חכה עד שכל החבילות יגיעו, ואז תסדר לי אותן על השולחן.”

זה בדיוק השילוב של:

  • RUD PDC → מביא את כל החבילות
  • UET → מסדר אותן לפי הסדר שהוגדר מראש

מתי משתמשים ב-RUD PDC?

במקומות שבהם:

  • מהירות חשובה יותר משמירה על סדר
  • עומסים יכולים להשתנות
  • הודעות מגיעות בכמויות גדולות
  • לא כל ההודעות תלויות זו בזו

דוגמאות:

  • מערכות מבוזרות עם אלפי אירועים בשנייה
  • מערכות ניתוב בהיקף גבוה
  • שירותים שמתעדפים throughput (קצב) על פני latency (זמן)
  • תקשורת שמתוכננת לסבילות תקלות

סיכום

RUD PDC הוא ערוץ תקשורת שמבטיח שני דברים:

  • כל הודעה תגיע - אין אובדן הודעות.
  • הסדר אינו מובטח - הודעות יכולות להגיע בכל רצף.

ומעליו ניתן לבנות שכבות כמו UET, שכן מחזירות סדר, קביעות והתנהגות אחידה.

הוא מהיר, יעיל, ומעוצב לתרחישים שבהם אמינות חשובה - אבל שמירה על סדר הייתה פוגעת בביצועים.

תגובות