Condivisione della tecnologia

[2-1: Progettazione RPC]

2024-07-12

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

RPC

1. Nozioni di base

1.1 Definizione e caratteristiche

RPC, chiamata di procedura remota, chiamata di procedura remota, che definisce il comportamento di un programma su una macchina che richiama una subroutine su un'altra macchina
Caratteristiche:

  • Spostata l'implementazione remota in locale In effetti, non c'è differenza tra chiamate remote e chiamate locali.
  • Utilizzando la modalità cs, il client avvia una richiesta e il server la esegue dopo aver ricevuto i parametri della richiesta.
  • Proteggere la complessità sottostante delle chiamate tra processi e tra reti ci consente di concentrarci maggiormente sulla logica aziendale

1.2 Quadro di attuazione specifico

  1. dubbo (apache alibaba java)
  2. motan (Weibo)
  3. tar (interno a Tencent)
  4. grpc
  5. risparmio
  6. nuvola primaverile aperta

1.3 Scenari applicativi

Può essere utilizzato per la comunicazione tra reti

2. Punti tecnici chiave di RPC e una chiamata al processo rpc

2.1 Processo RPC

processi

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine

  1. Il client chiama l'interfaccia e va alla classe proxy, assembla la richiesta e la serializza, quindi codifica il protocollo e lo invia
  2. Il server riceve la richiesta, esegue l'analisi del protocollo e la deserializzazione per ottenere i parametri della richiesta.
  3. Il server chiama l'implementazione dell'interfaccia in base ai parametri della richiesta e quindi assembla la risposta
  4. La risposta viene restituita allo stesso modo

Come sono collegati i due moduli di rete?

Inserisci qui la descrizione dell'immagine

Il centro di registrazione è un luogo in cui vengono archiviati i dati ed è meglio fornire funzioni di monitoraggio.Il centro di registrazione è separato dal framework rpc
Centri di registrazione comuni: zookeeper, nacos, ecc

Altre caratteristiche

Inserisci qui la descrizione dell'immagine

  • Il percorso filtra i fornitori disponibili
  • Bilanciamento del carico: scegli quale provider utilizzare tra i provider disponibili
  • Limitazione del fusibile: controllo del flusso
  • elaborazione in rete
  • Elaborazione del protocollo

Vantaggi dell'RPC

  1. Semplifica la creazione di applicazioni distribuite, il disaccoppiamento dei servizi e l'espansione semplice
  2. RPC utilizza generalmente connessioni lunghe, il che elimina la necessità di stabilire una connessione per ogni comunicazione e riduce il sovraccarico della rete.
  3. RPC richiede un centro di registrazione in grado di rilevare e visualizzare dinamicamente le modifiche del servizio.
  4. Ricche funzioni di gestione del background, gestione unificata dei servizi di interfaccia, nessuna percezione per il chiamante, funzionamento unificato
  5. Protocollo semplificato, maggiore efficienza, elevata privacy e sicurezza
  6. Ha funzioni come bilanciamento del carico, interruttore automatico e limitazione di corrente.

2.2 Tecnologia di serializzazione

  • Qualsiasi framework di serializzazione: l'idea centrale è il designun protocollo di serializzazioneScrivere il tipo di oggetto, il tipo di attributo e il valore dell'attributo nel flusso di byte binario in un formato fisso per completare la serializzazione, quindi leggere il tipo di oggetto, il tipo di attributo e il valore dell'attributo uno per uno in base al formato fisso e ricreare un nuovo oggetto tramite queste informazioni per completare la deserializzazione.

Metodo di serializzazione

  • Serializzazione nativa JDK
  • Formato leggero per lo scambio di dati di testo: json/XML
    • Ha una buona leggibilità ed è comodo per la lettura e il debug. Il file di byte dopo la serializzazione con supporto multilingue è relativamente grande e relativamente inefficiente. Tuttavia, rispetto a XML, il flusso di byte dopo la serializzazione è ampiamente utilizzato nelle aziende. soprattutto per il front-end e terze parti forniscono API.
  • AssianoÈ un tipo dinamico, binario e supporta il framework Xu Lihua multilingue
    • Le prestazioni dell'Hessian sono molto più efficienti della serializzazione JDK e JSON. E anche il numero di byte generati è inferiore.Ottima compatibilità e stabilitàPertanto, Hessian è più adatto come protocollo di serializzazione per la comunicazione remota nel framework RPC.
  • protobufala
    • La libreria di sequenze open source lanciata da Google è un formato di archiviazione di dati strutturati leggero ed efficiente con supporto multilingue.
    • Velocità elevata, rapporto di compressione elevato, dimensioni ridotte. Il volume dopo la serializzazione è molto più piccolo di JSON e Hessian. Il formato del disco a colori del corso ha una buona espansione, aggiornamento e compatibilità e può essere compatibile con le versioni precedenti.

In che modo PRC sceglie un framework di serializzazione?

  • Fattori di selezione
    • Sicurezza: la prima considerazione è che se sono presenti vulnerabilità di sicurezza nella serializzazione, è probabile che i servizi online vengano invasi (la serializzazione nativa JDK presenta vulnerabilità
    • Compatibilità: la compatibilità del protocollo di serializzazione è molto buona dopo l'aggiornamento della versione, sia multipiattaforma, multilingue, ecc.
    • Versatilità: in grado di serializzare e deserializzare qualsiasi tipo. Il server non sarà improvvisamente in grado di chiamare il metodo dell'interfaccia del servizio dopo aver aggiunto un certo tipo di parametro.
    • Prestazioni ed efficienza: il processo di serializzazione e deserializzazione è un processo necessario per le chiamate RPC. Le prestazioni e l'efficienza sono destinate a essere direttamente correlate alle prestazioni e all'efficienza complessive del framework RPC.
    • Spazio in eccesso: la dimensione dei dati binari dopo la serializzazione. Minore è la dimensione dei dati in byte serializzati, minore è la quantità di dati trasmessi sulla rete e più veloce è la trasmissione dei dati. Ciò è direttamente correlato alle chiamate RPC tempo di risposta

Considerazioni

  1. Evita oggetti troppo complessi da costruire, con molti attributi e più livelli di nidificazione
  2. Evita oggetti troppo grandi: stringhe grandi, array molto grandi, ecc.
  3. Evitare di passare tipi come parametri non supportati dal framework di serializzazione
  4. Evitare che gli oggetti abbiano relazioni di ereditarietà complesse

2.3 Protocollo di comunicazione del livello applicativo-http

2.3.1 Concetti di base

La maggior parte degli RPC sviluppano http autonomamente e supportano anche http1.1

Inserisci qui la descrizione dell'immagine

Cos'è l'IO

IO è il processo di copia dei dati tra il computer interno e i dispositivi esterni.
Dopo che i dati di rete arrivano, vengono prima archiviati nell'area della cache del kernel del sistema operativo e attendono che l'applicazione li raccolga.

bordo attivato

Quando si utilizza la modalità edge trigger, quando si verifica un evento leggibile sul descrittore Socket monitorato, il server si riattiverà da epoll_wait solo una volta. Anche se il processo non chiama la funzione di lettura per leggere i dati dal kernel, si riattiverà comunque una volta. Pertanto, il nostro programma deve garantire che i dati nel buffer del kernel vengano letti tutti in una volta.

grilletto orizzontale

Quando si utilizza la modalità di trigger orizzontale, quando si verifica un evento leggibile sul Socket monitorato, il server si riattiva continuamente da epoll_wait finché i dati del buffer del kernel non vengono letti dalla funzione di lettura. Lo scopo è dirci che ci sono dati che devono essere Leggere. .

IO basato sugli eventi

Dopo aver avviato una richiesta di lettura, attendere la notifica dell'evento di lettura pronta prima di leggere i dati.

IO asincrono

Dopo aver avviato una richiesta di lettura, attendi che il sistema operativo ti avvisi al termine della lettura e trasferisci completamente la funzione al sistema operativo per l'implementazione.

2.3.2 Quali sono i modelli IO del sistema operativo?

Blocco sincrono IO
IO sincrono non bloccante
Multiplexing IO
IO guidato dal segnale
IO asincrono
Inserisci qui la descrizione dell'immagine

Blocco sincrono IO

La prima fase di lettura è bloccata, che è ciò che spesso chiamiamo IO di blocco. Cioè, se la prima fase di lettura è bloccata in attesa che la lettura sia pronta, lo chiamiamo IO di blocco.

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