Conceitos Fundamentais em Sistemas Distribuídos e Redes
Classificado em Computação
Escrito em em português com um tamanho de 5,67 KB
Transparência em Sistemas Distribuídos (SD)
Transparência, neste contexto, é um conceito que visa tornar menos perceptíveis alguns detalhes da implementação de um sistema distribuído. Sistemas Distribuídos (SD) devem prover transparência nos seguintes contextos:
- De Acesso: Oculta as diferenças na representação de dados e no modo de acesso a um recurso.
- De Localização: Oculta o lugar em que um recurso está localizado.
- De Migração: Oculta que um recurso pode ser movido para outra localização.
- De Realocação: Oculta que um recurso pode ser movido para outra localização enquanto em uso.
- De Replicação: Oculta que um recurso é replicado.
- De Concorrência: Oculta que um recurso pode ser compartilhado por múltiplos usuários concorrentes.
- De Falha: Oculta a falha e a recuperação de um recurso.
Stubs no RPC
Na codificação, o procedimento remoto do cliente chama o stub cliente como qualquer outro procedimento local. A implementação interna do stub cliente é responsável por iniciar o processo de transmissão para o stub servidor, empacotando a chamada em uma mensagem. Ao chegar, o stub servidor desempacota a mensagem e invoca localmente o procedimento, aguardando o retorno. Quando a chamada local retorna, o stub servidor é responsável por iniciar o processo de transmissão para o stub cliente, empacotando a resposta em uma mensagem. Ao chegar, a resposta é desempacotada pelo stub cliente, sendo retornada localmente para o procedimento que realizou a chamada remota.
Portmap
Portmap é um serviço executado nos nós da rede que oferecem outros serviços, como o ONC RPC.
Protocolo de Comunicação RPC
O RPC (Remote Procedure Call) é um protocolo IPC (Inter-Process Communication), um grupo de mecanismos que permite aos processos transferir informações entre si.
Marshalling e Unmarshalling
Marshalling é o processo de transformação da representação de memória de um objeto em um formato de dados compatível para armazenamento ou transmissão. É tipicamente usado quando dados precisam ser movimentados entre diferentes partes de um aplicativo de computador ou entre aplicativos. O processo de Unmarshalling é o correspondente inverso, que consiste em desempacotar os dados e informações. Tais processos são importantes pois mantêm a integridade e padronizam o sistema distribuído como um todo, organizando e sustentando a base de dados.
Vantagens e Desvantagens da IDL
A IDL (Interface Definition Language) é utilizada para descrever a interface dos componentes de software. Uma vantagem é sua versatilidade em interagir com o sistema. No entanto, essa interação com diferentes componentes, como o hardware, pode expor o sistema a vulnerabilidades, o que representa uma desvantagem.
RMI (Remote Method Invocation)
RMI (Remote Method Invocation) é uma interface de programação que permite a execução de chamadas remotas no estilo RPC em aplicações desenvolvidas em Java. É uma das abordagens da plataforma Java para fornecer as funcionalidades de uma plataforma de objetos distribuídos. Esse sistema de objetos distribuídos faz parte do núcleo básico do Java desde a versão JDK 1.1, com sua API especificada através do pacote java.rmi
e seus subpacotes. Através da arquitetura RMI, um objeto ativo em uma máquina virtual Java pode interagir com objetos de outras máquinas virtuais Java, independentemente da localização.
RMI Registry (rmiregistry)
O RMI Registry executa em cada máquina que hospeda o serviço remoto, por definição na porta 1099. Em uma máquina host, um programa servidor cria um serviço remoto, primeiramente criando o objeto que implementa o serviço. Em seguida, ele exporta esse objeto para o RMI. Quando o objeto é exportado, o RMI cria um serviço que aguarda as conexões do cliente. O servidor registra o objeto no RMI Registry com um nome público. No lado do cliente, o RMI Registry é acessado através da classe estática Naming
. Ela provê o método lookup()
, que o cliente usa para requisitar o registro. Esse método aceita a URL que especifica o nome do servidor e o nome do serviço desejado. O método retorna uma referência remota para o objeto do serviço.
Sockets de Berkeley
socket()
- Cria um novo soquete de um determinado tipo, identificado por um número inteiro, e aloca recursos do sistema para ele.
bind()
- É tipicamente utilizado no lado do servidor e associa um soquete a uma estrutura de endereços de soquete, ou seja, um número de porta local especificado juntamente com o endereço IP.
listen()
- É usado no lado do servidor e faz com que um soquete TCP vinculado entre no estado de escuta.
accept()
- É usado no lado do servidor. Ele aceita uma tentativa de conexão recebida para criar uma nova conexão TCP a partir do cliente remoto e cria um novo soquete associado com o par de endereços do soquete dessa conexão.
connect()
- É utilizado no lado do cliente e atribui um número de porta local livre a um soquete. No caso de um soquete TCP, ele inicia uma tentativa de estabelecer uma nova conexão TCP.
send()
erecv()
- São usados para enviar e receber dados de um soquete remoto.