RPC, panggilan prosedur jarak jauh, panggilan prosedur jarak jauh, yang mendefinisikan perilaku suatu program pada satu mesin yang memanggil subrutin di mesin lain Fitur:
Memindahkan implementasi jarak jauh ke lokal. Akibatnya, tidak ada perbedaan antara panggilan jarak jauh dan panggilan lokal.
Menggunakan mode cs, klien memulai permintaan dan server menjalankannya setelah menerima parameter permintaan.
Melindungi kompleksitas mendasar dari panggilan lintas proses dan lintas jaringan memungkinkan kami untuk lebih fokus pada logika bisnis
1.2 Kerangka implementasi khusus
dubbo (apache alibaba java)
motan (Weibo)
tar (internal untuk Tencent)
grpc
penghematan
awan musim semi terbuka
1.3 Skenario aplikasi
Dapat digunakan untuk komunikasi lintas jaringan
2. Poin teknis utama RPC & satu panggilan ke proses rpc
2.1 Proses RPC
proses
Klien memanggil antarmuka dan pergi ke kelas proxy, menyusun permintaan dan membuat cerita bersambung, kemudian mengkodekan protokol dan mengirimkannya
Server menerima permintaan, melakukan penguraian protokol dan deserialisasi untuk mendapatkan parameter permintaan.
Server memanggil implementasi antarmuka berdasarkan parameter permintaan dan kemudian menyusun responsnya
Responsnya dikembalikan dengan cara yang sama
Bagaimana kedua modul jaringan terhubung?
Pusat registrasi adalah tempat penyimpanan data, dan yang terbaik adalah menyediakan fungsi pemantauan.Pusat pendaftaran terpisah dari kerangka rpc Pusat pendaftaran umum: penjaga kebun binatang, nacos, dll
Fitur lainnya
Filter rute penyedia yang tersedia
Load Balancing: Pilih penyedia mana yang akan digunakan dari penyedia yang tersedia
Pembatas sekering: kontrol aliran
pemrosesan jaringan
Pemrosesan protokol
Keunggulan RPC
Mempermudah pembuatan aplikasi terdistribusi, memisahkan layanan, dan memperluasnya dengan mudah
RPC umumnya menggunakan koneksi yang panjang, sehingga menghilangkan kebutuhan untuk membuat koneksi untuk setiap komunikasi dan mengurangi overhead jaringan.
RPC memerlukan pusat registrasi yang secara dinamis dapat merasakan dan memvisualisasikan perubahan layanan.
Fungsi manajemen latar belakang yang kaya, manajemen layanan antarmuka terpadu, tidak ada persepsi untuk penelepon, operasi terpadu
Protokol yang disederhanakan, efisiensi lebih tinggi, privasi dan keamanan tinggi
Ini memiliki fungsi seperti penyeimbang beban, pemutus sirkuit dan pembatas arus.
2.2 Teknologi serialisasi
Kerangka serialisasi apa pun: ide intinya adalah desainprotokol serialisasi,Tulis tipe objek, tipe atribut, dan nilai atribut ke dalam aliran byte biner dalam format tetap untuk menyelesaikan serialisasi, lalu membacakan tipe objek, tipe atribut, dan nilai atribut satu per satu sesuai dengan format tetap, dan membuat ulang objek baru melalui informasi ini untuk menyelesaikan deserialisasi.
Metode serialisasi
Serialisasi asli JDK
Format pertukaran data teks ringan-json/XML
Ini memiliki keterbacaan yang baik dan nyaman untuk membaca dan debugging. File byte setelah serialisasi dengan dukungan multi-bahasa relatif besar dan relatif tidak efisien. Namun, dibandingkan dengan XML, aliran byte setelah serialisasi lebih kecil. khusus untuk Front-end dan pihak ketiga menyediakan API.
GoniIni adalah tipe dinamis, biner, dan mendukung kerangka kerja Xu Lihua lintas bahasa
Performa goni jauh lebih efisien dibandingkan serialisasi JDK dan JSON. Dan jumlah byte yang dihasilkan juga lebih kecil.Kompatibilitas dan stabilitas yang sangat baik,Oleh karena itu, Hessian lebih cocok sebagai protokol serialisasi untuk komunikasi jarak jauh dalam framework RPC.
protobuf
Pustaka urutan sumber terbuka yang diluncurkan oleh Google adalah format penyimpanan data terstruktur yang ringan dan efisien dengan dukungan multi-bahasa.
Kecepatan cepat, rasio kompresi tinggi, ukuran kecil. Volume setelah serialisasi jauh lebih kecil daripada JSON dan Hessian. Format disk warna kursus memiliki ekspansi, peningkatan dan kompatibilitas yang baik, dan dapat kompatibel ke belakang.
Bagaimana cara RRT memilih kerangka serialisasi?
Faktor seleksi
Keamanan: Pertimbangan pertama adalah jika ada kerentanan keamanan dalam serialisasi, maka layanan online kemungkinan besar akan diserang (serialisasi asli JDK memiliki kerentanan
Kompatibilitas: Apakah kompatibilitas protokol serialisasi sangat baik setelah peningkatan versi, baik lintas platform, lintas bahasa, dll.
Keserbagunaan: Mampu membuat serialisasi dan deserialisasi jenis apa pun. Server tidak akan tiba-tiba dapat memanggil metode antarmuka layanan setelah menambahkan jenis parameter tertentu.
Kinerja dan efisiensi: Proses serialisasi dan deserialisasi adalah proses yang diperlukan untuk panggilan RPC. Kinerja dan efisiensi terikat langsung dengan kinerja dan efisiensi kerangka RPC secara keseluruhan.
Space overhead: ukuran data biner setelah serialisasi. Semakin kecil ukuran data byte serial, semakin kecil jumlah data yang dikirimkan melalui jaringan, dan semakin cepat data dikirimkan waktu merespon
Pertimbangan
Hindari objek yang terlalu rumit untuk dibuat, memiliki banyak atribut, dan memiliki banyak tingkatan bersarang
Hindari objek yang terlalu besar: string besar, array sangat besar, dll.
Hindari meneruskan tipe sebagai parameter yang tidak didukung oleh kerangka serialisasi
Mencegah objek memiliki hubungan pewarisan yang kompleks
2.3 Protokol komunikasi lapisan aplikasi-http
2.3.1 Konsep dasar
Kebanyakan RPC mengembangkan http sendiri dan juga mendukung http1.1
Apa itu IO
IO adalah proses penyalinan data antara komputer internal dan perangkat eksternal. Setelah data jaringan tiba, pertama-tama disimpan di area cache kernel sistem operasi dan menunggu aplikasi mengumpulkannya.
tepi dipicu
Saat menggunakan mode pemicu tepi, ketika peristiwa yang dapat dibaca terjadi pada deskriptor Socket yang dipantau, server hanya akan bangun dari epoll_wait sekali. Bahkan jika proses tidak memanggil fungsi baca untuk membaca data dari kernel, proses tersebut tetap hanya akan bangun Oleh karena itu, program kita harus memastikan bahwa data di buffer kernel dibaca sekaligus.
pemicu horisontal
Saat menggunakan mode pemicu horizontal, ketika peristiwa yang dapat dibaca terjadi pada Socket yang dipantau, server terus-menerus bangun dari epoll_wait hingga data buffer kernel dibaca oleh fungsi baca membaca. .
IO yang didorong oleh peristiwa
Setelah memulai permintaan baca, tunggu notifikasi acara siap baca sebelum membaca data.
IO asinkron
Setelah memulai permintaan baca, tunggu sistem operasi memberi tahu Anda setelah pembacaan selesai, dan serahkan sepenuhnya fungsi tersebut ke sistem operasi untuk diimplementasikan.
2.3.2 Apa saja model IO dari sistem operasi?
IO pemblokiran sinkron IO non-pemblokiran sinkron multipleksing IO IO yang digerakkan oleh sinyal IO asinkron
IO pemblokiran sinkron
Pembacaan tahap pertama diblokir, yang sering kita sebut pemblokiran IO. Artinya, jika pembacaan tahap pertama diblokir menunggu pembacaan siap, kita menyebutnya pemblokiran IO.