RPC adalah singkatan dari panggilan prosedur jarak jauh. Ini banyak digunakan dalam aplikasi terdistribusi skala besar. Fungsinya adalah untuk membantu pemisahan vertikal sistem dan membuat sistem lebih mudah diperluas. Ada banyak kerangka kerja RPC di Java, masing -masing dengan karakteristiknya sendiri, dan yang banyak digunakan termasuk RMI, Hessian, Dubbo, dll. Fitur lain dari RPC adalah bahwa ia dapat melintasi bahasa. Artikel ini hanya membutuhkan RPC dalam bahasa Java sebagai contoh.
Ada diagram hubungan logis untuk RPC, mengambil RMI sebagai contoh:
Struktur kerangka kerja lainnya serupa, perbedaannya ada dalam metode serialisasi objek, protokol komunikasi untuk mentransmisikan objek, pengelolaan pusat pendaftaran dan desain failover (menggunakan Zookeeper).
Klien dan server dapat berjalan dalam JVM yang berbeda. Klien hanya perlu memperkenalkan antarmuka. Implementasi antarmuka dan data yang diperlukan saat runtime semuanya ada di sisi server. Teknologi ketergantungan utama RPC adalah serialisasi, deserialisasi dan protokol transmisi. Java sesuai dengan serialisasi, deserialisasi dan transmisi objek dan transmisi data serial. Serialisasi dan deserialisasi RMI dimiliki oleh Java. Serialisasi dan deserialisasi di Hessian bersifat pribadi, protokol transmisi adalah HTTP, dan serialisasi dubbo dapat dipilih dalam banyak hal. Secara umum, protokol serialisasi Hessian digunakan, dan transmisinya adalah protokol TCP, yang menggunakan kerangka kerja NIO berkinerja tinggi Netty. Mengenai serialisasi, saya juga tahu beberapa hal, seperti Google Probuffer, JBoss Marshalling, Apache Thrift, dll. Saya menulis posting blog yang memperkenalkan Probuffer sebelumnya.
1. RMI (panggilan metode jarak jauh)
Alat panggilan metode jarak jauh yang dilengkapi dengan Java memiliki batasan tertentu. Bagaimanapun, itu adalah desain bahasa Java di awal. Kemudian, prinsip -prinsip banyak kerangka kerja didasarkan pada RMI. Penggunaan RMI adalah sebagai berikut:
Antarmuka eksternal
IService antarmuka publik memperluas jarak jauh {public string queryName (string no) melempar remoteException; } </span>Implementasi Layanan
impor java.rmi.remoteexception; impor java.rmi.server.unicastremoteObject; // Layanan Implementasi Layanan Kelas Publik Memperluas UnicAstremoteObject mengimplementasikan IService {/ ***/ private static final long serialversionuid = 682805210518738166L; / ** * @throws RemoteException */ Protected ServiceImpl () melempar RemoteException {super (); } / * (non-javadoc) * @see com.suning.ebuy.wd.web.iservice#queryname (java.lang.string) * / @override Public String QueryName (String no) melempar RemoteException {// implementasi spesifik dari metode Metode.out.println ("Hello); return string.ValueOf (System.CurrentTimeMillis ()); }}Klien RMI
impor java.rmi.remoteexception; impor java.rmi.registry.locateregistry; impor java.rmi.registry.registry; // server server publik server rmi {public static void main (string [] args) {// register manager registry registry = null; Coba {// Buat Registry Layanan = LocateRegistry.Createregistry (8088); } catch (remoteException e) {} coba {// Buat serviceImpl server server = layanan baru (); // ikat layanan dan beri nama registry.rebind ("vince", server); System.out.println ("Bind Server"); } catch (RemoteException e) {}}}Manajer Registrasi Layanan ditulis di server, dan tentu saja juga dapat diekstraksi sebagai layanan terpisah. Dalam beberapa kerangka kerja lainnya, Zookeeper sering digunakan sebagai peran manajemen pendaftaran.
2. Hessian (panggilan metode jarak jauh berdasarkan HTTP)
Berdasarkan transmisi protokol HTTP, kinerjanya tidak sempurna. Transfer penyeimbang dan kegagalan beban tergantung pada penyeimbang beban aplikasi. Penggunaan Hessian mirip dengan RMI. Perbedaannya adalah bahwa itu meremehkan peran registri. Melalui panggilan alamat yang ditampilkan, HessianProxyFactory menggunakan objek proxy berdasarkan alamat yang dikonfigurasi. Selain itu, Paket JAR Hessian juga diperkenalkan.
3. Dubbo (RPC Framework Berbasis TCP Open Source di Taobao)
Kerangka kerja RPC berkinerja tinggi berdasarkan NIO Framework Netty adalah open source oleh Alibaba. Prinsip keseluruhan adalah sebagai berikut:
Sebelum memahami Dubbo, Anda harus terlebih dahulu memiliki pemahaman mendalam tentang penjaga kebun binatang. Setelah memahami Zookeeper, Dubbo tidak akan memiliki rahasia.
Zookeeper adalah Pusat Pendaftaran Layanan Dubbo. Pusat pendaftaran berbasis database asli Dubbo tidak menggunakan Zookeeper. Zookeeper adalah kerangka kerja layanan terdistribusi. Ini adalah penyimpanan data untuk layanan direktori tipe pohon dan dapat mengelola data dalam kelompok. Ini dapat digunakan sebagai pusat pendaftaran untuk layanan Dubbo. Dubbo dapat melakukan penyebaran cluster dengan Zookeeper. Ketika penyedia memiliki waktu henti yang abnormal seperti pemadaman listrik atau di luar udara lainnya, Pusat Pendaftaran Zookeeper dapat secara otomatis menghapus informasi penyedia. Ketika penyedia restart, ia dapat secara otomatis mengembalikan data pendaftaran dan permintaan berlangganan.
Deskripsi terperinci Dubbo sangat terperinci dalam open source Taobao. Dalam banyak proyek produksi, Dubbo digunakan dalam banyak proyek produksi. Selama proses tersebut, saya juga menemukan banyak hal yang harus diperhatikan, terutama banyak konfigurasi, yang tidak diatur dengan benar, dan yang terbaik adalah menyesuaikan dan mengoptimalkannya berdasarkan dubbo sumber terbuka yang ada.