Sistemas Distribuídos Capítulos 3 e 4 - Aula 4 Aula passada Threads Threads em SDs Processos Clientes Processos Servidores Aula de hoje Clusters de Servidores Migração de Código Comunicação (Cap. 4) Fundamentos 1
Clusters de Servidores Conjunto de máquinas conectadas por uma rede, no qual cada máquina executa um ou mais servidores. Estas máquinas estão conectadas por uma rede local, com alta largura de banda e baixa latência.
Clusters de Servidores
Clusters de Servidores - Comutador Forma o ponto de entrada para o cluster de servidores, oferecendo um único endereço de rede. Considerando TCP, o comutador aceita requisições e as transfere a um dos servidores Identifica o melhor servidor a tratar a requisição
Clusters de Servidores - Comutador
Clusters de Servidores Distribuídos Conjunto de máquinas que possivelmente muda dinamicamente, com vários pontos de acesso também possivelmente variáveis, mas se apresenta ao mundo externo como um única e poderosa máquina.
Clusters de Servidores Distribuídos Vários pontos de acesso Estabilidade no acesso Alto desempenho Flexibilidade
Migração de Código Em alguns casos é importante migrar código de uma máquina para outra Problema: como fazer esta tarefa em sistemas heterogêneos!
Por que Migrar Código? Principal razão: Aumento de Desempenho
Migração de Código - Desempenho Envio de processos de máquinas sobrecarregadas para máquinas com cargas mais leves Evitar grande quantidade de mensagens trocadas entre aplicações cliente-servidor: Ex.1: operações de banco de dados que envolvem uma grande quantidade de dados(aplicação cliente servidor) Ex.2: formulários enviados do servidor cliente (applets)
Modelos para Migração de Código Migração de código é algo muito mais amplo: podemos também migrar status de um programa, sinais pendentes e outras partes do ambiente
Modelos para Migração de Código Processo consiste em três segmentos[fuggeta et al 1998]: Segmento de código: contém o conjunto de instruções que compõem o programa que está em execução Segmento de recursos: contém referências a recursos externos (arquivos, impressoras,outros processos, bibliotecas) Segmento de execução: armazenar o estado em execução de um processo no momento da migração (dados privados, pilha,contador de programa)
Modelos para Migração de Código Mobilidade pode ser de dois tipos: Mobilidade Fraca: possível transferir somente o segmento de código, junto com alguns dados de inicialização. Requer somente que a máquina-alvo possa executar o código (portabilidade). Ex: applets Java Mobilidade Forte: segmento de execução também pode ser transferido. O processo em execução pode ser parado e movido para uma outra máquina e retomar a execução no ponto original. Mais geral, porém mais difícil de ser implementada
Modelos para Migração de Código Em relação do ponto de ínicio da migração: Iniciada pelo remetente: a migração é iniciada na máquina em que o código está em execução no momento em questão. Ex: enviar programa de busca pela Internet a um servidor de banco de dados para realização de pesquisas agente móvel que passa de site para site Iniciada pelo destinatário: Iniciativa da migração de código é tomada pela máquina-alvo. Ex: Applets java
Modelos para Migração de Código
Migração e recursos locais Segmentos de recursos requerem uma atenção especial O segmento de recurso nem sempre pode ser transferido junto com outros segmentos sem ser trocado Ex.: Comunicação de um processo sendo feita através de uma porta TCP. Ao mudar de localização, este processo deverá devolver a porta e requisitar uma nova no destino
Migração e recursos locais Três tipos de vinculações processo-recurso [Fuggetta et al, 1998]: Vinculação por identificador Processo requer exatamente o recurso referenciado (URL de um site) Vinculação por valor É necessário somente um valor Se outro recurso fornece o mesmo valor, execução não é afetada (bibliotecas padronizadas) Vinculação por tipo Processo requer um recurso de um tipo específico (monitores, impressoras)
Migração e recursos locais Três tipos de vinculações recurso-máquina: Recursos não ligados: recursos podem ser movidos com facilidade entre máquinas diferentes(arquivos de dados) Recursos amarrados: recursos podem ser movidos ou copiados, mas só a custo relativamente alto ( banco de dados locais) Recurso fixos: recursos estão intimamente vinculados a uma máquina ou ambiente especifico e não podem ser movidos dispositivos locais
Migração em Sistemas Heterogêneos Migração em sistemas heterogêneos requer Que o segmento de código possa ser executado em cada plataforma Que o segmento de execução possa ser adequadamente representado em cada plataforma Efeito global: Migrar sistema operacional inteiro, em vez de migrar processos
Comunicação entre Processos Coração de qualquer Sistema Distribuído Como processos em diferentes máquinas trocam informações? Não é uma tarefa trivial! Desejável obter modelos onde a complexidade da comunicação seja transparente para o desenvolvedor
Modelo Cliente-Servidor Participantes são divididos em: Servidores: implementam um serviço específico Clientes: solicitam ao servidor um determinado serviço e espera pela resposta Comportamento requisição-resposta
Protocolos em Camadas
Protocolos em Camadas
Camada Física Responsável pelo envio de bits Trata da padronização das interfaces elétrica, mecânica e de sinalização Protocolos são dependentes do meio de transmissão do link
Camada Enlace Responsável pelo envio de frames entre os links Característica importante: um datagrama pode ser manipulado por diferentes tipos de protocolos da camada de enlace: Ethernet (CSMA/CD), PPP Cada protocolo diferente pode ou não implementar um conjunto de serviços. Ex.: entrega confiável da informação
Camada Rede Redes de longa distância são constituídas de muitos nós com diferente caminhos entre eles. Como definir um caminho entre um par origem-destino? Roteamento é a principal tarefa da camada de rede Internet Protocol: protocolo sem conexão, onde pacotes são roteados de forma independente best-effort service
Camada de Transporte Responsável pela comunicação lógica entre diferentes processos sendo executados em diferentes hosts (fim-a-fim) Protocolos da camada de transporte não estão implementados nos roteadores Pode fornecer os seguintes serviços: multiplexing/demultiplexing transmissão confiável garantias de banda, retardo
Protocolos de Transporte na Internet Transmission Control Protocol (TCP) Orientado a Conexão Confiável, porém lento User Datagram Protocol (UDP) Sem conexão Rápido, porém não confiável Escolha está ligada as caracteristicas da aplicação!
Camada de Aplicação Distinção entre aplicação para redes e protocolos da camada de aplicação Protocolo: pequena (talvez grande) peça de uma aplicação Ex.1: Aplicação WEB HTTP Ex.2: Aplicação Email SMTP Protocolos definem: tipos de mensagens trocadas, sintaxe
Camada de Middleware Camada de software que é situada logicamente entre uma camada de nível mais alto, composta de usuários e aplicações e uma camada subjacente, que consiste de facilidades básicas de comunicação Inúmeros protocos para suportar serviços de middleware: Autenticação: não estão vinculados a uma aplicação Comprometimento Comunicação: Serviços de comunicação de alto nível
Camada de Middleware
(Sockets) Como os processos executando em diferentes máquinas trocam informação? Em uma visão pilha de protocolos TCP/IP Enviando mensagens através da utilização de sockets Socket: ponto final de uma comunicação full-duplex entre dois processos Processo casa / Socket Porta Socket: Porta entre o processo da aplicação e o protocolo de transporte
(Sockets) Informações são string de bytes, sem significado aparente Não existe a transparência de distribuição: toda a comunicacão está está explícita, através de procedimentos send e receive Funções mais sofisticadas devem ser feitas na camada de aplicação Por que não oferecer comunicação de alto nível, independente da aplicação?
Solução! Middleware de comunicação Tipos: Chamadas de Procedimento Remoto Comunicação orientada a Mensagens Comunicação orientada a fluxo
Tipos de Comunicação (Middleware) Persistência Persistente: Mensagem é armazenada pelo middleware de comunicação durante o tempo que for necessário para entregá-la ao receptor (Servidor de emails) Transiente: Mensagem é armazenada somente durante o tempo em que a aplicação remetente e a aplicação receptora estiverem executando
Tipos de Comunicação (Middleware) Sincronização Assíncrona: Remetente continua sua execução imediatamente após ter apresentado sua mensagem para transmissão Síncrona: Remetente é bloqueado até saber que sua requisição foi aceita Middleware avise que se encarregará da transmissão Requisição ser entregue ao receptor Até o instante que o receptor retornar uma resposta
Tipos de Comunicação (Middleware) Granularidade Discreta: Partes se comunicam por mensagens e cada mensagem forma uma unidade de informação completa Fluxo: Várias mensagens,sendo que as mensagens estão relacionadas uma com as outras pela ordem ou pela relação temporal