Prévia do material em texto
Arquiteturas de Sistemas Distribuidos Estilos Arquitetônicos (Andrew Tanenbaum) Andrew Tanenbaum, um dos principais estudiosos de sistemas distribuídos, descreve vários estilos arquitetônicos que são comuns nesses sistemas: 1. Arquitetura Cliente-Servidor: Divide o sistema em clientes, que solicitam serviços, e servidores, que fornecem serviços. 2. Arquitetura em Camadas: Organiza o sistema em camadas hierárquicas, onde cada camada oferece serviços para a camada imediatamente superior. 3. Arquitetura Baseada em Objetos: Componentes são objetos que interagem entre si através de interfaces bem definidas. 4. Arquitetura Centrada em Dados: Dados são o ponto central e vários componentes interagem com esses dados (e.g., repositórios de dados). 5. Arquitetura Baseada em Eventos: Componentes se comunicam principalmente através da geração e manipulação de eventos. 6. Arquitetura Baseada em Microserviços: Funcionalidades do sistema são divididas em pequenos serviços independentes que se comunicam entre si. Componentes e Conectores Componentes: Unidades modulares que executam funções específicas e têm interfaces bem definidas para interagir com outros componentes. Conectores: Mecanismos que permitem a comunicação e coordenação entre componentes, como chamadas de procedimento remoto (RPC), filas de mensagens, ou sistemas de eventos. Configurações A configuração de um sistema distribuído refere-se ao arranjo específico de componentes e conectores em um dado momento, que pode mudar dinamicamente em sistemas adaptativos. Arquitetura em camadas Nesta arquitetura, o sistema é dividido em várias camadas onde cada camada tem uma responsabilidade específica e depende apenas da camada imediatamente abaixo. Um exemplo comum é a arquitetura de rede OSI (Open Systems Interconnection). Arquitetura baseado em objetos Nesta arquitetura, o sistema é modelado como um conjunto de objetos interagindo, onde cada objeto encapsula dados e comportamento. A interação ocorre através de métodos e chamadas de procedimento. Arquitetura centrada em dados Sistemas centrados em dados organizam a comunicação e coordenação em torno de um repositório de dados central. Exemplos incluem sistemas de banco de dados e sistemas de arquivos compartilhados. Arquitetura baseado em eventos Nesta abordagem, componentes comunicam-se predominantemente através de eventos. Um evento é uma notificação de que algo aconteceu, e componentes interessados nesse evento reagem de acordo. Arquitetura baseado em microserviços Este estilo divide o sistema em serviços pequenos e independentes, cada um executando uma única função. Eles se comunicam através de APIs leves e podem ser desenvolvidos, implantados e escalados de forma independente. RPC (Remote Procedure Call) RPC permite que um programa execute uma função ou procedimento em outro endereço de espaço, que pode estar em outro computador na rede. É uma forma de abstrair a comunicação interprocesso em sistemas distribuídos. Arquitetura de sistemas Refere-se à estrutura fundamental de um sistema, abrangendo componentes, relacionamentos, e princípios de design que orientam seu desenvolvimento e evolução. Arquitetura centralizada (camada de aplicação) Nesta arquitetura, o processamento e a gestão de dados ocorrem principalmente em um servidor centralizado, com clientes que consomem os serviços fornecidos por este servidor. Arquitetura multidivididas Divide o sistema em múltiplas divisões lógicas ou físicas, cada uma com responsabilidades distintas. Exemplos incluem arquiteturas de três camadas (apresentação, lógica de negócios, e dados). Gerenciamento do sistema Inclui todas as atividades de manutenção e operação de um sistema distribuído, como monitoramento de desempenho, gestão de falhas, e provisionamento de recursos. Arquitetura de duas divisões físicas Inclui todas as atividades de manutenção e operação de um sistema distribuído, como monitoramento de desempenho, gestão de falhas, e provisionamento de recursos. Arquitetura de três divisões físicas Inclui três partes: cliente, servidor de aplicação e servidor de banco de dados. Esta separação melhora a modularidade e escalabilidade do sistema. Distribuição vertical e horizontal Distribuição Vertical: Divisão do sistema em camadas funcionais. Distribuição Horizontal: Divisão do sistema em várias instâncias do mesmo tipo de componente, como múltiplos servidores de aplicação para balanceamento de carga. Arquitetura descentralizadas Distribui a responsabilidade e controle por todo o sistema, sem um ponto central de controle. Exemplos incluem redes peer-to-peer. Peer-to-peer Em redes P2P, todos os nós têm capacidades e responsabilidades equivalentes. Cada nó pode atuar tanto como cliente quanto como servidor. Arquiteturas Hibridas – Edge Combina processamento centralizado com processamento local (na borda). Dispositivos de borda realizam parte do processamento, reduzindo a carga no servidor central e melhorando a latência. Sistemas de Servidor de Bordo Dispositivos de borda, como roteadores e gateways, desempenham funções de servidor, processando dados localmente antes de enviar ao servidor central. Arquitetura Hibridas – Colaborativas Combina diferentes abordagens arquitetônicas para otimizar desempenho, resiliência e escalabilidade. Um exemplo é o BitTorrent, que usa um modelo híbrido de centralização e descentralização para a troca de arquivos. BitTorrent Um protocolo P2P para distribuição de arquivos que divide os arquivos em pequenos pedaços, distribuindo-os entre os usuários. Cada usuário (peer) pode baixar e enviar pedaços simultaneamente, o que melhora a eficiência e velocidade de distribuição.