Berbagi teknologi

[2-1: desain RPC]

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Dasar-dasar

1.1 Definisi & Fitur

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

  1. dubbo (apache alibaba java)
  2. motan (Weibo)
  3. tar (internal untuk Tencent)
  4. grpc
  5. penghematan
  6. 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

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini

  1. Klien memanggil antarmuka dan pergi ke kelas proxy, menyusun permintaan dan membuat cerita bersambung, kemudian mengkodekan protokol dan mengirimkannya
  2. Server menerima permintaan, melakukan penguraian protokol dan deserialisasi untuk mendapatkan parameter permintaan.
  3. Server memanggil implementasi antarmuka berdasarkan parameter permintaan dan kemudian menyusun responsnya
  4. Responsnya dikembalikan dengan cara yang sama

Bagaimana kedua modul jaringan terhubung?

Masukkan deskripsi gambar di sini

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

Masukkan deskripsi gambar di sini

  • 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

  1. Mempermudah pembuatan aplikasi terdistribusi, memisahkan layanan, dan memperluasnya dengan mudah
  2. RPC umumnya menggunakan koneksi yang panjang, sehingga menghilangkan kebutuhan untuk membuat koneksi untuk setiap komunikasi dan mengurangi overhead jaringan.
  3. RPC memerlukan pusat registrasi yang secara dinamis dapat merasakan dan memvisualisasikan perubahan layanan.
  4. Fungsi manajemen latar belakang yang kaya, manajemen layanan antarmuka terpadu, tidak ada persepsi untuk penelepon, operasi terpadu
  5. Protokol yang disederhanakan, efisiensi lebih tinggi, privasi dan keamanan tinggi
  6. Ini memiliki fungsi seperti penyeimbang beban, pemutus sirkuit dan pembatas arus.

2.2 Teknologi serialisasi

  • Kerangka serialisasi apa pun: ide intinya adalah desainprotokol serialisasiTulis 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 baikOleh 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

  1. Hindari objek yang terlalu rumit untuk dibuat, memiliki banyak atribut, dan memiliki banyak tingkatan bersarang
  2. Hindari objek yang terlalu besar: string besar, array sangat besar, dll.
  3. Hindari meneruskan tipe sebagai parameter yang tidak didukung oleh kerangka serialisasi
  4. 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

Masukkan deskripsi gambar di sini

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
Masukkan deskripsi gambar di sini

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.

listenfd = socket();   // 打开一个网络通信套接字
bind(listenfd);        // 绑定
listen(listenfd);      // 监听
while(1) {
   
  connfd = accept(listenfd);  // 阻塞 等待建立连接
  int n = read(connfd, buf);  // 阻塞 读数据
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7