Sistemas Distribuídos Definições e Características principais de Sistemas Distribuídos
O que são Sistemas Distribuídos? Introdução Sistemas Distribuídos O que são Sistemas Distribuídos? “Um sistema distribuído é uma coleção de computadores independentes que aparecem para os usuários do sistema como um único computador.” (Tanenbaum) “Consiste de uma coleção de computadores autônomos ligados através de uma rede e equipados com software de sistemas distribuídos” (Coulouris)
Principais características Introdução Sistemas Distribuídos Principais características Diferenças entre os vários computadores e o modo como eles se comunicam estão, em grande parte, ocultas ao usuário; Usuários e aplicações podem interagir com um sistema distribuído de maneira consistente e uniforme, independentemente de onde a interação ocorra. O software de distribuição habilita os computadores a coordenar suas atividades e compartilhar recursos do sistema – hardware, software e dados; Hardware – máquinas autônomas; Software – os usuários pensam no sistema como um único computador.
Origem e História Introdução Sistemas Distribuídos Origem e História 1945 ... 1985: computadores grandes, caros e independentes! - Sistemas Centralizados CPU + Memória + periféricos + terminais No início da década de 80: dois avanços tecnológicos Microprocessadores poderosos pela metade do preço de mainframes. Redes locais ou LANs (local area networks) Resultado: sistemas compostos de várias CPUs conectadas em rede de alta velocidade.
Introdução Sistemas Distribuídos Origem e História O desenvolvimento de sistemas distribuídos iniciou em 1970-80 seguindo o progresso das redes de computadores de alta velocidade; Esse crescimento tem sido alcançado devido ao desenvolvimento de software para sistemas distribuídos destinados a suportar o desenvolvimento de aplicações distribuídas. Fatores que contribuem para a evolução dos Sistemas Distribuídos: Baixo custo dos microprocessadores; Interconexão e abrangência das redes; Aplicações multimídias em expansão;
Uso de Middleware para sistemas heterogêneos Introdução Sistemas Distribuídos Uso de Middleware para sistemas heterogêneos
Características principais de S.D. Sistemas Distribuídos Compartilhamento de recursos Flexibilidade ou Estendibilidade (openness) Concorrência Escalabilidade Tolerância a falhas Transparência Heterogeneidade
Características principais de S.D. Compartilhamento de Recursos Elementos compartilháveis em um sistema distribuído; Componentes de hardware (ex: disco e impressora); Compartilhados por conveniência de uso e redução de custos; Componentes baseados em software (ex: arquivos, bases de dados e relógios lógicos para sincronização); Compartilhamento de dados é um requisito essencial para muitas aplicações de computadores; Bancos de dados distribuídos; Aplicações; Gerenciador de Recursos Módulo de software responsável por gerenciar um conjunto de recursos de um tipo particular; Cada tipo de recurso requer políticas de gerenciamento próprias; Existem políticas de gerenciamento universais para recursos distribuídos?
Características principais de S.D. Concorrência Recurso Elementos compartilháveis em um sistema distribuído; Gerenciador de Recursos Módulo de software responsável por gerenciar um conjunto de recursos de um tipo particular;
Características principais de S.D. Flexibilidade ou Estendibilidade (openness) Um sistema pode ser dito aberto se permitir a adição de novos serviços no nível de sistema operacional, novos protocolos de comunicação e de compartilhamento de recursos; A estendibilidade é atingida através da especificação e disponibilização pública de interfaces de software; Sistemas distribuídos abertos devem fornecer: algum mecanismo uniforme para a comunicação entre processos; Interfaces públicas para a gerência de recursos compartilhados;
Características principais de S.D. Escalabilidade Performance (muitos usuários para poucos recursos) Exemplo: servidor para portais da Internet. Replicação de dados e caching Tolerância a falhas Baseado no fato que sistemas computacionais são sujeitos a falhas imprevisíveis; Prevenção: garantir a disponibilidade do sistema Redundância de hardware; Redundância de software; Recuperação de desastres
Características principais de S.D. Transparência Esconder do usuário e do programador de aplicações a complexidade da separação de componentes de um SD, de forma que o sistema seja percebido como um todo; Tipos de transparência: Transparência de acesso: permite que objetos locais e remotos sejam acessados a partir de operações idênticas; Transparência de localização: permite que um objeto seja acessado sem que o usuário tome conhecimento da sua localização; Transparência de concorrência: permite que vários processos operem concorrentemente em objetos compartilhados sem que estas operações incorram em interferências mútuas; Transparência de replicação: permite que múltiplas instâncias de objetos de dados sejam criadas para aumentar a confiabilidade e performance do sistema, sem afetar o trabalho dos usuários ou programadores de aplicação;
Características principais de S.D. Tipos de transparência (continuação) Transparência de falha: esconde a ocorrência de falhas para os usuários, fazendo com que os programas consigam completar suas tarefas mesmo na ocorrência de falhas de hardware ou de software; Transparência de migração: permite que os objetos de dados sejam movidos no sistema sem afetar os usuários; Transparência de performance: permite que o sistema seja reconfigurado dinamicamente para melhorar a sua performance em função da variação da carga de serviços; Transparência de escalabilidade: os sistemas e suas aplicações podem expandir sem afetar a estrutura ou algoritmos usados nas aplicações do usuário;
Características principais de S.D. Tolerância a falhas Transparência Heterogeneidade
Características principais de S.D. Heterogeneidade SDs modernos são inerentemente heterogêneos Redes (protocolos) Hardware computacional Sistemas operacionais Linguagens de programação Middleware Termo que descreve de forma genérica a camada de software que fornece uma abstração de programação que mascara a heterogeneidade da rede, sistema operacional ou linguagens de programação usadas; Exemplo: CORBA (várias plataformas) e Java RMI (limitado a Java) Esconde do programador de aplicações toda a complexidade associada à passagem de valores e sincronização entre sistemas heterogêneos.