Remote Procedure Call یا به اختصار RPC، یک مفهوم بنیادین در برنامهنویسی توزیعشده است که اجازه میدهد یک برنامه کامپیوتری تابع یا رویهای را که در یک سیستم دیگر (معمولاً روی یک سرور راه دور) اجرا میشود، به گونهای صدا بزند که انگار آن تابع در همان سیستم محلی قرار دارد. این کار به توسعهدهندگان امکان میدهد تا کدهایی بنویسند که با سرویسهای دیگر ارتباط برقرار کند، بدون اینکه نیازی به مدیریت مستقیم جزئیات سطح پایین مانند باز کردن اتصال شبکه، ارسال پیام، دریافت پاسخ یا تبدیل دادهها به فرمت قابل انتقال باشد.
ایده اصلی در RPC این است که یک "کلاینت" میتواند یک درخواست برای اجرای تابعی خاص را به یک "سرور" بفرستد. سرور آن تابع را اجرا کرده و نتیجه را به کلاینت بازمیگرداند. این فرآیند معمولاً شامل مراحل زیر است:
- فراخوانی تابع توسط کلاینت به شکل معمولی در زبان برنامهنویسی خودش
- سریالسازی (Serialization) پارامترهای تابع به فرمت قابل انتقال روی شبکه
- ارسال درخواست از طریق پروتکل شبکه
- دریافت درخواست در سمت سرور و دیسریالسازی آن
- اجرای تابع مربوطه در سرور
- سریالسازی نتیجه و ارسال آن به کلاینت
- دریافت نتیجه توسط کلاینت و دیسریالسازی برای ادامه پردازش
RPC باعث انتزاع پیچیدگیهای ارتباطی میشود. برای برنامهنویس، هیچ تفاوتی بین صدا زدن تابعی در همان ماژول و تابعی روی سرور راه دور وجود ندارد. اما در عمل، RPC محدودیتهایی دارد که شامل حساسیت به تاخیر شبکه، عدم تحمل خطای ذاتی در ارتباطات توزیعشده، نیاز به سریالسازی و دیسریالسازی و وابستگی به قراردادهای مشخص بین کلاینت و سرور میشود.
RPC میتواند هم به صورت همزمان (Synchronous) باشد که کلاینت تا دریافت پاسخ منتظر میماند، و هم به صورت غیرهمزمان (Asynchronous) که در آن کلاینت میتواند بدون دریافت فوری پاسخ به اجرای سایر کارها ادامه دهد.
مفهوم RPC به زبان، پلتفرم یا پروتکل خاصی وابسته نیست. در طول سالها، پیادهسازیهای مختلفی از آن ارائه شده که هر کدام مزایا و معایب خاص خود را دارند. در جدول زیر چند پیادهسازی مشهور RPC آورده شده است:
پیادهسازی | پروتکل ارتباطی | ویژگیها |
---|---|---|
JSON-RPC | HTTP, WebSocket | ساده، مبتنی بر JSON، بدون نیاز به تعریف اولیهی اسکیمای سختگیرانه |
XML-RPC | HTTP | مبتنی بر XML، قدیمیتر، با قابلیت تعبیه در محیطهای متنوع |
SOAP | HTTP, SMTP | استاندارد سازمانی، پیچیدهتر، با تعریف دقیق واسطها (WSDL) |
gRPC | HTTP/2 | مدرن، سریع، مبتنی بر Protobuf، پشتیبانی از استریم دوطرفه |
با پیشرفت فناوری، بسیاری از سیستمها از پیادهسازیهای مدرنتر مانند gRPC استفاده میکنند که علاوه بر عملکرد بهتر، امکانات پیشرفتهای مانند استریم، تایپهای قوی، پشتیبانی از زبانهای مختلف و ابزارهای خودکارسازی تولید کد را نیز فراهم میکنند.
RPC یکی از پایههای اصلی معماری مایکروسرویسها، ارتباط بین سرویسها و توسعه سیستمهای توزیعشده مدرن است. درک دقیق آن مقدمهای مهم برای یادگیری gRPC و دیگر تکنولوژیهای مرتبط است.