Guia Completo de Sistemas Distribuídos: Conceitos e Prática
O que são Sistemas Distribuídos
Um sistema distribuído é um conjunto de computadores independentes que se apresenta para o usuário como um único sistema coerente.
Características Principais
- Conjunto de máquinas autônomas: Operam de forma independente.
- Comunicação: Realizada através da troca de mensagens.
Requisitos
- Alto grau de confiabilidade.
- Alto grau de segurança e privacidade.
- Suporte à extensibilidade.
- Suporte à distribuição massiva.
Desafios
- Heterogeneidade: Diferenças em hardware, software, sistemas operacionais e linguagens.
- Abertura: Capacidade de extensão de software e hardware.
- Acesso a recursos: Compartilhamento seguro e eficiente.
- Segurança: Garantia de confidencialidade, integridade e disponibilidade.
- Concorrência: Processos executando simultaneamente em recursos comuns.
- Paralelismo: Processos executando simultaneamente em processadores diferentes.
- Extensibilidade: Escalar sem perda de eficiência.
- Manipulação de falhas: Funcionamento correto mesmo sob falhas.
- Transparência: O sistema é visto como um todo, não como partes isoladas.
Vantagens e Desvantagens
Vantagens: Distribuição de pessoas, organizações e dados; aumento da confiabilidade e desempenho.
Desvantagens: Complexidade em falhas, sincronização e segurança, que podem afetar o desempenho.
Conceitos Relacionados
- Middleware: Camada de software que abstrai a complexidade da rede.
- Computação em Cluster: Computadores trabalhando em conjunto para processar tarefas subdivididas.
- Programação Paralela: Divisão de grandes tarefas em problemas menores resolvidos simultaneamente.
- Computação em Grade (Grid): Recursos reunidos de diversos locais para colaboração.
- Computação em Nuvem: Acesso a aplicativos e recursos via internet.
- Transação Aninhada: Transação dividida em subtransações (ex: Decolar.com).
- Sistemas Pervasivos: Sistemas que se comunicam para resolver problemas (ex: computação móvel).
Threads e Sockets
Threads
Programas com múltiplos fluxos de execução. Vantagens: processo leve, desempenho e compartilhamento de recursos.
- start(): Requisita recursos e chama o método
run(). - run(): Define a lógica de execução da thread.
Redes de Sensores
Dispositivos para coleta de dados. Podem ser cooperativos (com processamento local) ou não cooperativos (processamento centralizado).
Sockets
Modelo orientado à troca de mensagens via InputStream e OutputStream.
Arquiteturas de Sistemas Distribuídos
- Vertical: Camadas (RPC), Objetos (RMI), Eventos (Web-services), Espaço de dados compartilhado.
- Horizontal: Redes P2P (Centralizadas, Descentralizadas ou Híbridas).
Protocolos de Segurança P2P
- SSL: Integridade de dados.
- IPSEC: Proteção de pacotes na camada de rede.
- PKI: Túneis de comunicação para evitar interceptação.
Exemplos de Código
// Exemplo de Thread
public class THREAD {
public static void main(String[] args) {
GeraPDF gerapdf = new GeraPDF();
Thread threadDoPdf = new Thread(gerapdf);
threadDoPdf.start();
}
}
class GeraPDF implements Runnable {
public void run() {}
}// Exemplo Socket Servidor
ServerSocket servidor = new ServerSocket(12345);
Socket cliente = servidor.accept();