Chamada de procedimento remoto

Propaganda
Sistemas Distribuídos
Comunicação Remota
Gustavo Reis
[email protected]
1
- Comunicação Remota
 Comunicação entre processos está no coração de todo sistema distribuído.
 Não tem sentido estudar sistemas distribuídos sem examinar cuidadosamente os modos pelos
quais processos em máquinas diferentes podem trocar informações.
 A comunicação em sistemas distribuídos é sempre baseada em troca de mensagens de baixo
nível como a oferecida pela rede subjacente.
 Sistemas distribuídos modernos frequentemente consistem em milhares ou até milhões de
processos espalhados por uma rede cuja comunicação não é confiável, como a Internet.
 Existem três modelos de comunicação de ampla utilização:
 Chamada de procedimento remoto (Remote Procedure Call - RPC)
 Middleware orientado a mensagem (Message-Oriented Middleware - MOM)
 Fluxo de dados.
2
- Comunicação Remota
 Chamada de procedimento remoto
 Muitos sistemas são baseados em troca explícita de
mensagens entre processos.
 Contudo, os procedimentos send e receive não
escondem absolutamente nada da comunicação, o
que é importante para obter transparência de acesso
em sistemas distribuídos.
 Proposta diferente de manipular comunicação por
Birrell e Nelson (1984).
3
- Comunicação Remota
 Chamada de procedimento remoto
 A sugestão é permitir que programas chamassem
procedimentos localizados em outras máquinas.
 Quando um processo na máquina A chama um procedimento na
máquina B, o processo chamador A é suspenso, e a execução
do procedimento chamado ocorre em B.
 Informações podem ser transportadas do chamador para quem
foi chamado nos parâmetros e podem voltar no resultado do
procedimento (a semântica de uma chamada remota deve ser
idêntica à de uma chamada local: passa parâmetros e retorna
resultados).
4
- Comunicação Remota
 Chamada de procedimento remoto
 A sugestão é permitir que programas chamassem
procedimentos localizados em outras máquinas.
 Quando um processo na máquina A chama um procedimento na
máquina B, o processo chamador A é suspenso, e a execução
do procedimento chamado ocorre em B.
 Informações podem ser transportadas do chamador para quem
foi chamado nos parâmetros e podem voltar no resultado do
procedimento (a semântica de uma chamada remota deve ser
idêntica à de uma chamada local: passa parâmetros e retorna
resultados).
5
- Comunicação Remota
 Chamada de procedimento remoto
6
- Comunicação Remota
 Chamada de procedimento remoto
 O cliente que acessa um serviço inclui um
procedimento stub para cada procedimento da
interface de serviço.
 A função de um procedimento stub é semelhante à de
um método proxy. Ele se comporta como um
procedimento local para o cliente, mas em vez de
executar a chamada, ela empacota o identificador de
procedimento e os argumentos em uma mensagem de
requisição e a envia para o servidor por meio de seu
módulo de comunicação.
7
- Comunicação Remota
 Chamada de procedimento remoto
 Quando a mensagem de resposta chega, ela
desempacota os resultados.
 O processo servidor contém um despachante junto
com um procedimento stub de servidor e um
procedimento de serviço, para cada procedimento
na interface de serviço.
 O despachante seleciona um dos procedimentos stub
de servidor, de acordo com o identificador de
procedimento presente na mensagem de requisição.
8
- Comunicação Remota
 Chamada de procedimento remoto
 Um procedimento stub de servidor é como um
método esqueleto, pois ele desempacota os
argumentos presentes na mensagem de requisição,
chama o procedimento de serviço correspondente
e empacota os valores de retorno para a mensagem
de resposta.
 Os procedimentos de serviço implementam os
procedimentos da interface de serviço.
9
- Comunicação Remota
 RMI Java
 A RMI Java estende o modelo de objeto Java para dar suporte
para objetos distribuídos na linguagem Java.
 Em particular, ela permite que os objetos invoquem métodos em
objetos remotos usando a mesma sintaxe das invocações locais.
 Além disso, a verificação de tipo se aplica igualmente às
invocações remotas e às locais.
 Entretanto, um objeto que faz uma invocação remota sabe que
seu destino é remoto, pois precisa tratar exceções
RemoteException; e o implementador de um objeto remoto sabe
que é remoto porque precisa implementar a interface Remote.
10
- Comunicação Remota
 RMI Java
 Interface remota
11
- Comunicação Remota
 RMI Java
 Implementação
da Interface
12
- Comunicação Remota
 RMI Java
 Passagem de parâmetros e resultados
 Na RMI Java, supõe-se que os parâmetros de um método são
parâmetros de entrada e o resultado de um método é um único
parâmetro de saída.
 Qualquer objeto que seja serializável – isto é, que implemente a
interface Serializable – pode ser passado como argumento ou ser
resultado na RMI Java.
 Todos os tipos primitivos e objetos remotos são serializáveis.
 As classes de argumentos e valores de resultado são carregadas
por download no destino pelo sistem RMI, quando necessário.
13
- Comunicação Remota
 RMI Java
 Classe serializada
14
- Comunicação Remota
 RMI Java
 Download de classes
 A linguagem Java é projetada para permitir que as
classes sejam carregadas por download de uma
máquina virtual a outra.
 Isso é particularmente relevante para objetos
distribuídos que se comunicam por meio de
invocação remota.
 Se o destino ainda não possuir a classe de um
objeto passado por valor, seu código será carregado
por download automaticamente.
15
- Comunicação Remota
 RMI Java
 RMIregistry
 O RMIregistry é o vinculador da RMI Java.
 Uma instância de RMIregistry deve ser executada em cada
computador servidor que contenha objetos remotos.
 Ele mantém uma tabela mapeando nomes textuais no
estilo dos URLs, em referências para objetos remotos
contidos nesse computador.
 Ele é acessado por métodos da classe Naming, cujos
métodos recebem como argumento uma string no formato
como URL, na forma:
• //nomeComputador:porta/nomeObjeto
16
- Comunicação Remota
 RMI Java
 Classe Naming
17
- Comunicação Remota
 RMI Java
 Classe serializada
18
Download