Differenza tra RPC e RMI

RPC vs RMI
 

La differenza fondamentale tra RPC e RMI è che RPC è un meccanismo che consente di chiamare una procedura su un computer remoto mentre RMI è l'implementazione di RPC in java. RPC è neutrale rispetto alla lingua, ma supporta solo i tipi di dati primitivi da passare. D'altra parte, RMI è limitato a Java ma consente il passaggio di oggetti. RPC segue i costrutti linguistici procedurali tradizionali mentre RMI supporta la progettazione orientata agli oggetti.

Cos'è RPC?

RPC, che sta per Remote Procedure Call, è un tipo di comunicazione tra processi. Ciò consente di chiamare una funzione in un altro processo in esecuzione sul computer locale o su un computer remoto. Questo concetto è emerso molto tempo fa nel 1980, ma la prima implementazione famosa è stata vista in Unix.

RPC coinvolge diversi passaggi. Il client esegue una chiamata di procedura sul computer locale come al solito. Il modulo chiamato client stub raccoglie gli argomenti e crea un messaggio e passa al sistema operativo, il sistema operativo esegue una chiamata di sistema e invia questo messaggio al computer remoto. Il sistema operativo nel server raccoglie il messaggio e passa al modulo sul server chiamato stub del server. Quindi lo stub del server chiama la procedura sul server. Infine, i risultati vengono inviati al cliente.

Il vantaggio dell'utilizzo di RPC è che è indipendente dai dettagli della rete. Il programmatore deve solo specificare in modo astratto mentre il sistema operativo si occuperà dei dettagli della rete interna. Questo rende la programmazione più semplice e consente a RPC di funzionare su qualsiasi rete, nonostante le differenze fisiche e di protocollo. Le implementazioni RPC sono presenti in tutti i sistemi operativi tradizionali come Unix, Linux, Windows e OS X. RPC è generalmente neutrale rispetto alla lingua quindi limita i tipi di dati a quelli più primitivi poiché devono essere comuni a tutte le lingue. L'approccio in RPC non è orientato agli oggetti, ma è un meccanismo procedurale tradizionale come in C.

Cos'è RMI?

RMI, che sta per Remote Method Invocation, è un'API (Application Programming Interface) che implementa RPC in java per supportare la natura orientata agli oggetti. Ciò consente di chiamare i metodi Java su un'altra macchina Java Virtual che risiede sullo stesso computer o su uno remoto. La limitazione di RMI è che solo i metodi Java possono essere invocati, ma questo ha il vantaggio che gli oggetti possono essere passati come argomenti e valori di ritorno. Quando le prestazioni sono considerate RMI è più lento di RPC a causa del coinvolgimento di bytecode sulla macchina virtuale Java, ma RMI è molto programmabile, ed è molto facile da usare.

RMI utilizza meccanismi di sicurezza integrati in Java e fornisce anche un factory socket che consente l'utilizzo di protocolli di trasporto personalizzati non TCP. Inoltre, RMI fornisce metodi per bypassare i firewall. I passaggi che si verificano in RMI sono simili a RPC. L'implementazione di RMI si occupa dei dettagli della rete interna in cui il programmatore non deve preoccuparsi di loro.

Qual è la differenza tra RPC e RMI?

• RPC è neutrale rispetto alla lingua mentre RMI è limitato a Java.

• RPC è procedurale come in C, ma RMI è orientato agli oggetti.

• RPC supporta solo tipi di dati primitivi mentre RMI consente di passare oggetti come argomenti e valori di ritorno. Quando si utilizza RPC, il programmatore deve suddividere qualsiasi oggetto composto in tipi di dati primitivi.

• RMI è facile da programmare su RPC.

• RMI è più lento di RPC poiché RMI implica l'esecuzione di bytecode java.

• RMI consente l'utilizzo di schemi di progettazione a causa della natura orientata agli oggetti mentre RPC non ha questa capacità.

Sommario:

RPC vs RMI

RPC è un meccanismo linguistico neutro che consente di chiamare una procedura su un computer remoto. Tuttavia, la funzionalità neutra della lingua limita i tipi di dati che vengono passati come argomenti e restituiscono valori ai tipi primitivi. RMI è l'implementazione di RPC in Java e supporta anche il passaggio degli oggetti, semplificando la vita del programmatore. Il vantaggio di RMI è il supporto del design orientato agli oggetti, ma la limitazione a Java è uno svantaggio.

Immagini per gentile concessione:

  1. RPC asincrono sincrono contro asincrono da CAPS entreprise (CC BY-SA 3.0)