Baixe o app para aproveitar ainda mais
Prévia do material em texto
Resumo de Sistema Distribuidos 1° Bimestre Programação Concorrente - Não exigem execução sequencial, em um programa concorrente, existe mais de um fluxo de controle ativo. Programação Distribuída - além de concorrentes, executam sobre redes de computadores, utilizadas tecnologias e ferramentas que permitam a componentes concorrentes, executados em máquinas distintas, concorrer e colaborar em torno de um objetivo comum. Sistemas de Computação Distribuídos - Utilizada para tarefas de computação de alto desempenho algumas aplicações: Pesquisa da cura de doenças (AIDS, câncer), Descoberta de vida Extra-Terrestre Sistemas Distribuídos em cluster - Um conjunto de computadores conectados em rede de alta velocidade sendo utilizado, em geral, para programação paralela. Grande ganho na relação preço / desempenho, geralmente, utiliza-se máquinas iguais Sistemas Distribuídos em grade - Conjunto de computadores de diferentes hardwares, softwares, tecnologia de rede e pertencentes a organizações diferentes. Alto grau de heterogeneidade RPC – (Remote Procedure Call ) é uma tecnologia de comunicação entre processos que permite a um programa de computador chamar um procedimento em outro espaço de endereçamento (geralmente em outro computador, conectado por uma rede) modelo cliente-servidor. 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. Sistemas de Informação Distribuídos - Têm como característica a integração das aplicações existentes, principal desafio uma aplicação conseguir “conversar” com a outra aplicação. Sistema de Processamento de Transação - Em geral, são aplicações centradas em transações de banco de dados. Transações podem conter sub-transações e acessar mais de um banco de dados. As transações devem ser: Atómicas: transação é indivisível Consistentes: não viola invariantes do sistema Isoladas: Permite transações concorrentes Duráveis: após o “commit” de uma transão as alterações feitas ficam gravadas Integração de Aplicações Empresariais - São sistemas onde os componentes de aplicações se comunicam diretamente um com o outro. Surgiram da necessidade de integrar as diversas aplicações de/entre empresas. Muitos modelos de comunicação entre aplicações: Chamadas de procedimento remoto (RPC – Remote Procedure Calls) – É uma tecnologia de comunicação entre processos que permite a um programa de computadorchamar um procedimento em outro espaço de endereçamento (geralmente em outro computador, conectado por uma rede) modelo cliente-servidor. Inovações de método remoto (RMI – Remote Method Invocations) – É uma interface de programação que permite a execução de chamadas remotas no estilo RPC em aplicações desenvolvidas em Java. Middleware orientado a mensagem (MOM – Message-oriented Middleware) - faz a mediação entre software e demais aplicações. É utilizado para mover ou transportar informações e dados entre programas de diferentes protocolos de comunicação, plataformas e dependências do sistema operacional. Seu objetivo é mascarar a heterogeneidade e fornecer um modelo de programação mais produtivo para os programadores de aplicativos. Sistemas Distribuídos Pervasivos A idéia básica da computação pervasiva é disponibilizar acesso computacional de modo invisível em todo lugar o tempo todo, sem que o usuário precise conhecer a tecnologia para se beneficiar dela, A estabilidade não é mais a regra. Entrada da computação móvel e embutida A instabilidade é o comportamento esperado Ausência geral de controle administrativo humano Configurado por seus proprietários Os dispositivos descobrem automaticamente seu ambiente e se encaixa o melhor que puderem Aspecto importante, os dispositivos se juntam ao sistema para acessar informações Não existe transparência!!! Três exemplos: Sistemas Domésticos Sistemas eletrônicos para tratamento de saúde Redes de Sensores Estilos Arquitetônicos São classificações abstratas com base em características de arquitetura. São quatro os estilos mais importantes: Arquiteturas em camadas Componentes organizados em camadas Cada camada se comunica apenas com as adjacentes Altamente hierarquizado Arquiteturas Baseadas em objetos Mais solta que em camadas Componentes se comunicam diretamente Comunicação por chamada de procedimento (remoto) Não hierarquizado Arquiteturas centradas em dados Processos se comunicam por meio de um repositório comum Baseadas em eventos Comunicação por propagação de eventos Processos fracamente acoplados Arquiteturas de Sistemas Distribuídos Arquiteturas Centralizadas Cliente X Servidor ou Requisição X Resposta. Um único servidor implementa a maioria dos componentes. Embora tenham surgido com um modelo em duas camadas, hoje são defendidas com no mínimo três níveis: Nível de Interface com os usuários – Manipula a interação com o usuário. Nível de Processamento – Mantém a funcionalidade central da aplicação. Nível de Dados – Age sobre o banco de dados ou sistemas de arquivos. Cada camada possui responsabilidades bem definidas e, normalmente, atuam em máquinas diferentes. Arquiteturas Descentralizadas A distribuição é horizontal. O cliente ou o servidor podem ser subdivididos fisicamente em partes logicamente equivalentes. Busca-se o equilíbrio da carga. Cada componente distribuído é completo do ponto de vista funcional e colabora com seus pares (peers) para atingir um objetivo comum. Normalmente, a arquitetura par-a-par (peer to peer) é, por definição, não hierárquica. Mas, pode ser construída de modo estruturado ou não-estruturado. Peer-to-peer Estruturado Lista de endereço dos pares Algoritmo determinístico para definição de rotas Peer-to-peer Não-estruturado Conhecimento local (só os pares vizinhos) Rotas aleatórias Um outro conceito importante é o de Super Par (Super Peer): um par que, embora não-hierárquico, possui atribuições de organização na comunicação entre pares. Contextualização: Sistema Operacional Camadas de Software Sistema Operacional A função do sistema operacional é fornecer acesso e gerenciar os recursos físicos (hardware) existentes em uma máquina: Processadores – CPU, Registradores, Memória Cache. Memória – Memória RAM. Comunicação – Barramentos da Placa Mãe. Storage – HD, Memoria Fash, Cd/Dvd Rom. Funcionalidades Básicas de um Sistema Operacional: Espera-se, de um Sistema Operacional, as seguintes características: Encapsulamento - Ocultar detalhes de sua implementação e prover apenas uma interface pública para acesso aos recursos. Proteção - Impedir que haja acesso indevido a recursos Concorrência - Prover acesso concorrente a recursos de forma transparente. Para prover concorrência o S.O. tem que garantir que cada processo seja executado concorrentemente e com um ambiente de execução independente. O isolamento é essencial para que um processo não afete outro processo seja intencionalmente ou maliciosamente, para isso, o S.O. fornece um “processador virtual” a cada um dos processos de maneira transparente. Processos: Ambientes de Execução Mesmo sendo transparente, a concorrência tem um custo, o qual está associado a criação, gerenciamento e isolamento dos ambientes de execução dos processos. Esse ambiente é composto por: Um espaço de endereçamento Recursos de comunicação (portas) Sincronização de Threads (concorrência) Recursos de alto nível (janelas, arquivos, etc.) Cada vez que um processo recebe acesso ao processador, uma sequência de passos deve ser executada (troca de contexto): Empacotar o processo em execução Transferí-lo para uma área de espera Buscar na área de espera o novo processo a executar Desempacotar o processo a executar Parte do projeto de um S.O. é focada na eficiência com a qual faz a troca de contexto. Threads Nas primeiras versões de S.O. (anos 70 e 80), cada ambiente de execução suportava apenas um processo, uma linha de execução. Com o passar o tempofoi implementado o conceito de Thread (linha de execução ou processos leves), cujo objetivo é minimizar o custo da troca de contexto. Cada processo pode ter uma ou mais threads. Multi-threads X Multi-Processos Processos multi-thread possuem uma ou mais threads (processos leves). Por compartilhar o ambiente de execução do processo, a criação e destruição de threads é mais barata e a troca de contexto no momento de sua execução é consideravelmente menor. Threads de um mesmo processo são razoavelmente independentes entre si, mas compartilham o espaço de endereçamento e tem seu ciclo de vida ligado ao do processo. Aplicativos multi-thread apresentam diversas vantagens. Uma das mais significativas diz respeito a chamadas bloqueantes. Exemplo: (acesso a disco, conexão remota), todo o seu funcionamento fica suspenso até o retorno dessa chamada. Mas se a chamada for em um thread apenas aquela thread ficara bloqueada. Vantagens: Criar uma nova thread em um processo é muito mais barato que criar um novo processo Realizar a troca de contexto entre threads é muito mais barato que realizá-la entre processos O compartilhamento de recursos entre Threads é mais simples que entre processos. Threads são capazes de explorar ambinetes com múltiplos processadores. Desvantagem: Por compartilharem o mesmo ambiente de execução, threads podem interferir no funcionamento umas das outras. A programação com threads (também chamada de programação concorrente) envolve alguns conceitos muito importantes: Condição de corrida Região crítica Variáveis de condição Semáforos Servidores e Clientes Multi-thread Em Sistemas Distribuídos, podemos aplicar o conceito Multi-thread tanto do lado cliente quanto do lado servidor. Vantagens cliente: Redução da latência na comunicação, com a abertura de diversos canais paralelos com o servidor. Evitar que chamadas bloqueantes congelem as respostas ao usuário. Exemplo: Browser web. Vantagens Servidor: Servidores com múltiplos processadores podem ter seu paralelismo aumentado. Capacidade de atendimento de múltiplos clientes ao mesmo tempo. Para essa última vantagem, existem algumas arquiteturas que podem ser exploradas. Arquitetura de Pool de Trabalhadores Ao ser iniciado o servidor, um pool fixo de threads é criado. Essas threas podem ser de dois tipos: Thread Despachante (Dispatcher Thread) - Responsável por receber as requisições e alocar uma thread operária para o atendimento. Thread Operária (Worker Thread) - Responsável por atender a requisição. Podem emitir chamadas bloqueantes. Arquitetura de Thread por Pedido Derivada da arquitetura de pool de trabalhadores, ela não cria uma quantidade fixa de threads operarias. Essas são criadas a medida em que forem sendo necessárias (a pedido). Uma vez atendido o pedido, a thread operária é destruída. A vantagem óbvia é o melhor gerenciamento de recursos. Desvantagem é gerada uma sobrecarga de operação por ocasião da criação e destruição da thread. Virtualização em Sistemas Distribuídos Processador virtual - Objetivo é abstrair e tornar transparente, à thread ou processo e detalhes da troca de contexto. Tipos de Virtualização: Máquina Virtual de Processo – Permite que um certo programa posso rodar em “sistemas operacionais” diferentes. (Exemplo: JVM). Monitor de Máquina Virtual – Cria um “computador virtual” baseando se no hardware da máquina hospedeira, aonde podemos instalar diversos sistemas operacionais sem a necessidade de formatação. (Exemplo: VMWare). Vantagem do Monitor de Máquina Virtual: Um mesmo hardware/S.O. pode emular diversos hardwares/S.O. diferentes. Facilidade de gerenciamento - Menos máquinas a gerenciar Aumento na portabilidade e flexibilidade - Facilidade na cópia e disponibilização de novos ambientes Aumento da confiabilidade e segurança - Isolamento total da aplicação e seu ambiente
Compartilhar