
O que é um sistema distribuído?
Extraindo a definição do livro "Distributed Systems - Principles and Paradigms", de Andrew Tanenbaum, temos:
Esta definição captura o espírito com o qual o RMI foi pensado: chamadas cujas características remotas são abstraídas para o usuário, se comportando como se o processamento tivesse ocorrido localmente.
Quais as principais diferenças entre RPC e RMI?
Indo direto ao ponto, o RPC funciona sob o paradigma funcional, enquanto o RMI opera sob o paradigma de orientação a objetos. Isto é, o RPC trabalha com funções, enquanto o RMI vive de métodos pertencentes a objetos. Além disso, o RPC é baseado em C (herdando sua estruturação básica), enquanto o RMI foi desenvolvido para a linguagem Java.
Quais as principais semelhanças entre RPC e RMI?
Ambos trabalham com uma interface (componentes de baixo nível são inferiores ao programador) e as chamadas remotas de ambos os modelos possuem sintaxe semelhante a chamadas locais.
Qual a semântica nativa ao RMI e o que ela significa?
A semântica nativa ao RMI é a de "no-máximo-uma vez". Isto significa que, quando uma invocação remota é realizada, caso ocorra um erro (exceção), há garantia de que a invocação, no lado do servidor, tenha ocorrido ou uma vez ou nenhuma vez. Isto se deve ao fato de ser bastante difícil executar uma garantia do tipo "exatamente-uma vez", sendo necessário construir nosso próprio sistema em cima do RMI caso queiramos uma semântica deste tipo.
Por que uma mesma invocação remota pode demorar mais para diferentes arrays do mesmo tipo?
Ao realizarmos a invocação, uma cópia dos parâmetros (objetos) é enviada para o servidor. Portanto, arrays de tamanhos diferentes precisam trafegar pela rede, um processo muito mais lento do que simples acessos locais à memória. Além disso, podemos também apontar que, no servidor, o tempo de executar a invocação poderá ser dependente do tamanho do array de acordo com a complexidade dos algoritmos envolvidos.