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
dubbo (apache alibaba java)
motan (Weibo)
tar (interno a Tencent)
grpc
risparmio
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
Il client chiama l'interfaccia e va alla classe proxy, assembla la richiesta e la serializza, quindi codifica il protocollo e lo invia
Il server riceve la richiesta, esegue l'analisi del protocollo e la deserializzazione per ottenere i parametri della richiesta.
Il server chiama l'implementazione dell'interfaccia in base ai parametri della richiesta e quindi assembla la risposta
La risposta viene restituita allo stesso modo
Come sono collegati i due moduli di rete?
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
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
Semplifica la creazione di applicazioni distribuite, il disaccoppiamento dei servizi e l'espansione semplice
RPC utilizza generalmente connessioni lunghe, il che elimina la necessità di stabilire una connessione per ogni comunicazione e riduce il sovraccarico della rete.
RPC richiede un centro di registrazione in grado di rilevare e visualizzare dinamicamente le modifiche del servizio.
Ricche funzioni di gestione del background, gestione unificata dei servizi di interfaccia, nessuna percezione per il chiamante, funzionamento unificato
Protocollo semplificato, maggiore efficienza, elevata privacy e sicurezza
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 serializzazione,Scrivere 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
Evita oggetti troppo complessi da costruire, con molti attributi e più livelli di nidificazione
Evita oggetti troppo grandi: stringhe grandi, array molto grandi, ecc.
Evitare di passare tipi come parametri non supportati dal framework di serializzazione
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
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
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.