מה זה RPC?
RPC או הפעלת פרוצדורות מרוחקות הוא פרוטוקול או טכניקה המאפשרים לתוכנית לבקש שירות או לבצע פונקציה
במרחב כתובות אחר, בדרך כלל במחשב אחר ברשת, כאילו הייתה שיחת פונקציה מקומית.
מנגנון ה-RPC מפשט את שכבת התקשורת ברשת ומאפשר למפתח להתמקד בלוגיקה העסקית במקום
להתמודד עם קוד רשת לואו לבל.
תכונות עיקריות של RPC כוללות:
שקיפות: קריאת הפונקציה המרוחקת מופיעה בדיוק כמו שיחת פונקציה מקומית, מה שמקל על המפתחים להשתלב.
ניתוק: הלקוח והשרת נכתבים לרוב בשפות או בסביבות שונות, אך פרוטוקולי RPC מאפשרים להם לתקשר
בצורה חלקה.
טיפול בשגיאות: מכיוון שחיבורי רשת עלולים להיכשל, מסגרות RPC בדרך כלל מטפלות בשגיאות כדי לספק
ניסיונות חוזרים או מנגנוני חזרה.
כמה יישומים וגרסאות ידועות של RPC כוללות gRPC, XML-RPC, JSON-RPC.
איך עובד RPC?
RPC פועל באמצעות סדרה של שלבים הכוללים את צד הלקוח והשרת כאחד.
בדל לקוח: כאשר הלקוח מבצע קריאה לנוהל מרוחק, השיחה לא נשלחת ישירות דרך הרשת.
במקום זאת, דף לקוח מקומי (או פרוקסי) המייצג את ההליך המרוחק מטפל בשיחה כאילו היא פונקציה מקומית.
סריאליזציה: בדל הלקוח אוסף את הטיעונים ומכין אותם בפורמט מתאים לשידור ברשת.
תהליך זה נקרא “סריאליזציה” או “הסדרה”.
תקשורת רשת: הנתונים המסומנים נשלחים דרך הרשת לשרת באמצעות פרוטוקול תקשורת (TCP, HTTP וכו’).
בדל שרת: בצד השרת, בדל שרת מתאים מקבל את הנתונים שנקבעו ו”מבטל” אותם, וממיר אותם בחזרה
לסוגי הארגומנטים המקוריים שלו.
הפעלת הנוהל המרוחק: השרת מעורר את ההליך בפועל בשרת עם הטיעונים הלא מסודרים.
החזרת התוצאות: לאחר השלמת ההליך, השרת מסדר את התוצאות בחזרה לפורמט המתאים לרשת
ומחזיר אותו ללקוח דרך הרשת.
Client Stub מקבל תוצאות: ה-Client Stub מקבל את הנתונים ומסלק את התוצאות לפורמט שמיש
לפני שהוא מחזיר אותן לאפליקציית הלקוח המתקשר.
סוגי RPC
ישנם מספר סוגים של פרוטוקולי RPC, שכל אחד מהם עונה על צרכי אפליקציות וסביבות שונות:
RPC סינכרוני: הלקוח שולח בקשה ומחכה לתגובת השרת.
סוג זה חוסם את ביצוע הלקוח עד שהשרת ישלים את הקריאה.
RPC אסינכרוני: הלקוח שולח בקשה וממשיך בביצוע מבלי לחכות לתגובה באופן מיידי.
תגובת השרת מטופלת מאוחר יותר באמצעות התקשרות חוזרת או סקר.
Message-Oriented Middleware (MOM) RPC: פרוטוקולי RPC המסתמכים על מתווכים של הודעות,
המאפשרים ניתוק בין הלקוח לשרת.
דוגמה לכך היא השימוש ב-Advanced Message Queuing Protocol (AMQP).
REST מבוסס RPC: שיחות מתבצעות באמצעות HTTP/HTTPS, ונתונים מוחלפים באמצעות פורמטים
סטנדרטיים כמו JSON.
לממשקי API של REST יש לרוב דפוס בסגנון RPC אך חסרים סמנטיקה קפדנית של פרוצדורה.
gRPC: מסגרת RPC בקוד פתוח שפותחה על ידי Google.
gRPC משתמש ב-HTTP/2 לתעבורה ובמאגרי פרוטוקול (פרוטובופים) להסדרת נתונים, מה שמאפשר
חילופי נתונים יעילים יותר.
JSON-RPC ו-XML-RPC: פרוטוקולים המשתמשים ב-JSON וב-XML עבור קידוד הודעות, בהתאמה.
הם פשוטים יותר וקראים יותר לאדם אך פחות יעילים מפרוטוקולים בינאריים אחרים.
SOAP: פרוטוקול ישן יותר המשתמש ב-XML להעברת הודעות ולרוב נעשה בו שימוש בסביבות ארגוניות
בשל תמיכתו בתקנים ובכלים שונים.
RMI (Remote Method Invocation): סוג RPC ספציפי ל-Java המאפשר לאובייקטים להפעיל שיטות
על אובייקטים מרוחקים באמצעות פרוטוקול סריאליזציה ספציפי ל-Java.

