Sistemas - Distribuidos - Ifsc
Sistemas - Distribuidos - Ifsc
Ciência da Computação
Robson Costa
([Link]@[Link])
Sumário
Histórico
●
1945 ~ 1985:
●
Máquinas grandes e caras que operavam de forma isolada (stand-alone)
por falta de uma forma confiável de interligá-las;
●
1985 ~ :
●
Desenvolvimento dos microprocessadores + invenção das redes locais
(LAN – Local Area Networks) → Sistemas Distribuídos;
●
Problemática:
●
SOFTWARE;
Fundamentos de
Sistemas Distribuídos
Fundamentos de
Sistemas Distribuídos
Conceitos Básicos
●
Um Sistema Distribuído é o resultado da integração de sistemas
computacionais autônomos combinados de forma a atingir um objetivo
comum;
●
Interligados através de redes de comunicação, os computadores se
comunicam e coordenam suas ações por meio de mensagens;
●
Uma coleção de computadores independentes que parecem para os
usuários como um único computador [Coulouris2001];
●
Sistemas formados por nós independentes que não compartilham memória
nem relógio;
●
Hardware: 2 ou + computadores;
●
Controle: mecanismos de controle para administrar os recursos e
coordenar as atividades;
Fundamentos de
Sistemas Distribuídos
Vantagens dos SD x SC
Característica Descrição
Características Principais
●
Várias questões também encontradas em qualquer sistema são
exacerbadas em SDs;
●
Heterogeneidade;
●
Openness;
●
Escalabilidade;
●
Tolerância a Falhas;
●
Controle de Concorrência;
●
Segurança;
●
Transparência de Distribuição;
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Heterogeneidade:
●
de hardware;
●
de software (sistemas operacionais e linguagens);
●
de tipos de redes;
●
Estas questões podem ser ocultadas do programador através do uso de
middlewares (ex.: CORBA – Common Object Request Broker Architecture);
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Openness (conformidade a sistemas abertos):
●
Suas interfaces são públicas e padronizadas;
●
Permite que o sistema seja compreendido e reimplementado de várias
formas;
●
Conformidade a interfaces nesses sistemas precisa ser
cuidadosamente testada;
●
Podem ser construídos a partir de hardware heterogêneo;
●
Exemplo:
●
RFCs Internet ([Link])
●
Especificações CORBA ([Link])
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Escalabilidade:
●
Um sistema é escalável se ele permanece efetivo mesmo quando há um
aumento no número de recursos e usuários;
●
Um sistema e seu software não deveriam mudar quando a sua escala
(seu “tamanho”) cresce;
●
Entretanto, esta é uma característica difícil de ser alcançada;
Conceito Exemplo
Componentes
Um único servidor de e-mail para todos os usuários.
Centralizados
Tabelas Centralizadas Uma única lista telefônica online.
Algoritmos Fazer o controle de acesso ao meio com base em um ponto
Centralizados único de decisão.
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Escalabilidade:
●
Um sistema é escalável se atende satisfatoriamente uma das duas
dimensões identificadas por [Neuman94]:
●
Um sistema é escalável com respeito ao seu tamanho significando que
se pode adicionar mais recursos ou usuários ao sistema.
●
Um sistema é dito geograficamente escalável se usuários e recursos
podem estar dispostos geograficamente distantes um dos outros.
●
Infelizmente um sistema que é escalável em pelo menos uma destas
dimensões pode perder desempenho;
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Escalabilidade:
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Tolerância a Falhas:
●
Prevenir para que falhas não afetem outros componentes do sistema;
●
Confiabilidade:
●
Replicar funções;
●
Retransmissão de mensagens;
●
Problemática 1:
●
+ cópias, + disponibilidade;
●
+ inconsistência dos dados, = torna-se difícil manter o estado global;
●
Problemática 2:
●
Queda do desempenho
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Segurança:
●
Essa questão é problemática em sistemas distribuídos devido à facilidade
de compartilhamento de recursos;
●
Exemplo: dados médios e bancários na Internet,
●
Segurança costuma ser subdividida em 3 partes:
●
Confidencialidade
●
Proteção contra acesso não autorizado;
●
Integridade
●
Proteção contra alteração não autorizada;
●
Disponibilidade
●
Proteção contra interferência no acesso ao recurso;
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Segurança:
●
É usual, encontrar entre as propriedades de segurança mais 2
características:
●
Autenticidade
●
Garante que os usuários e suas informações são autênticas segundo
as políticas do sistema;
●
Não-Repúdio
●
Impede que usuários neguem a sua participação em operações;
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Controle de Concorrência:
●
Característica intrínseca: compartilhamento de recursos
●
Recurso pode ser hardware, software, abstração de um sistema
operacional, etc…;
●
Acesso simultâneo pode provocar inconsistências no sistema;
●
Soluções de sincronização baseadas em memória compartilhada muitas
vezes não podem ser utilizadas (ex.: semáforos);
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Transparência de Distribuição:
●
Ocultar do usuário e programador da aplicação a separação de
componentes em um sistema distribuído, de forma que o sistema seja
percebido como um todo, em vez de uma coleção de componentes;
●
ANSA (Advanced Networked Systems Architecture) e RM-ODP
(Reference Model of Open Distributed Processing) reconhecem 8 tipos de
transparências:
●
de acesso;
●
de localização;
●
de concorrência;
●
de replicação;
●
de falhas;
●
de migração (mobilidade);
●
de desempenho;
●
de escalabilidade;
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Transparência de Acesso:
●
Oculta diferenças de representação de dados e de como um recurso é
acessado;
●
Transparência de Localização:
●
Permitir que os recursos sejam acessados sem o conhecimento de suas
localizações;
●
Transparência de Concorrência:
●
Oculta que um recurso pode ser compartilhado por várias entidades
concorrentes. O compartilhamento de recursos deve ocorrer sem
interferência entre eles;
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Transparência de Replicação:
●
Permite que múltiplas réplicas de recursos sejam utilizadas para
aumentar o desempenho e a confiabilidade sem o conhecimento de suas
demais réplicas;
●
Transparência de Falhas:
●
Oculta a falha e a recuperação de um recurso; usuários e programas de
aplicações devem completar suas ações apesar de falhas de hardware ou
de componentes de software;
●
Transparência de Migração (Mobilidade):
●
Oculta a movimentação de recursos para diferentes localizações, sem
afetar a operação de usuários ou programas;
Fundamentos de
Sistemas Distribuídos
Características Principais
●
Transparência de Desempenho:
●
Oculta a inclusão de novos recursos computacionais inseridos no sistema
com o objetivo de suprir uma nova demanda;
●
Transparência de Escalabilidade:
●
Permite que o sistema e aplicações expandam em escala sem alterar a
estrutura do sistema ou dos algoritmos da aplicação;
●
Alguns autores consideram as transparências de acesso e localização
como as mais importantes, resultando na transparência de rede;
●
Em algumas áreas de aplicação, transparências são difíceis de se
conseguir ou até mesmo indesejáveis;
●
ex.: sistemas de hard real-time;
Fundamentos de
Sistemas Distribuídos
●
Sistemas na Internet:
●
MMOG (Massively Multiplayer Online Games);
●
Home banking;
●
Trabalho cooperativo (CSCW – Computer Supported Cooperative Work);
●
Sistemas de controle e monitoramento:
●
Sistemas embarcados utilizados para o monitoramento de residências,
empresas, plantações, florestas, etc;
Fundamentos de
Sistemas Distribuídos
Entretenimento Comunicação
Fundamentos de
Sistemas Distribuídos
Aplicações Aplicações
Módulo Processador e
S.O. é a principal camada de software. Interface de Rede
Ele gerencia todos os recursos básicos
no sistema e fornece os serviços Kernel restrito ao gerenciamento de
essenciais. recursos básicos.
Suporte para programação distribuída
(linguagens, RPC e suporte para
comunicação em grupo)
Fundamentos de
Sistemas Distribuídos
Distributed OS
Middleware-
Item Network OS
Multiproc. Multicomp. based DS
Mesmo SO em todos os
Sim Sim Não Não
nodos
Número de cópias do SO 1 N N N
Memória Modelo
Bases para comunicação Mensagens Mensagens
compartilhada específico
Global,
Gestão de recursos Centralizado Por nodo Por nodo
distribuído
Escalabilidade Não Moderado Sim Variável
Opennes Fechado Fechado Aberto Aberto
Fundamentos de
Sistemas Distribuídos
Rede
Processo Processo
Middleware
Sistema Sistema
Operacional Operacional
(ex. Linux) (ex. Windows)
Fundamentos de
Sistemas Distribuídos
mensagens
Fundamentos de
Sistemas Distribuídos
Aplicação Aplicação
interface Apresentação Apresentação
Sessão Sessão
Transporte Transporte
Rede Rede
Enlace Enlace
Físico Físico
●
Quando o processo A deseja se comunicar com o processo B, ele primeiro
constrói uma mensagem em seu próprio espaço de endereçamento, depois
este processo executa uma chamada de sistema, que faz com que o
sistema operacional busque a mensagem e a envie para o processo B
através da rede de comunicação;
Fundamentos de
Sistemas Distribuídos
Comunicação Cliente/Servidor
●
Ideia:
●
Estruturar o sistema operacional como um grupo de processos cooperados
denominados servidores, que oferecem serviços à processos usuários,
denominados clientes;
●
Modelo Cliente/Servidor:
●
Baseado em um protocolo simples, sem conexão, do tipo
requisição/resposta;
Requisição
Cliente Servidor
Resposta
Kernel Kernel
Rede
Fundamentos de
Sistemas Distribuídos
Comunicação Cliente/Servidor
●
Vantagens:
●
Simplicidade: sem conexão;
●
Eficiência: pilha de protocolo é bem menor (rede local);
Endereçamento
●
Endereçamento direto:
●
Endereçamento que utiliza os endereços da rede para identificar processos;
●
Ex.: má[Link];
Endereçamento
●
Endereçamento de processo por Broadcast:
Cliente Servidor
3 1: Broadcast
C S 2: Aqui estou
4 3: Requisição
4: Resposta
1 2
●
Endereçamento via Servidor de Nomes: Servidor de
1 Nomes
3
S C NS
1: Lookup 2
2: Resposta do NS 4
3: Requisição
4: Resposta
Fundamentos de
Sistemas Distribuídos
Endereçamento
●
Resumo:
●
Colocar máquina.número no código do cliente não é um processo
transparente;
●
Deixar que o processo escolha endereços de maneira aleatória; localizá-los
por broadcast gera uma carga extra;
●
Colocar nomes de servidores em ASCII; procurá-los em tempo de
processamento resulta em um componente centralizado (servidor de
nomes);
Fundamentos de
Sistemas Distribuídos
Bloqueante X Não-bloqueante
●
Bloqueantes:
●
Processo chama SEND (destino, buffer);
●
Processo que está enviando fica bloqueado!
Cliente bloqueado
Cliente rodando Cliente rodando
Bloqueante X Não-bloqueante
●
Não-bloqueantes:
●
SEND devolve o controle imediatamente;
●
Vantagem
●
Processo que envia a mensagem pode continuar processando em
paralelo com a transmissão da mensagem, resultando assim em ganho
de desempenho;
●
Desvantagem
●
Transmissor não pode modificar o buffer até que a mensagem tenha sido
enviada;
●
Transmissor não tem ideia de quando a transmissão será completada;
Fundamentos de
Sistemas Distribuídos
Bloqueante X Não-bloqueante
●
Solução:
●
Cópia da mensagem para um buffer interno do kernel;
Cliente
bloqueado
Interrupção Retorno
Mensagem
Mensagem sendo
copiada para
o buffer do enviada
kernel
Fundamentos de
Sistemas Distribuídos
Bloqueante X Não-bloqueante
●
Resumo:
●
Envio bloqueante (processador fica ocioso durante a transmissão da
mensagem);
●
Envio não-bloqueante com cópia (processador gasta tempo para fazer uma
cópia extra);
●
Temporização (timeout):
●
Alguns sistemas permitem que o transmissor especifique um intervalo de
tempo durante o qual ele aguardará pela resposta;
●
Caso não chegue nenhuma resposta neste intervalo, um código de erro é
retornado;
Fundamentos de
Sistemas Distribuídos
C A S
Kernel
Fundamentos de
Sistemas Distribuídos
Cliente Servidor
Endereço
C S referente a
uma caixa
Kernel A postal
●
Caixa postal (mailbox) são finitas!
●
O kernel sabe o que fazer com a mensagem e onde guardá-la;
●
Outra opção:
●
Não deixar que um processo envie uma mensagem se não houver lugar
para armazená-la no destino. Para isso, o transmissor deve ficar bloqueado
até receber um sinal confirmando o recebimento da mensagem;
Fundamentos de
Sistemas Distribuídos
●
Primitivas não-bloqueantes (assíncronas):
●
O send retorna o controle imediatamente, antes da mensagem ser
realmente enviada;
●
O receive passa para o kernel o ponteiro para o buffer e retorna
imediatamente, antes de receber a mensagem;
●
Em algumas abordagens, o receive não-bloqueante é aquele que só recebe
quando já existem mensagens e fica bloqueado até completar a recepção;
Fundamentos de
Sistemas Distribuídos
Primitivas Bloqueantes
●
O processo fica bloqueado durante a transferência da mensagem;
●
Melhor opção para o envio de mensagens em condições normais;
Fundamentos de
Sistemas Distribuídos
Primitivas Não-Bloqueantes
●
Primitivas não-bloqueantes com cópia
●
O kernel copia a mensagem para um buffer interno e então libera o
processo para continuar;
●
Primitivas não-bloqueantes com interrupção
●
Interrompe o processo que enviou a mensagem quando o buffer estiver
livre para reutilização;
Fundamentos de
Sistemas Distribuídos
Confiabilidade
●
Três diferentes alternativas podem ser utilizadas:
●
Assumir que as primitivas não são confiáveis, alterando a semântica do
send;
●
O sistema não garante que as mensagens são enviadas;
●
O usuário fica responsável por implementar comunicação confiável;
●
Primitivas confiáveis com mecanismos de confirmação do tipo:
●
Request – Ack – Reply – Ack
●
Primitivas confiáveis com mecanismos de confirmação do tipo:
●
Request – Reply – Ack
●
Combinações entre os mecanismos;
Fundamentos de
Sistemas Distribuídos
Confiabilidade
●
Request – Reply – Ack:
●
O reply serve como um Ack na comunicação;
●
O cliente fica bloqueado até a recepção da mensagem de reply;
●
Se esta demorar, o cliente reenvia a requisição;
●
Em alguns kernels, não é necessária a confirmação com Ack;
Fundamentos de
Sistemas Distribuídos
Confiabilidade
●
Request – Ack – Reply – Ack:
●
Somente quando o Ack é recebido, o processo é liberado;
●
A confirmação é feita entre kernels (transparente ao cliente e ao servidor);
●
Um request/reply com este mecanismo necessita de 4 mensagens;
Fundamentos de
Sistemas Distribuídos
Confiabilidade
●
Outras questões:
●
As redes têm uma tamanho máximo de pacote, mensagens maiores devem
ser quebradas;
●
As confirmações podem ocorrer por pacote ou por mensagem, dependendo
da taxa de erros da rede;
Fundamentos de
Sistemas Distribuídos
Confiabilidade
●
Exemplos de Protocolos:
●
Pacotes normalmente utilizados:
Fundamentos de
Sistemas Distribuídos
Confiabilidade
●
Exemplos de Protocolos:
●
Pacotes normalmente utilizados:
Fundamentos de
Sistemas Distribuídos
Troca de Mensagens
●
Envio de dados e controle pela rede para um ou mais participantes;
●
Forma mais primitiva e comum, próxima à rede;
●
Mensagem é uma estrutura de dados;
●
Primitivas básicas são utilizadas aos pares:
●
Envio:
●
send(msg) ou send(destino, msg)
●
Recepção:
●
recv(&msg) ou recv(origem, &msg)
●
Identificação de destino
●
Processo, IP, porta;
Fundamentos de
Sistemas Distribuídos
Troca de Mensagens
●
Serviço de envio:
●
Processo A solicita o envio de uma mensagem ao processo B;
●
Processo B solicita o recebimento das mensagens de A, ou um
procedimento em B (ex.: callback) é executado quando uma mensagem
é recebida;
Fundamentos de
Sistemas Distribuídos
Troca de Mensagens
●
Transmissão síncrona X assíncrona:
●
Quando o remetente é desbloqueado?
●
Após a mensagem ter sido processada pelo receptor;
●
Após a mensagem ter sido entregue ao receptor;
●
Após a mensagem ter chegado ao nó receptor;
●
Após a mensagem ter partido do nó transmissor;
●
Após a mensagem ter sido copiada para os buffers do nó transmissor
imediatamente;
Fundamentos de
Sistemas Distribuídos
Troca de Mensagens
●
Mecanismos de troca de mensagens:
●
Unicast
●
A comunicação é realizada de 1 nó origem para 1 nó destino;
Fundamentos de
Sistemas Distribuídos
Troca de Mensagens
●
Mecanismos de troca de mensagens:
●
Broadcast
●
A comunicação é realizada de 1 nó origem para todos os nós receptores
de uma mesma rede;
Fundamentos de
Sistemas Distribuídos
Troca de Mensagens
●
Mecanismos de troca de mensagens:
●
Multicast
●
A comunicação é realizada de 1 nó origem para um grupo específico de
nós receptores;
Fundamentos de
Sistemas Distribuídos
Troca de Mensagens
●
Mecanismos de troca de mensagens:
●
Anycast
●
A comunicação é realizada de 1 nó origem para o nó destino mais
próximo ou melhor definido pelo roteador da rede e que pertença à um
grupo pré-definidos, similarmente ao multicast;
Comunicação entre Processos
Processos e Threads
●
Processo:
●
Um conjunto de recursos alocados por uma tarefa para que a mesma possa
ser executada;
●
Estes recursos podem ser: memória, arquivos, conexões, etc...
●
Um processo pode conter uma ou mais tarefas;
Comunicação entre Processos
Processos e Threads
●
Processo:
●
Durante a operação do S.O., diversos processos podem ser criados e
destruídos através de chamadas de sistemas (ex.: fork no Unix);
Comunicação entre Processos
Processos e Threads
●
Threads:
●
Um conjunto de instruções para atender uma finalidade específica;
●
São as entidades escalonadas pelo processador;
●
User threads: tarefas dos processo de usuário;
●
Kernel threads: tarefas do kernel;
Comunicação entre Processos
Processos e Threads
●
Comunicação:
●
Threads associadas ao mesmo processo podem trocar informações
facilmente, pois compartilham a mesma área de memória;
●
Porém, isto não é possível entre tarefas associadas a processos distintos;
●
Para solucionar isto o kernel deve prover chamadas de sistemas que
permitam a comunicação entre processos (IPC – Inter-Process
Communication);
●
Duas abordagens:
●
Memória compartilhada:
●
Uma região da memória é compartilhada entre os processo;
●
Troca de mensagens:
●
Realizada a troca de mensagens entre os processos;
Comunicação entre Processos
Client Server
Stub Stub
Compiler
Comunicação entre Processos
Send Receive
Ca
ll Marshalling Unmarshalling ll
Ca
Network
Comunicação entre Processos
●
Os valores são transmitidos no formato do emissor juntamente com a
indicação do formato utilizado, devendo ser convertido pelo receptor;
Comunicação entre Processos
●
Marshalling é o processo de converter uma sequência de estrutura de
dados no formato adequado para a transmissão;
●
Unmarshalling consiste da geração de valores primitivos de sua
representação externa e a reconstrução das estruturas de dados
correspondentes;
Comunicação entre Processos
●
Mecanismos de tratamento de exceções
●
RPCs devem estar habilitadas para reportar erros;
●
Requer um mecanismo de tratamento de exceções
●
Exceções são levantadas;
●
Procedimentos para o tratamento das exceções;
●
Pode ser definido como parte da linguagem de interface;
●
O cliente não é capaz de localizar o servidor
●
Servidor está fora do ar ou evoluiu (nova versão da interface)?
●
Mecanismo que faz com que o erro vire um exceção;
Comunicação entre Processos
●
Em Java RMI e CORBA, chamadas remotas de métodos utilizam a
semântica at-most-once;
●
Especificações CORBA permitem ainda a semântica maybe para métodos
on-way (sem resposta);
Comunicação entre Processos
●
Indisponibilidade do Cliente
●
Pode resultar em processamento orfão:
●
Gasta o tempo do processador, pode bloquear arquivos ou ocupar
recursos escassos;
●
Solução: Novo boot do cliente e semânticas de confiabilidade;
Comunicação entre Processos
1 ACK1 1
2 ACK2 2 ACK012
Comunicação entre Processos
Caminho Crítico
Stub
Preencher campos do cabeçalho. Inicializar os parâmetros na pilha
Interromper o Kernel Deserializar os parâmetros
Troca do contexto (kernel); Troca do contexto (stub)
Cópia da mensagem (kernel); Cópia da mensagem (stub)
Kernel
Kernel
colocação no cabeçalho; Decidir qual o stub a ser usado
Inicializar a interface de rede; Verificar a validade do cliente
Inicializar o temporizador. Interrupção do processo
Comunicação em Grupo
Host X Host Y
C
E F
Object B
A
A
D
Remote Invocation
Processo Local Invocation
Comunicação em Grupo
Middleware
●
A utilização de middlewares agiliza o processo de implementação de
aplicações distribuídas;
●
Ex.: CORBA (Common Object Request Broker Architecture) e JavaRMI;
Aplicações e Serviços
RMI e RPC
marshaling de parâmetros
middleware
Protocolo request-reply
UDP e TCP
Comunicação entre Processos
Comunicação de Grupo
●
Assumindo que Π=( P 1 , P 2 ,... , P n ) forma um sistema distribuído que interage
por troca de mensagens utilizando comunicação em grupo;
●
As restrições ao modelo são impostas pelo tipo de sincronia (síncrono ou
assíncrono), premissas de faltas, etc…
●
Suporte de comunicação de grupo implementa garantias de confiabilidade e
de ordenação durante as comunicações de grupo;
●
Mensagens recebidas na rede a nível do suporte de grupo somente são
consideradas aceitas e passadas à aplicação quando satisfazem as
propriedades do protocolo:
●
Liberação ou engajamento de mensagens (delivery, commit);
Comunicação entre Processos
Comunicação de Grupo
●
O modelo de comunicação multicast permite que um emissor envie uma
mensagem a um conjunto de máquinas na forma de multicast group;
●
O membro do grupo multicast faz a interface receber pacotes IP envidados
a este grupo;
●
É um grupo aberto;
●
O emissor não sabe quem são os receptores e qual é a dimensão do grupo;
●
O membership de um multicast group é dinâmico;
●
A nível de aplicação o IP multicast é disponível via datagramas UDP;
●
Um programa de aplicação envia em multicast datagramas UDP com
endereços IP multicast e números de portas normais;
Comunicação entre Processos
Comunicação de Grupo
●
Baseado no protocolo IGMP (Internet Group Management Protocol);
●
Pacotes IP com endereço multicast podem ser difundidos em redes locais ou
na Internet;
●
Em redes locais é mais fácil a difusão que usa as características da
Ethernet, por exemplo;
●
Na Internet faz uso de roteadores de multicast, através do IGMP;
●
Pacotes IP enviados a outros roteadores sobre outras redes
●
A limitação o processo de difusão (distância de propagação) é realizado
através do campo TTL (Time To Live);
Comunicação entre Processos
Comunicação de Grupo
●
O endereçamento multicast utiliza a antiga classe D
●
[Link] a [Link]
●
Endereços reservados pela IANA (Internet Assigned Numbers Authority)
●
[Link] a [Link] → locais
●
[Link] a [Link] → escopo administrativo
●
224.0.1.x → outros
●
Endereços locais (224.0.0.x)
●
.1: all-hosts
●
.2: all-multicast routers
●
.4: all DVMRP (Distance Vector Multicast Routing Protocol) routers
●
.5: all OSPF (Open Shortest-Path First) routers
●
.6: OSPF (Open Shortest-Path First) designated routers
●
.13: all PIM (Protocol-Independent Multicast) routers
●
.15: all CBT (Core-Based Trees) routers
Comunicação entre Processos
Comunicação de Grupo
●
Modelo de falhas do UDP/IP multicast;
●
sofrem de falhas de omissões;
●
não garante a entrega das mensagens para todos os membros do grupo;
●
Unreliable Multicast;
Multicast no Java
●
O Java fornece uma classe MulticastSocket subclasse da
DatagramSocket capaz de se juntar ou deixar grupos IP multicast;
●
Métodos:
●
joinGroup(InetAddress mcastaddr);
●
leaveGroup(InetAddress mcastaddr);
●
setTimeToLive(byte ttl);
Comunicação entre Processos
Middlewares
●
DCOM
●
Distributed Component Object Model;
●
Microsoft;
●
Substituída na plataforma .NET pela API .NET Remoting;
●
Java RMI
●
Remote Method Invocation;
●
Oracle;
●
Disponível no núcleo básico desde a versão JDK 1.1;
●
CORBA
●
Common Object Request Broker Architecture;
●
OMG (Object Management Group);
Java RMI
Introdução
●
O JavaRMI permite que um objeto rodando em uma JVM invoque métodos
rodando em outra JVM;
●
Fornece comunicação remota entre programas escritos em Java;
●
Aplicações RMI comumente compreendem dois programas separados, um
servidor e um cliente;
●
O servidor cria objetos remotos, faz as referências destes objetos serem
acessíveis, e aguarda clientes para realizar invocações destes métodos;
●
O cliente obtém a referência remota de um ou mais objetos remotos de um
servidor e então invoca os seus métodos;
●
RMI fornece um mecanismo pelo qual o servidor e o cliente se comunicam,
sendo referenciada como uma aplicação de objetos distribuídos;
Java RMI
Introdução
●
Uma aplicação de objetos distribuídos precisa realizar as seguintes tarefas:
●
Localizar objetos remotos
●
Aplicações podem obter vários mecanismo para obter as referências de
objetos remotos;
●
Uma aplicação pode registrar os seus objetos remotos no serviço de
registros (RMI Registry);
●
Comunicar com os objetos remotos
●
Detalhes desta comunicação são encapsulados pelo RMI;
●
Para o programador, a invocação de um método remoto é similar a
invocação de métodos locais;
●
Carregar as definições de classe para os objetos passados
●
Uma vez que o RMI permite a passagem e recebimento de objetos, este
fornece um mecanismo para carregar classes de objetos bem como
transmitir dados de objetos;
Java RMI
Introdução
Java RMI
Introdução
●
Assim como qualquer aplicação Java, uma aplicação distribuída utilizando
JavaRMI é implementada através de interfaces e classes;
●
Interfaces declaram métodos;
●
Classes implementam os métodos declarados nas interfaces e, podem,
declarar métodos adicionais;
●
Em aplicações distribuídas, algumas implementações podem residir na
mesma JVM, mas outra podem ser que não;
●
Objetos com métodos que podem ser invocados através da JVM são
chamados de objetos remotos;
Java RMI
Introdução
●
Um objeto é tido como remoto pela implementação de uma interface remota,
a qual possui as seguintes características:
●
Uma interface remota estende a interface [Link];
●
Cada método da interface declara [Link] na sua
clausula throws, além de qualquer exceção específica;
●
RMI trata um objeto remoto diferente de um objeto local quando este é
passado de uma JVM para outra;
●
Invés de fazer uma cópia da implementação do objeto na JVM de
recebimento, o RMI passa uma stub remoto para o objeto remoto;
●
Este stub age como um representante local, ou proxy, para o objeto remoto
e basicamente é, para o cliente, a referência remota;
●
O cliente invoca o método no stub local, o qual é responsável por realizar
esta requisição ao objeto remoto;
Java RMI
Passos
●
Os passos para o desenvolvimento de uma aplicação remota utilizando
JavaRMI basicamente são:
●
Definição e implementação dos componente da aplicação distribuída;
●
Definição da interface remota;
●
Implementação do objeto remoto;
●
Implementação do servidor;
●
Implementação do cliente;
●
Compilação
●
Criação dos Stubs;
●
Execução do RMIRegistry;
●
Execução do Servidor;
●
Execução do Cliente;
Java RMI
Passos
●
Criar um arquivo JAR das interfaces:
javac [Link]
jar cvf [Link] [Link]
●
Compilando as classes do servidor:
●
Java RMI
Política de Segurança
●
Uma vez que o servidor e o cliente rodam com o SecurityManager instalado,
será necessário especificar a política de segurança de cada;
●
Arquivos [Link] e [Link]
grant codeBase
“file:/home/robson/eclipse_workspace/Calculadora/src/” {
permission [Link];
};
CORBA
CORBA
●
OMG (Object Management Group):
●
Promover a teoria e prática de tecnologias orientadas a objetos em
desenvolvimento de software;
●
Criar especificações gerais → interfaces;
●
Sistemas abertos:
●
Portabilidade;
●
Interoperabilidade;
●
Reusabilidade;
●
CORBA (Common Object Request Broker Architecture):
●
Middleware para o desenvolvimento de aplicações orientadas a objetos
distribuídos;
●
Suporte para a invocação de métodos remotos;
CORBA
Modelo de Objetos
●
Modelo Cliente/Servidor;
●
Objetos remotos são referidos como objetos CORBA;
●
Clientes não são necessariamente objetos;
●
Pode ser qualquer programa que envie requisições;
●
Implementações correspondentes a uma interface IDL (Objetos CORBA) não
necessariamente são construídas a partir de linguagens orientas a objetos;
●
Linguagens de implementação com diferentes noções de classes ou mesmo
nenhuma implica que o conceito de classe não existe em CORBA:
●
Classes não são definidas em uma IDL o que quer dizer que instâncias de classes
não podem ser passadas como argumentos (como enviar códigos entre linguagens
diferentes);
●
Contudo, estruturas de vários tipos e complexidades são passadas como
argumentos;
CORBA
Funcionamento do CORBA
●
O componente fundamental do CORBA é o ORB (Object Request Broker)
que tem a tarefa de facilitar a comunicação entre os objetos;
●
Provendo o IOR (Interoperable Object Reference), o ORB consegue
localizar os objetos destinos e transmitir informação para ou das invocações
de métodos remotos (RMI);
●
A interface dos objetos CORBA é especificada por uma IDL (Interface
Definition Language);
●
Um compilador traduz a definição IDL em uma linguagem de programação
(ex.: C, C++, Java, Ada, COBOL, SmallTalk, Lisp, Python, PL1) gerando IDL
Stubs e Skeletons que provêm respectivamente um framework para o lado
do cliente e um proxy para o lado do servidor;
CORBA
Funcionamento do CORBA
●
Requisições e respostas entre objetos são entregues através de um formato
padrão definido pelo GIOP (General InterORB Protocol);
●
Protocolo abstrato de comunicação utilizado entre ORBs;
●
IIOP (Internet InterORB Protocol):
●
baseado na pilha TCP/IP para ser utilizado na Internet;
●
SSLIOP (SSL InterORB Protocol):
●
Implementação do IIOP sobre SSL, permitindo criptografia de dados e
autenticação;
●
HTIOP (HyperText InterORB Protocol):
●
Implementação do IIOP sobre HTTP, permitindo transparência sob o
ponto de vista de firewalls;
CORBA
Funcionamento do CORBA
CORBA
Exemplo
●
O primeiro passo para se criar uma aplicação CORBA é especificar todos os
objetos e interfaces utilizando uma IDL;
●
A IDL da OMG possui uma sintaxe parecida com o C++;
●
Define módulos, interfaces, estrutura de dados, etc;
●
A IDL pode mapear estas informações para uma variedade de linguagens
de programação;
●
Neste exemplo utilizaremos a linguagem Java (compilador idlj);
Arquivo [Link]
module HelloApp {
interface Hello {
string sayHello();
};
};
Sincronização em SD
Contextualização
●
Um Sistema Distribuído:
●
Processos recebem, processam e enviam mensagens;
●
Suporte de comunicação (rede de comunicação) é dotado de propriedades
estruturais e comportamento:
●
Propriedades estruturais: topologia, arquitetura, protocolos, etc;
●
Propriedades comportamentais: dinâmica de funcionamento, não
duplica de mensagens, integridade das mensagens, atraso limitado, etc;
●
Processos em S.D. não compartilham memória ou relógio, comunicam-
se através das troca de mensagens;
●
Por conta disto, existe uma dificuldade em se caracterizar um estado
global em Sistemas Distribuídos;
Sincronização em SD
Contextualização
●
Sistemas Distribuídos Síncronos
●
Modelo de execução síncrona;
●
Caracterizam-se por apresentarem:
●
Um limite entre atrasos relativos de processamento;
●
Um limite na latência da mensagem nas comunicações;
●
Sistemas síncronos são mais simples na determinação de tempos;
●
Sistemas de tempo real críticos (Hard Real-Time Systems);
Sincronização em SD
Contextualização
●
Sistemas Distribuídos Assíncronos
●
Sistemas ou modelos de execução caracterizados pela não existência de
limites ou atrasos relativos de processamento ou de latências de
comunicação;
●
Neste caso o processamento e comunicação evoluem em tempos
arbitrários;
●
Torna-se difícil diferenciar o atraso de uma mensagem de uma parada de
um nó (crash de processador) do sistema distribuído;
Sincronização em SD
Ordenação e Sincronização
●
Sistemas de computação que apresentam modelos de processamento
distribuído precisam de mecanismos de sincronização e ordenação entre
eventos;
●
Sincronização em sistemas centralizados
●
São construído com base em mecanismos de exclusão mútua
implementados sobre uma memória compartilhada;
●
Sincronização em sistemas distribuídos
●
Devido a não existência de uma memória compartilhada ou relógio global
fica difícil estabelecer ordens sobre os eventos;
Sincronização em SD
Computação Distribuída
●
A execução de um programa distribuído corresponde a uma coleção de N
processos → { p i∣i=1, 2, ... , N }
●
Cada processo p i evolui gerando eventos e i internos e externos, que
provocam mudanças de estado;
●
Eventos externos ligado a comunicação, ex: send(m) ou receive(m);
●
Histórico local ( hi ) do processo pi durante a computação é uma sequência
de eventos:
h( pi )=e1i , e 2i ,.. . hki =e 1i , e2i ,... ,eik
●
Relação happened before (“→”) introduzida por Lamport que captura duas
ordens parciais e uma regra:
k l k l(ordemlocal)
●
Se ei , ei ∈hi e k <l ,então ,ei →e i
Sincronização em SD
Relógios
●
Além de ordenar os eventos de um Sistema Distribuídos, também faz-se
necessário atribuir a eles uma data e hora através de um carimbo de tempo
(timestamp);
●
Cada computador possui o seu relógio físico;
●
Dispositivos eletrônicos que contam as oscilações que ocorrem em um
cristal com uma frequência de oscilação bem definida;
●
Estas oscilações são contadas e armazenadas em um registrador;
●
Os dispositivos podem ser configurados para gerarem interrupções de
hardware em intervalos regulares, chamadas de clock ticks;
●
O S.O. lê o valor do relógio de hardware, H i ( t ), acerta a sua escala e
adiciona uma compensação para produzir um relógio de software que mede o
tempo físico real t do processo pi .
C i ( t )=α H i (t )+β
Sincronização em SD
p1
a b
p2
c d
p3
e f
Sincronização em SD
●
Para quaisquer dois eventos e →e ' os valores de seus relógios lógicos serão
tais que C (e)<C (e ') :
e 11 →e 21 e 21 →e 32
●
Porém, o fato de dois eventos terem C (e)<C (e ') não significa que e →e ' ;
e 21∥e 13
Sincronização em SD
●
A comparação dos timestamps pode ser realizada da seguinte forma:
V =V ' sse V [ j]=V ' [ j] para j=1, 2,... , N
V ≤V ' sse V [ j]≤V ' [ j] para j=1, 2,... , N
V <V ' sse V ≤V '∧V ≠V '
●
No exemplo observamos que: a → f V (a)<V (f )
c∥e ¬(V (c)≤V (e))∧¬(V (e)≤V (c))
Sincronização em SD
Estado Global
●
Estado local
k
●
σ ki denota o estado de pi depois de executado o evento e i
●
Estado global
● ω
denotado por S=(σ 1, ... , σ n )