Sistemas Distribuídos Aula 4 Msc. Daniele Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência da Computação UFU Bacharel em Ciência da Computação - UFJF
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 inicio 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
(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á explícita, através de procedimentos send e receive Funções mais sofisticadas devem ser feitas na camada de 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
Fim da Aula 4. Sistemas Distribuídos: Msc. Daniele C. Oliveira 22