إجراء مكالمة عن بعد
في الحوسبة الموزعة، يُعد استدعاء الإجراء عن بُعد ( RPC ) إجراءً يقوم فيه برنامج حاسوبي بتنفيذ إجراء (روتين فرعي) في مساحة عنوان مختلفة عن مساحة عنوان العملية الحالية (عادةً على حاسوب آخر ضمن شبكة حاسوب مشتركة)، ويُكتب هذا الإجراء كما لو كان استدعاء إجراء عاديًا (محليًا)، دون أن يُفصّل المبرمج تفاصيل التفاعل عن بُعد. أي أن المبرمج يكتب نفس الشيفرة البرمجية سواءً كان الروتين الفرعي محليًا للبرنامج المُنفِّذ أو بعيدًا. يُعد هذا شكلًا من أشكال التفاعل بين الخادم والمُستدعي (المُستدعي هو العميل، والمُنفِّذ هو الخادم)، ويتم تنفيذه عادةً عبر نظام تمرير الرسائل القائم على طلب واستجابة. في نموذج البرمجة كائنية التوجه، يتم تمثيل استدعاءات الإجراءات عن بُعد باستدعاء الأساليب عن بُعد (RMI). يُشير نموذج استدعاء الإجراء عن بُعد إلى مستوى من شفافية الموقع، أي أن الإجراءات المُستدعاة متشابهة إلى حد كبير سواءً كانت محلية أو بعيدة، ولكنها عادةً ما تكون غير متطابقة، لذا يُمكن التمييز بين الاستدعاءات المحلية والبعيدة. عادةً ما تكون الاستدعاءات البعيدة أبطأ بكثير وأقل موثوقية من الاستدعاءات المحلية، لذا يُعد التمييز بينهما أمرًا بالغ الأهمية.
تُعدّ استدعاءات الإجراءات عن بُعد (RPC) شكلاً من أشكال الاتصال بين العمليات (IPC) ، حيث تمتلك العمليات المختلفة مساحات عناوين مختلفة: فإذا كانت على نفس الجهاز المضيف، فإنها تمتلك مساحات عناوين افتراضية متميزة، على الرغم من أن مساحة العناوين الفيزيائية واحدة؛ أما إذا كانت على أجهزة مضيفة مختلفة، فإن مساحة العناوين الفيزيائية تختلف أيضًا. وقد استُخدمت العديد من التقنيات المختلفة (وغالباً ما تكون غير متوافقة) لتطبيق هذا المفهوم. تعمل أُطر عمل RPC الحديثة، مثل gRPC و Apache Thrift ، على تحسين نموذج RPC الأساسي باستخدام تسلسل ثنائي فعال (مثل Protocol Buffers)، وتعدد إرسال HTTP/2، ودعم مُدمج لميزات مثل المصادقة، وموازنة الأحمال، والبث، ومعالجة الأخطاء، مما يجعلها مناسبة تمامًا لبناء خدمات مصغرة قابلة للتوسع وتمكين التوافق بين اللغات. [ 1 ]
التاريخ والأصول
يعود تاريخ بروتوكولات الطلب والاستجابة إلى بدايات الحوسبة الموزعة في أواخر الستينيات، وتعود المقترحات النظرية لاستدعاءات الإجراءات عن بعد كنموذج لعمليات الشبكة إلى السبعينيات، وتعود التطبيقات العملية إلى أوائل الثمانينيات. يُنسب الفضل عمومًا إلى بروس جاي نيلسون في صياغة مصطلح "استدعاء الإجراء عن بعد" في عام 1981. [ 2 ]
تعود جذور استدعاءات الإجراءات عن بُعد، المستخدمة في أنظمة التشغيل الحديثة، إلى نظام البرمجة المتعددة RC 4000، [ 3 ] الذي استخدم بروتوكول اتصال قائم على طلب واستجابة لمزامنة العمليات. [ 4 ] وتعود فكرة التعامل مع عمليات الشبكة كاستدعاءات إجراءات عن بُعد إلى سبعينيات القرن الماضي على الأقل، في وثائق شبكة أربانت المبكرة. [ 5 ] وفي عام 1978، اقترح بير برينش هانسن لغة العمليات الموزعة، وهي لغة للحوسبة الموزعة تعتمد على "الطلبات الخارجية" التي تتكون من استدعاءات إجراءات بين العمليات. [ 6 ]
كان أحد أوائل التطبيقات العملية لبروتوكول RPC في عام 1982 من قِبل برايان راندل وزملائه في برنامج نيوكاسل كونكشن الذي يربط أجهزة يونكس. [ 7 ] وسرعان ما تبع ذلك برنامج "لوبين" الذي طوره أندرو بيريل وبروس نيلسون في بيئة سيدار بمركز أبحاث زيروكس بارك. [ 8 ] [ 9 ] [ 10 ] كان لوبين يُنشئ تلقائيًا ملفات تعريفية (stubs)، موفرًا روابط آمنة من حيث النوع، ويستخدم بروتوكولًا فعالًا للاتصال. [ 9 ] وكان من أوائل استخدامات بروتوكول RPC في مجال الأعمال من قِبل شركة زيروكس تحت اسم "كوريير" في عام 1981. أما أول تطبيق شائع لبروتوكول RPC على يونكس فكان بروتوكول صن RPC (المعروف الآن باسم ONC RPC)، والذي استُخدم كأساس لنظام ملفات الشبكة (NFS).
في تسعينيات القرن الماضي، ومع انتشار البرمجة كائنية التوجه، تم تطبيق نموذج بديل لاستدعاء الأساليب عن بُعد (RMI) على نطاق واسع، كما هو الحال في بنية وسيط طلب الكائنات المشتركة (CORBA، 1991) واستدعاء الأساليب عن بُعد في جافا. إلا أن استخدام RMI تراجع مع ظهور الإنترنت، لا سيما في العقد الأول من الألفية الثانية.
تمرير الرسائل
بروتوكول RPC هو بروتوكول طلب واستجابة. يبدأ العميل عملية RPC بإرسال رسالة طلب إلى خادم بعيد معروف لتنفيذ إجراء محدد بمعاملات مُقدمة. يُرسل الخادم البعيد استجابة إلى العميل، ويستمر التطبيق في عمله. أثناء معالجة الخادم للطلب، يتوقف العميل (ينتظر حتى ينتهي الخادم من المعالجة قبل استئناف التنفيذ)، إلا إذا أرسل العميل طلبًا غير متزامن إلى الخادم، مثل XMLHttpRequest . توجد اختلافات وتفاصيل دقيقة في مختلف التطبيقات، مما ينتج عنه مجموعة متنوعة من بروتوكولات RPC المختلفة (غير المتوافقة).
يتمثل أحد الفروق المهمة بين استدعاءات الإجراءات عن بُعد والاستدعاءات المحلية في أن الاستدعاءات عن بُعد قد تفشل بسبب مشاكل غير متوقعة في الشبكة. كما يتعين على المستدعين عادةً التعامل مع هذه الإخفاقات دون معرفة ما إذا كان الإجراء البعيد قد تم استدعاؤه بالفعل. يسهل التعامل مع الإجراءات المتكررة (التي لا تُحدث أي تأثيرات إضافية عند استدعائها أكثر من مرة)، ولكن لا تزال هناك صعوبات كافية تجعل كتابة التعليمات البرمجية لاستدعاء الإجراءات عن بُعد محصورةً في كثير من الأحيان ضمن أنظمة فرعية منخفضة المستوى مكتوبة بعناية .
تسلسل الأحداث
- يستدعي العميل واجهة العميل. الاستدعاء هو استدعاء إجراء محلي، مع دفع المعلمات إلى المكدس بالطريقة المعتادة.
- يقوم برنامج العميل بتجميع المعلمات في رسالة، ثم يستدعي النظام لإرسالها. وتُسمى عملية تجميع المعلمات بالترتيب .
- يقوم نظام التشغيل المحلي الخاص بالعميل بإرسال الرسالة من جهاز العميل إلى جهاز الخادم.
- يقوم نظام التشغيل المحلي على جهاز الخادم بتمرير الحزم الواردة إلى خادم الواجهة.
- يقوم خادم البرنامج الوسيط بفك تشفير المعلمات من الرسالة. وتسمى عملية فك تشفير المعلمات "فك التسلسل".
- وأخيرًا، يستدعي برنامج الخادم الفرعي إجراء الخادم. ويتتبع الرد نفس الخطوات ولكن في الاتجاه المعاكس.
آليات الاتصال القياسية
لتمكين مختلف العملاء من الوصول إلى الخوادم، تم إنشاء عدد من أنظمة استدعاء الإجراءات عن بُعد (RPC) القياسية. يستخدم معظمها لغة وصف الواجهة (IDL) لتمكين المنصات المختلفة من استدعاء RPC. ويمكن استخدام ملفات IDL لإنشاء رمز برمجي للتفاعل بين العميل والخوادم.
النظائر
تشمل تطبيقات RPC البارزة وما يماثلها ما يلي:
خاص باللغة
- توفر واجهة برمجة تطبيقات Java's Remote Method Invocation (Java RMI) وظائف مشابهة لطرق RPC القياسية في نظام Unix.
- توفر لغة Go حزمة rpc لتنفيذ RPC، مع دعم للمكالمات غير المتزامنة.
- كائنات الشبكة في Modula-3، والتي كانت أساس RMI في Java [ 11 ]
- تُنفذ RPyC آليات RPC في بايثون، مع دعم للمكالمات غير المتزامنة.
- تتيح لغة روبي الموزعة (DRb) لبرامج روبي التواصل فيما بينها على نفس الجهاز أو عبر الشبكة. وتستخدم DRb تقنية استدعاء الأساليب عن بُعد (RMI) لتمرير الأوامر والبيانات بين العمليات.
- لغة إرلانج موجهة نحو العمليات وتدعم بشكل أصلي التوزيع و RPCs عبر تمرير الرسائل بين العقد والعمليات المحلية على حد سواء.
- تعتمد لغة Elixir على لغة Erlang. وهي تتيح اتصال العمليات (عمليات Elixir/Erlang، وليس عمليات نظام التشغيل) على نفس الشبكة مباشرةً عبر الوكلاء وتبادل الرسائل.
- يتيح إطار عمل Tarpc الخاص بـ Rust RPC من Google للمطورين تحديد بنية الرسائل باستخدام هياكل Rust وسماتها، بدلاً من استخدام protobuf. [ 12 ]
خاص بالتطبيق
- تتيح صيغة رسائل الإجراءات (AMF) لتطبيقات Adobe Flex التواصل مع الأنظمة الخلفية أو التطبيقات الأخرى التي تدعم AMF.
- تُعدّ خاصية استدعاء الوظائف عن بُعد (RFC) واجهة SAP القياسية للتواصل بين أنظمة SAP. وتستدعي هذه الخاصية وظيفةً ليتم تنفيذها في نظام بعيد.
عام
- يُعد نظام ملفات الشبكة ( NFS ) أحد أبرز مستخدمي بروتوكول RPC
- بروتوكول الحوسبة الشبكية المفتوحة RPC، من شركة صن مايكروسيستمز (المعروف أيضًا باسم Sun RPC)
- يوفر برنامج D-Bus مفتوح المصدر للاتصال بين العمليات وظائف مشابهة لبرنامج CORBA.
- يوفر SORCER واجهة برمجة التطبيقات ولغة موجهة نحو الجهد (EOL) لاستدعاء الأساليب الموحدة.
- XML-RPC هو بروتوكول RPC يستخدم XML لترميز استدعاءاته و HTTP كآلية نقل.
- JSON-RPC هو بروتوكول RPC يستخدم رسائل مشفرة بتنسيق JSON .
- JSON-WSP هو بروتوكول RPC مستوحى من JSON-RPC.
- SOAP هو خليفة XML-RPC ويستخدم أيضًا XML لترميز استدعاءاته المستندة إلى HTTP.
- منصة الحوسبة الموزعة لمحرك اتصالات الإنترنت (Ice) من ZeroC .
- إطار عمل Etch لبناء خدمات الشبكة.
- بروتوكول وإطار عمل أباتشي ثريفت .
- يوفر CORBA استدعاء الإجراءات عن بعد من خلال طبقة وسيطة تسمى وسيط طلب الكائن .
- يوفر Libevent إطار عمل لإنشاء خوادم وعملاء RPC. [ 13 ]
- Windows Communication Foundation هي واجهة برمجة تطبيقات في إطار عمل .NET لبناء تطبيقات متصلة وموجهة نحو الخدمات.
- توفر تقنية Microsoft .NET Remoting إمكانيات RPC للأنظمة الموزعة المُنفذة على منصة Windows. وقد تم استبدالها بتقنية WCF .
- يستخدم Microsoft DCOM بروتوكول MSRPC الذي يعتمد على DCE/RPC
- بيئة الحوسبة الموزعة DCE/RPC التابعة لمؤسسة البرمجيات المفتوحة (والتي نفذتها مايكروسوفت أيضًا).
- تتضمن حزمة بروتوكول جوجل (protobufs) لغة تعريف واجهة تستخدم لبروتوكولات RPC الخاصة بها [ 14 ] والتي تم فتح مصدرها في عام 2015 باسم gRPC. [ 1 ]
- يجمع WAMP بين RPC و Publish-Subscribe في بروتوكول واحد مستقل عن نوع النقل.
- تستخدم مجموعة أدوات الويب من جوجل بروتوكول RPC غير متزامن للتواصل مع خدمة الخادم. [ 15 ]
- يوفر Apache Avro بروتوكول RPC حيث لا يلزم تبادل المخططات بين العميل والخادم في عملية المصافحة الخاصة بالاتصال أو إنشاء التعليمات البرمجية.
انظر أيضاً
- 9P
- مايكروسوفت آر بي سي
- التواصل المحلي بين العمليات
- HTTP
- ODBC
- التقييم عن بعد
- تمثيل البيانات الخارجية (تنسيق التسلسل المستخدم بواسطة NFS على سبيل المثال)
- تمثيل بيانات الشبكة (تنسيق التسلسل المستخدم من قبل، على سبيل المثال، Microsoft RPC)
- بنية موجهة نحو الموارد
- برمجيات وسيطة للكائنات الموزعة
- كائن مجزأ
- gRPC
مراجع
- 1 2 "gRPC إطار عمل RPC عالمي مفتوح المصدر" . موقع مشروع جوجل . تم الاطلاع عليه في 7 سبتمبر 2016 .
- ↑ بروس جاي نيلسون (مايو 1981). استدعاء الإجراءات عن بُعد (أطروحة دكتوراه). مركز أبحاث زيروكس بالو ألتو. PARC CSL-81-9 (وأيضًا CMU-CS-81-119).
- ^ "لكل برينش هانسن • جمعية IEEE للكمبيوتر" . www.computer.org . تم الاسترجاع 2015/12/15 .
- ^ برينش هانسن، لكل (1969). RC 4000 برامج الكمبيوتر: نظام البرمجة المتعددة (PDF) . كوبنهاجن، الدنمارك: Regnecentralen.
- ↑ جيمس إي. وايت (23 ديسمبر 1975). "إطار عمل عالي المستوى لمشاركة الموارد عبر الشبكة" . RFC 707. مركز أبحاث التوسيع . doi : 10.17487/RFC0707 . تاريخ الاسترجاع: 11 يوليو 2011 .
- ↑ برينش هانسن، بير (نوفمبر 1978). "العمليات الموزعة: مفهوم البرمجة المتزامنة" (ملف PDF) . مجلة اتصالات رابطة مكائن الحوسبة . 21 (11): 934-941 . CiteSeerX 10.1.1.107.3108 . doi : 10.1145/359642.359651 . S2CID 11610744 .
- ↑ براونبريدج، ديفيد ر.؛ مارشال، ليندسي ف.؛ راندل، برايان (1982). "صلة نيوكاسل" (ملف PDF) . البرمجيات: الممارسة والخبرة . 12 (12): 1147-1162 . doi : 10.1002/spe.4380121206 . S2CID 1840438. مؤرشف من الأصل (ملف PDF) بتاريخ 16 أغسطس 2016. تم الاطلاع عليه بتاريخ 16 أغسطس 2016 .
- ↑ بيريل، أندرو د.؛ نيلسون، بروس جاي (1984). "تنفيذ استدعاءات الإجراءات عن بُعد" (ملف PDF) . معاملات ACM لأنظمة الحاسوب . 2 : 39-59 . doi : 10.1145/2080.357392 . S2CID 11525846 .
- 1 2 "1994 - أندرو بيريل، بروس نيلسون: استدعاء الإجراء عن بُعد" . بيان جائزة نظام البرمجيات . جمعية آلات الحوسبة . مؤرشف من الأصل في 2 أبريل 2012. تم الاسترجاع في 11 يوليو 2011 .
- ↑ "جائزة قاعة مشاهير SIGOPS" . مجموعة الاهتمامات الخاصة بأنظمة التشغيل . رابطة آلات الحوسبة . تم الاطلاع عليه في 11 يوليو 2011 .
- ↑ قاموس لغات البرمجة: Modula-3 - قاموس لغات البرمجة. مؤرشف بتاريخ 5 يناير 2009 في أرشيف الإنترنت . Computerworld. تم الاطلاع عليه بتاريخ 17 يوليو 2013.
- ↑ tarpc ، جوجل، 2023-11-02 ، تم الاطلاع عليه في 2023-11-02
- ↑ libevent: الصفحة الرئيسية . Monkey.org. تم الاطلاع عليه بتاريخ 17-07-2013.
- ↑ "بروتوكول المخازن المؤقتة - تنسيق تبادل البيانات من جوجل" . موقع مشروع جوجل . تم الاطلاع عليه في 1 نوفمبر 2011 .
- ↑ "مجموعة أدوات جوجل للويب" . موقع مشروع جوجل . تم الاطلاع عليه في 1 نوفمبر 2011 .
روابط خارجية
- RFC 9289 – نحو تشفير استدعاءات الإجراءات عن بُعد بشكل افتراضي
- RFC 5531 - يحدد الإصدار 2 من ONC RPC (الإصدار الثالث المنشور من RFC 2)
- RFC 1831 - يحدد الإصدار 2 من ONC RPC (الإصدار الثاني المنشور من RFC 2)
- RFC 1057 - يحدد الإصدار 2 من ONC RPC (أول إصدار منشور من RFC 2)
- RFC 1050 - يحدد الإصدار الأول من ONC RPC (أول إصدار منشور من RFC)
- استدعاءات الإجراءات عن بُعد (RPC) - درس تعليمي حول استدعاءات الإجراءات عن بُعد (RPC) من قِبل الدكتور ديف مارشال من جامعة كارديف
- مقدمة في برمجة RPC - مقدمة للمطورين حول RPC و XDR، من وثائق SGI IRIX.
- إجراء مكالمة عن بعد
- التواصل بين العمليات
- البرمجيات الوسيطة
- الحوسبة الموزعة
