Sistemas Distribuídos: Conceitos e Arquiteturas

Classificado em Computação

Escrito em em português com um tamanho de 24,32 KB.

Sistemas Distribuídos

Antes de 1985: Computadores grandes e caros (Mainframes);
A partir de 1985: Desenvolvimento de microprocessadores mais rápidos; Invenção das LANs.
Definição de S.D.: Uma coleção de computadores independentes que se apresentam como um único sistema coerente. S.D. possibilita montar um sistema computacional composto por um número expressivo de processadores interligados em uma rede de alta velocidade.
As máquinas de S.D. são autônomas, ou seja, podem possuir SOs distintos, arquiteturas diferentes... Os usuários enxergam o sistema como um sistema simples, abrindo, por exemplo, um terminal remoto.
Vantagens do S.D. em relação ao Sistema Centralizado: Máquinas mais baratas sem a necessidade de usar os Mainframes (grandes e caros); Fácil expansão do sistema; Confiabilidade (caso uma máquina do sistema quebre, as demais continuam funcionando); Algumas aplicações precisam de máquinas fisicamente separadas.
Vantagens do S.D. em relação a PCs independentes: Permite o compartilhamento de dados; Permite o compartilhamento de periféricos caros (poupando dinheiro); Torna simples e rápida a comunicação entre funcionários; Permite espalhar a carga de processamento por todas as máquinas na rede (tendo um maior poder de processamento).
Desvantagens do S.D.: Software para S.D. é raro; Sobrecargas na rede causando instabilidade, forçando uma possível expansão com switches, hubs, cabos, placas de rede, etc.; Como os dados podem ser facilmente acessados por qualquer pessoa na rede, surge a necessidade de sistemas de segurança.

Conceito de Hardware

- MIMD: Grupo de computadores independentes e com mais de um processador. Todos os Sistemas Distribuídos são MIMD.
Sistemas fortemente acoplados: Retardo de envio de mensagem é baixo; Velocidade de transmissão é alta.
Baseados em Barramentos: Única rede que conecta todos os computadores do sistema.
Comutados: Fios individuais interligando todas as máquinas entre si.

Conceito de Software

Define como o sistema se definirá; SOs de S.Ds são parecidos com SOs tradicionais: 1- Eles atuam como gerenciadores de recursos (CPUs, periféricos, memórias, rede, dados de forma geral); 2- Eles escondem a complexidade e a diversidade do hardware, resultando em uma máquina virtual para cada aplicação.
SOs para computadores distribuídos são divididos em duas categorias: 1- Sistemas fortemente acoplados: SO gerencia todos os recursos de forma única e global; 2- Sistemas fracamente acoplados: SO para cada computador da rede, mas eles trabalham juntos para dispor serviços e recursos próprios para os demais.
Fortemente acoplados: Chamados de DOS (Sistema Operacional Distribuído); Gerencia multiprocessadores e multicomputadores homogêneos (clusters); Semelhante ao SO tradicional; Esconde a complexidade.
Fracamente acoplados: Chamados de NOS (Sistema Operacional de Rede); Gerencia multicomputadores heterogêneos (rede local de computadores); Diferente de um SO tradicional; Oferece serviços para clientes remotos.
Middleware: Gerencia a comunicação entre os programas e a rede.
DOS: 1- SO Multiprocessador: Gerencia recursos do multicomputador; 2- SO Multicomputador: Gerencia sistemas de multicomputadores homogêneos.
DOS - SO para uniprocessador: Criado para gerenciar computador com uma única CPU. Principal finalidade é habilitar usuários e aplicações a compartilhar recursos de maneira fácil. O SO implementa uma máquina virtual (fazendo com que o DOS pareça uma única máquina). Oferece facilidades de multitarefa; Com uma máquina virtual, as aplicações são protegidas de outras. O SO tem controle total de como os recursos são usados e compartilhados. O acesso à CPU é feito de dois modos: 1- Kernel: permite que todas as instruções sejam executadas, e a memória e a coleção de todos os registradores são acessíveis; 2- Usuário: Acesso a registradores e à memória são restritos.
Microkernel: Parte do SO possui apenas o código que deve ser executado em modo kernel. Vantagens: a maior parte do SO é executada em modo usuário. O modo usuário pode ser colocado em diferentes máquinas. Aproxima o SO tradicional dos computadores distribuídos.
DOS - SO para multiprocessador: SO idêntico ao tradicional, só que com mais processadores compartilhando a mesma memória. As informações na memória são acessadas por múltiplos processadores, tornando necessário um mecanismo de proteção para garantir a consistência. Vários SOs têm dificuldades para controlar múltiplos CPUs, pois foram desenhados para programas que usam um único fluxo de execução (thread). Esses SOs visam suportar alta performance com múltiplos CPUs. Para conseguir proteção nesses SOs, duas importantes primitivas foram criadas: 1- Semáforos: Variáveis compartilhadas que podem assumir valores iguais ou maiores que zero; 2- Monitores.
DOS - SO para multicomputador: A estrutura e a complexidade de um SO para multicomputadores são totalmente diferentes de um SO para multiprocessadores. A comunicação entre computadores é feita através de passagem de mensagem. Cada computador (nó) possui seu próprio kernel para memória, disco, CPU. Cada nó possui um módulo de comunicação entre processadores. Camada de comunicação simula um multiprocessador (memória compartilhada). Camada facilita a transparência.
DOS - Sistema de memória distribuída compartilhada: Emular um sistema de memória compartilhada; Cria-se uma máquina virtual de memória compartilhada, rodando no multicomputador, para aplicações escritas usando o modelo de memória compartilhada; MEMÓRIA DISTRIBUÍDA COMPARTILHADA é um espaço de endereçamento virtual; Simulação de páginas virtuais; Compartilhamento falso é quando dois processos independentes acessam dados da mesma máquina.

NOS

Sistemas de computadores não são necessariamente homogêneos (vide DOS para multicomputadores); Construído com uma coleção de computadores monoprocessados, cada um com o seu SO local e independente; Cada SO pode ser diferente; Embora SOs diferentes, essas máquinas e seus respectivos SOs permitem o acesso de usuários às facilidades (periféricos, memória, CPU, etc.) locais; Primitivas de comunicação são particulares aos SOs; Comandos em sistemas operacionais de rede ainda são extremamente primitivos; Característica principal é o sistema ser composto por servidores e clientes.

Middleware

Sistemas Operacionais Distribuídos: transparência e facilidade de uso; Sistemas Operacionais de Rede: escalabilidade (scalability) e padronização de sintaxe e semântica nos serviços (openness); Seria possível juntar esses dois mundos? Foi criada uma camada de software adicional que é usada pelo sistema operacional de rede para +/- esconder a heterogeneidade do hardware e software, mas também possibilitar uma transparência na distribuição.

O Modelo Cliente-Servidor


- Processos em um sistema distribuído são divididos em dois grupos:- Servidor (server): processo implementa um serviço específico.
Ex: serviço de sistema de arquivo, serviço de banco de dados;- Cliente (client): processo que requisita um serviço de um servidor e espera uma resposta.
- A interação cliente-servidor é conhecida como request-reply behavior (modo de envio e recebimento).
- Baseado em um protocolo simples (sem conexão) de tipo solicitação/resposta.
- Nenhum tipo de conexão é estabelecida antes do envio da solicitação nem desfeito após a obtenção da resposta.
- Protocolo simples é empregado para diminuir o alto overhead de comunicação causada por protocolos orientados à conexão.
Ex: TPC/IP; - problema desse protocolo simples surge quando:
- Cliente não consegue detectar se a solicitação foi perdida
- Cliente não consegue detectar que a resposta foi perdida
- Caso ocorra alguma falha na resposta é necessário o reenvio da informação.
Camada de Aplicação
- Pode ser dividida em: Nível de Interface com o Usuário; Nível de Processamento; Nível de Dados.
Nível de Interface com o Usuário
- Consiste em programas que habilitam a interação de usuários finais com as aplicações.
- Exemplos:
- Terminal remoto de um Mainframe. Todas as aplicações são centralizadas => sistema é dito ambiente fortemente clienteservidor
-Interface X-Windows
Nível de Processamento
- Parte que contem a essência da funcionalidade da aplicação.
- Desse modo não existem aspectos comuns nesse nível.
- Exemplo:
- Mecanismo de busca na Internet.
-- Transforma palavra-chave em requisições para banco de dados
-- Ordena resultados (numa ordem predefinida) e uma lista
-- Transforma a lista em uma série de páginas do tipo HTML
Nível de Dados
- Contem programas que mantêm os dados reais com aplicações funcionando.
- Dados são persistentes! Os dados são armazenados para um próximo uso mesmo sem executar aplicações.
- Numa forma mais simples, o nível de dados pode ser considerado como um sistema de arquivos, porém mais fácil de utilizar do que um bando de dados atual.
- Tipicamente esse nível é implementado em servidores.
Arquitetura Cliente-Servidor
- Organização mais simples:
- A máquina cliente possui apenas a implementação dos programas. Parte do nível de interface com o usuário.
- A máquina servidora contem todo o resto. Parte do nível de interface com o usuário, processamento e dados.
- Essa organização não é realmente distribuída! Controle é todo feito no servidor e o cliente é essencialmente um terminal burro.
- Típico de um sistema centralizado!!
Arquiteturas Multicamadas
- Arquitetura 2-Camadas
- Arquitetura 3-Camadas
- Arquiteturas Modernas
- Distribuição Vertical
- Distribuição Horizontal
- Distribuição Ponto-a-ponto (peer-to-peer)
Arquitetura 2-Camadas
a) Parte da interface com o usuário a cargo do cliente.
b) Toda a interface com o usuário é feita no cliente (front end gráfico).
c) Parte da aplicação realizada no cliente.
Ex: Editor de texto com as funções básicas de edição na máquina cliente e recursos avançados como corretor gramatical na máquina servidora.
d) Apenas nível de dados é realizado no servidor.
Ex: PC ou estação de trabalho conectado em uma rede.
e) Parte do nível de dados realizado no cliente.
Ex: Browser na WEB. Contém cache local com as páginas recentes.
- Organizações d) e e) são as mais populares.
- Tipicamente são compostas por PCs e Estações de Trabalho.
- Essas máquinas são conectadas através de uma rede.
- Dados são armazenados em banco de dados e/ou arquivos
distribuídos.
Arquiteturas Modernas
- Distribuição Vertical: Principal característica consiste na separação física de componentes logicamente diferentes em diferentes máquinas.
- Distribuição Horizontal: Um cliente ou servidor pode ser separado fisicamente em partes logicamente equivalente, mas cada parte é operada com todo o conjunto de dados.
- Distribuição Ponto-a-ponto: Servidor não é obrigatoriamente usado. Ex: usuário contata outro para iniciar uma sessão.
Comunicação
- Essência dos SDs é a comunicação.
- A base da comunicação em SDs são passagens de mensagem.
- Mensagens são baseadas em primitivas simples de comunicação => Dificuldade de implementação de aplicações distribuídas em grande escala.
- Protocolos são regras para envio e recebimento de mensagens.
Garantem a comunicação entre máquinas.
Protocolos em Camadas
- Como sistemas distribuídos não possuem memória compartilhada toda a comunicação é baseada em mensagens.
- Como enviar as mensagens?
- Como definir o que é cabeçalho e o que é mensagem?
- Quantos volts significa o nível lógico 0 e quantos significa o 1?
- Como identificar se a mensagem foi modificada ou perdida?
- Necessidade de concordância de diversos níveis!!
- Para facilitar a tratamento das mensagens a ISO (International Standards Organization) desenvolveu um modelo de referência chamado modelo OSI (Open Systems Interconnection Reference Model).
- Modelo OSI projetado para permitir que sistemas abertos se comuniquem através de regras preestabelecidas naquilo que conhecemos como protocolo.
- Exemplos de uso do protocolo:
- Processador e placa controladora
- Grupo de computadores ligados em rede
- Modelo OSI considera dois tipos genéricos de protocolo.
- Orientados a conexão: antes de haver trocas de dados o transmissor e o receptor devem explicitamente estabelecer uma conexão e, talvez, negociar um protocolo a ser utilizado.
- Ex: Telefone (estabelecida a conexão os interlocutores podem conversar).
- Sem conexão: Transmissor envia a mensagem assim que ele esta pronta. Não espera uma conexão.
- Ex: Carta na caixa de correio.
- Comunicação no modelo OSI é dividida em 7 camadas ou níveis.
- Cada nível trata um aspecto específico da comunicação => Complexidade pode ser dividida também e tratada de forma independente!!
- Uso de interface entre níveis. Interface é um conjunto de operações que juntas definem qual o serviço que o nível esta capacitado a realizar para seus usuários.
- Cada nível fornece uma interface para o nível imediatamente acima.
Exemplo: Duas companhias uma de aviação e outra fornecedora de alimentos sempre então em contato para acertar o tipo de alimento que será comprado. O Chefe da companhia aérea pede para sua secretária para fazer o pedido de compra via postal. Do outro lado, outra secretária recebe e passa a informação para seu chefe. Após um certo tempo as secretárias resolvem utilizar o FAX para fazer o pedido só que não mudam a forma do pedido.
Quais os dois níveis de comunicação desse exemplo?
R: Nível secretária e nível chefe!
O que mudou na comunicação com a introdução do FAX?
R: NADA!! Obs: o envio ficou mais rápido, mas a mensagem é a mesma!!
OSI: Nível Físico
- Trata da transmissão de bits (0 ou 1)!
Questões tratadas:
- Quantidade de volts necessários para representar cada um dos níveis lógicos.
- Quantos bits por segundo podem ser transmitidos e se transmissão pode ser feita nos dois sentidos simultaneamente.
- Qual o tamanho e o formato do conector (plug) de rede.
- Qual a quantidade de pinos no plug e o significado deles.
- Trata da padronização das interfaces elétrica, mecânica e de sinalização.
OSI: Nível Enlace de Dados
- bits são agrupados em unidades denominadas quadros (frames).
- Função desse nível é verificar se os quadros estão sendo corretamente recebidos. Verificar possíveis erros!!
- Coloca um padrão especial de bits no início e no final de cada quadro e calcula-se o checksum (soma todos os bytes do quadro).
- Caso checksum enviado pelo transmissor for diferente do calculado pelo receptor mensagem deve ser retransmitida.
OSI: Nível de Rede
- Principal função é encontrar o melhor caminho de envio de uma mensagem (roteamento).
- Dificuldade: Enviar uma mensagem para uma máquina em Hanói!! Qual caminho a mensagem deve seguir??
- Nem sempre o menor caminho é o melhor!!
- Atualmente existem dois protocolos para o nível de rede:
- X.25: Orientado a conexão.
- IP (Internet Protocol): protocolo sem conexão.
- Uso de Pacotes (mensagens no nível de rede).
OSI: Nível de Transporte
- Oferecer uma conexão confiável para a transmissão de um dado
- Abre a mensagem em pedaços do tamanho de pacotes.
- Controla os pacotes que foram enviados e recebidos
- Controla espaço no receptor para acomodar os pacotes
- Nível de transporte voltado basicamente à conexão!!
- Simula que mensagem chegue como num tubo, ou seja, em ordem!
- Protocolo de transporte do DoD (U. S. Department of Defense) é o TCP/IP (Transmission Control Protocol/Internet Protocol).
OSI: Nível de Sessão
- Versão aprimorada do nível de transporte
- Facilidades de sincronização
- Sincronização permite aos usuários inserir pontos de controle em transferências muito longas
- Caso ocorra falha não é necessário enviar toda a informação novamente. Volta do último ponto de controle
- Na prática é pouco utilizado!!
OSI: Nível de Apresentação
- Trata da informação e não apenas de um conjunto de bits dentro de um pacote, por exemplo.
- Possível definir registros contendo campos para recebimento de
informação estruturada.
- Transmissor pode informar ao receptor que a mensagem é formada por registros em determinados formatos.
- Facilita a comunicação entre máquinas com diferentes representações internas.
OSI: Nível de Aplicação
- Composto por um conjunto de diversos protocolos voltados para diferentes atividades.
- Correio eletrônico, transferência de arquivos e terminais remotos.
- Contem todas as aplicações e protocolos que de um modo ou de outro não se encaixam nos outros níveis.
- Para uma modelo de referência OSI, virtualmente todos os sistemas distribuídos são somente aplicações!
- O que falta nesse modelo OSI é a distinção entre aplicações: protocolos de aplicação específica e protocolos de propósito geral!
Exemplos de protocolos de aplicações específicas:
- Protocolo de transferência de arquivo para internet (FTP, do acrônimo de File Transfer Protocol.
- Protocolo de transferência de hipertexto (HTTP, do acrônimo de HyperText Transfer Protocol): protocolo de uma aplicação específica.
- Diversos protocolos de propósitos genéricos são utilizados por diversas aplicações.
- Muitos protocolos suportam uma variedade de serviços middleware.
- Ex1: Protocolo de Autenticação
- Usado para autenticar usuários e processos para recursos do sistema.
- Ex2: Protocolo distribuído de bloqueio
- Usado para proteger acessos simultâneos a recursos limitados a utilização seqüencial (ex: backup com fita DAT).
Chamada Remota a Procedimento
- Conhecido com RPC (Remote Procedure Call)
- Idéia é simples! Permitir que programas de uma máquina chamem procedimentos localizados em outra.
- Ex: - Processo na máquina A chama procedimento em B.
- Processo em A é suspenso.
- Máquina B executa procedimento.
- Resultado do procedimento é enviado para processo em A.
- Informação pode ser transportada através de parâmetros.
- Informação da comunicação não é vista pelo programador!
- Nem tudo é simples!
- Como gerenciar o sistema pode gerenciar a comunicação se as máquinas forem diferentes? (Espaços de endereçamentos podem ser diferentes!!)
- Como gerenciar se uma máquina do sistema cair (falhar).
- Embora esses problemas essa técnica é muito utilizada em SO distribuídos.
Operação Básica da RPC
- Para apenas uma máquina temos:
count = read (fd, buf, nbytes);
fd e nbytes = inteiros
buf = vetor
- Analisando o código acima e considerando este em C temos:
- fd e nbytes são inteiros e passados por valor (modificação na função não interfere com valores das variáveis!!).
- buf é um vetor e em C é passado por referência, ou seja, passado o endereço do início do vetor (modificação dentro da função modifica valores do vetor no lado de fora!!).
- Idéia básica é fazer uma chamada remota da mesma maneira que é feita em apenas uma máquina!
- Tornar a chamada remota transparente!
- Ex: Utilizar uma função read para ler um dado de um arquivo não importando aonde esteja!
- Transparência parece sobrecarga de funções!
- Quando read for uma camada remota será posta na biblioteca uma versão diferente de read (stub do cliente).
- Ao invés de carregar registradores (acesso em uma máquina), empacota os dados (parâmetros) e pede ao kernel para enviar a mensagem ao servidor.
- Depois do send e stub do cliente chama um receive e aguada envio da informação (fica bloqueado).
- Chegando ao servidor ele envia para o stub do servidor que executa um receive.
Passos para RPC
- Cliente chama stub do cliente da maneira usual
- Stub do cliente constrói mensagem e envia um trap para o SO
- Kernel envia mensagem para Kernel remoto
- Kernel remoto entrega mensagem para stub do servidor
- Stub do servidor descompacta mensagem e chama servidor
- servidor realiza trabalho e envia resultado para buffer no stub servidor
- Stub servidor compacta dados em mensagem e emite um trap para o Kernel remoto
- Kernel remoto envia mensagem para Kernel do cliente
- Kernel do cliente entrega mensagem para o stub do cliente
- Stub do cliente descompacta e envia dados para cliente
RPC: Passagem de Parâmetros
- Função do stub de cliente é tomar seus parâmetros, empacotálos
e enviar para o stub servidor.
- Tarefa não é fácil de ser feita!
- Empacotamento de parâmetros em uma mensagem é chamado
de Ordenação de parâmetros.
- Considere um procedimento remoto add(i, j) (soma dos
números i e j é feita no servidor).
- Máquinas idênticas não existe problema (formato das variáveis são os mesmos).
- O que acontece se máquinas forem diferentes?
- Cada máquina pode ter sua representação de números, caracteres e outros dados (ex: Mainframes IBM usam caracteres EBCDIC, computadores pessoais da IBM usam código ASCII).
- Intel 386 numeram seus bits da direita para a esquerda (little endiam), Sun SPARC numeram da esquerda para direita (big endiam). Nomes em homenagem as viagens de Gulliver.
- Imagine uma máquina cliente Intel e um servidor Sun SPARC e que os dados que serão enviados do cliente possuem o seguinte formato:
- Palavras de 32 bits com dois parâmetros: inteiro com valor 5 e caractere com JILL.
- Existe algum problema com essa mensagem?
- Na máquina Intel é enviado: 5 e JILL
- Na máquina SPARC é lido: 83.886.080 e JILL
- Uma solução seria inverter a ordem dos bytes no envio da mensagem.

Entradas relacionadas: