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() e recv()
São usados para enviar e receber dados de um soquete remoto.

Entradas relacionadas: