RPC هو اختصار مكالمات الإجراءات عن بُعد. يستخدم على نطاق واسع في التطبيقات الموزعة على نطاق واسع. وظيفتها هي مساعدة الانقسام الرأسي للنظام وجعل النظام أسهل في التوسع. هناك العديد من أطر عمل RPC في Java ، ولكل منها خصائصها الخاصة ، وتشمل تلك المستخدمة على نطاق واسع RMI ، Hessian ، Dubbo ، إلخ. تأخذ هذه المقالة فقط RPC بلغة Java كمثال.
هناك مخطط علاقة منطقية لـ RPC ، مع أخذ RMI كمثال:
تشبه الهياكل الإطارية الأخرى ، والاختلافات في طريقة التسلسل للكائن ، وبروتوكول الاتصال لنقل الكائن ، وإدارة مركز التسجيل وتصميم الفشل (باستخدام Zookeeper).
يمكن للعميل والخادم تشغيل في JVMs مختلفة. يحتاج العميل فقط إلى تقديم واجهات. إن تنفيذ الواجهة والبيانات المطلوبة في وقت التشغيل كلها على جانب الخادم. تقنية التبعية الرئيسية لـ RPC هي التسلسل ، وبروتوكولات التسلسل والانتقال. يتوافق Java مع التسلسل ، وفرط التسلسل ونقل الكائنات ونقل البيانات التسلسلية. RMI التسلسلية وفرس مملوكة من قبل Java. إن التسلسل والخروج في هيسيان خاصان ، وبروتوكول الإرسال هو HTTP ، ويمكن اختيار التسلسل Dubbo بعدة طرق. بشكل عام ، يتم استخدام بروتوكول تسلسل Hessian ، وبروتوكول TCP هو بروتوكول TCP ، والذي يستخدم NIO Framework NOTTY عالي الأداء. فيما يتعلق بالتسلسل ، أعرف أيضًا بعض الأشياء ، مثل Google Probuffer و JBoss Marshalling و Apache Thrift ، إلخ. لقد كتبت منشورًا في المدونة يقدم Probuffer من قبل.
1. RMI (استدعاء الطريقة عن بعد)
أداة استدعاء الطريقة البعيدة التي تأتي مع Java لها قيود معينة. بعد كل شيء ، كان تصميم لغة جافا في البداية. في وقت لاحق ، استندت مبادئ العديد من الأطر على RMI. استخدام RMI كما يلي:
واجهة خارجية
الواجهة العامة iservice تمتد عن بُعد {السلسلة العامة QueryName (سلسلة NO) رمي remoteexception ؛ } </span>تنفيذ الخدمة
استيراد java.rmi.remoteexception ؛ استيراد java.rmi.server.unicastremoteObject ؛ // تنفيذ الخدمة ServiceImpl ServiceImpl يمتد UnicastRemoteObject تنفذ iservice {/ ***/ private static final serialversionuid = 682805210518738166l ؛ / ** * throws remoteexception */ serviceImpl () المحمية () يلقي remoteexception {super () ؛ } / * (غير javadoc) * seee com.suning.ebuy.wd.web.iservice#QueryName (java.lang.string) * / / ouverride السلسلة العامة QueryName (سلسلة No) RemoTeexception {// تنفيذ محدد لـ method system.out.println ("Hello" + no) ؛ return string.valueof (System.CurrentTimeMillis ()) ؛ }}عميل RMI
استيراد java.rmi.remoteexception ؛ استيراد java.rmi.registry.locateregistry ؛ استيراد java.rmi.registry.registry ؛ // RMI Server Class Public Server {public static void main (string [] args) {// Record Manager Registry = null ؛ حاول {// إنشاء سجل خدمة = locateregistry.creategistry (8088) ؛ } catch (remoteException e) {} حاول {// إنشاء خادم خدمة serviceImpl = جديد serviceImpl () ؛ // ربط الخدمة وتسمية registry.rebind ("Vince" ، Server) ؛ System.out.println ("BIND Server") ؛ } catch (RemoteException e) {}}}يتم كتابة مدير تسجيل الخدمة في الخادم ، وبالطبع يمكن أيضًا استخلاصه كخدمة منفصلة. في بعض الأطر الأخرى ، غالبًا ما يتم استخدام Zookeeper كدور في إدارة التسجيل.
2. Hessian (استدعاء الطريقة عن بعد على أساس HTTP)
استنادًا إلى نقل بروتوكول HTTP ، فإن الأداء ليس مثاليًا. تعتمد موازنة التحميل ونقل الفشل على موازن تحميل التطبيق. استخدام Hessian يشبه RMI. الفرق هو أنه يقلل من دور السجل. من خلال مكالمة العنوان المعروضة ، يستخدم Hessianproxyfactory كائن وكيل استنادًا إلى العنوان الذي تم تكوينه. بالإضافة إلى ذلك ، تم تقديم حزمة Hessian's Jar أيضًا.
3. Dubbo (Open Framework المستند إلى TCP على Taobao)
إطار عمل RPC عالي الأداء يعتمد على NIO Framework Netty مفتوح المصدر بواسطة Alibaba. المبدأ العام على النحو التالي:
قبل فهم Dubbo ، يجب أولاً أن يكون لديك فهم متعمق لـ Zookeeper. بعد فهم Zookeeper ، لن يكون لدى Dubbo أسرار.
Zookeeper هو مركز التسجيل لخدمات Dubbo. لم يستخدم مركز التسجيل القائم على قاعدة البيانات الأصلي لـ Dubbo ZookeEper. ZookeEper هو إطار خدمة موزع. إنه تخزين بيانات لخدمات الدليل من نوع الأشجار ويمكنه إدارة البيانات في المجموعات. يمكن استخدامه كمركز تسجيل لخدمات Dubbo. يمكن لـ Dubbo أداء نشر الكتلة مع Zookeeper. عندما يكون لدى المزود وقت تعطل غير طبيعي مثل انقطاع التيار الكهربائي أو غيره من الهواء ، يمكن لمركز تسجيل Zookeeper حذف معلومات المزود تلقائيًا. عند إعادة تشغيل المزود ، يمكنه إعادة تلقائيًا لبيانات التسجيل وطلبات الاشتراك.
وصف Dubbo المفصل مفصل للغاية في المصدر المفتوح Taobao. في العديد من مشاريع الإنتاج ، يتم استخدام Dubbo في العديد من مشاريع الإنتاج. أثناء العملية ، وجدت أيضًا العديد من الأشياء التي يجب الانتباه إليها ، وخاصة التكوينات العديدة ، والتي لم يتم إعدادها بشكل صحيح ، ومن الأفضل تخصيصها وتحسينها بناءً على Dubbo المفتوح المصدر الحالي.