عنوان
Remote Procedure Call یا به اختصار RPC، یک پروتکل ارتباطی بینپردازشی است که به طور گسترده در سیستمهای توزیعشده استفاده میشود. این پروتکل در مدل OSI شبکه، لایههای انتقال و کاربرد را پوشش میدهد و به توسعهدهندگان این امکان را میدهد که فرآیندهای پیچیده ارسال و دریافت پارامترهای توابع از سرور راه دور را به سادگی یک فراخوانی محلی اجرا کنند.
RPC پروتکلی است که به یک برنامه رایانهای اجازه میدهد تا یک procedure یا subroutine را در یک فضای آدرسدهی مجزا اجرا کند. این فراخوانی به صورت یک فراخوانی محلی کدگذاری میشود بدون اینکه برنامهنویس نیازی به کدگذاری جزئیات ارتباط از راه دور داشته باشد.
هنگام انجام یک RPC، محیط فراخوانی متوقف میشود و پارامترهای procedure از طریق شبکه به محیطی که procedure در آن اجرا میشود ارسال میگردد. پس از اتمام اجرای procedure، نتایج به محیط فراخوانی بازگردانده میشود و فرآیند به عنوان یک فراخوانی محلی ادامه مییابد.
برای مشاهده نحوه کار، یک برنامه کلاینت-سرور را در نظر بگیرید. پنج مؤلفه اصلی در برنامه RPC وجود دارند:
1. کلاینت
2. کلاینت استاب
3. زماناجرای RPC در سمت کلاینت
4. سرور
5. سرور استاب
6. زماناجرای RPC در سمت سرور
در فرآیند RPC، مراحل زیر رخ میدهد:
1. کلاینت فرآیند کلاینت استاب را با دادن پارامترها به طور عادی آغاز میکند. کلاینت استاب در فضای آدرسدهی کلاینت ذخیره میشود.
2. کلاینت استاب پارامترها را به یک فرمت استاندارد تبدیل کرده و آنها را به یک پیام بستهبندی میکند. سپس از زماناجرای محلی RPC درخواست میکند تا پیام را به سرور تحویل دهد.
3. زماناجرای RPC در سمت کلاینت پیام را از طریق شبکه به سرور تحویل میدهد و منتظر دریافت نتیجه از سرور میماند.
4. زماناجرای RPC در سمت سرور پیام را دریافت کرده و به سرور استاب تحویل میدهد.
5. سرور استاب پیام را باز کرده، پارامترها را استخراج کرده و procedure سرور مورد نظر را با استفاده از یک فراخوانی محلی اجرا میکند.
6. پس از اجرای procedure سرور، نتیجه به سرور استاب بازگردانده میشود.
7. سرور استاب نتیجه را به یک پیام بستهبندی کرده و به زماناجرای RPC در سمت سرور ارسال میکند.
8. زماناجرای RPC در سمت سرور نتیجه بستهبندی شده را به زماناجرای RPC در سمت کلاینت از طریق شبکه باز میگرداند.
9. زماناجرای RPC در سمت کلاینت نتیجه را دریافت کرده و به کلاینت استاب ارسال میکند.
10. کلاینت استاب نتیجه را باز کرده و فرآیند اجرایی به فراخواننده بازمیگردد.
RPC در بسیاری از خدمات واقعی استفاده میشود. مثالهای زیر به برخی از کاربردهای آن اشاره میکند:
– گوگل: گوگل از RPC در بخشهای مختلف زیرساخت توزیعشده خود استفاده میکند. آنها gRPC را توسعه دادهاند که یک چارچوب منبعباز برای ساخت سیستمهای توزیعشده کارآمد و با کارایی بالا است. gRPC در خدماتی مانند جستجوی گوگل و یوتیوب استفاده میشود.
– اوبر: اوبر از RPC برای عملکردهای مختلفی از جمله ردیابی مکان در زمان واقعی، مطابقت سفرها و ارتباط بین رانندگان و مسافران استفاده میکند. RPC به اوبر امکان ارائه خدمات سریع و پاسخگو را میدهد.
– فیسبوک: بیشتر خدمات فیسبوک با استفاده از Thrift برای RPC نوشته شدهاند و برخی از سیستمهای ذخیرهسازی از Thrift برای سریالسازی رکوردها روی دیسک استفاده میکنند.
روش RPC مشابه فراخوانی یک procedure محلی است، با این تفاوت که procedure فراخواندهشده معمولاً در یک فرآیند دیگر و روی یک رایانه دیگر اجرا میشود. RPC به توسعهدهندگان اجازه میدهد تا برنامههایی روی سیستمهای توزیعشده بسازند بدون اینکه نیازی به دانستن جزئیات ارتباط شبکه داشته باشند. به این ترتیب، آنها میتوانند بیشتر روی جنبههای طراحی متمرکز شوند تا جزئیات سطح ماشین و ارتباطات.