Aula 1 - Conceitos Fundamentais de Sistemas Distribuídos

13/02/2026

Um sistema distribuído é aquele no qual os componentes deste sistema se localizam em computadores interligados via rede. Esses componentes se comunicam e coordenam suas ações via trocas de mensagens. Os componentes conectados podem estar separados por qualquer distância. Eles podem estar em continentes separados, na mesma sala, ou até na mesma máquina.

Alguns exemplos de sistemas distribuídos incluem:

A própria definição já traz algumas consequências para o programador, entre elas:

Desafios

O compartilhamento de recursos e tolerância a falhas são fortes motivos para a construção e adoção de um sistema distribuído, mas os desafios desta arquitetura devem ser levados em consideração, como por exemplo a possível diferença entre componentes (linguagens de programação, versões de aplicações ou mesmo sistemas operacionais diferentes). Além do mais, um sistema distribuído pode ser um sistema aberto, isto é, novos componentes podem ser adicionados, removidos ou substituídos sem a necessidade de parar completamente a aplicação, o que traz ganhos de escalabilidade (funcionar bem mesmo quando a quantidade de usuários aumenta) e ao tratamento de falha de algum componente, mas também resulta em necessidades maiores de tratamentos de segurança e concorrência de componentes.

Heterogeneidade

Sistemas distribuídos permitem acessos a serviços e componentes por meio de um conjunto heterogêneo de computadores e redes. Alguns exemplos de aspectos que podem ser diferentes são:

Para que programas escritos por diferentes desenvolvedores para diferentes plataformas se comuniquem, alguns padrões devem ser estabelecidos e utilizados por todas as partes.

Sistema aberto

Um sistema computacional é aberto quando ele pode ser estendido e reimplementado de várias maneiras. Um sistema distribuído não necessariamente é um sistema aberto, e isso é determinado principalmente pelo grau com que novos serviços podem ser adicionados e disponibilizados para uso por uma variedade de programas clientes.

Um fator importante para um sistema aberto é que a especificação e documentação das principais interfaces de software dos componentes devem estar disponíveis para os desenvolvedores de software. Além do mais, o sistema deve ser desenvolvido permitindo o acoplamento de novas funcionalidades através destas interfaces.

Um grande desafio para um sistema distribuído aberto para extensões é a complexidade de sincronizar e coordenar muitos componentes elaborados de diferentes formas por diferentes pessoas.

Um exemplo de documentação de sistemas distribuídos abertos são as RFCs.

Segurança

A segurança das informações em sistemas distribuídos costumam ter um alto valor intrínseco para seus usuários. A segurança de recursos de informação tem três componentes:

Em sistemas distribuídos, um dos desafios de segurança está no fato de que as informações são trocadas entre os diversos componentes através de uma rede, e isso significa garantir a troca segura de mensagens, ocultando seu conteúdo durante o transporte e também identificar o usuário ou componente que enviou uma requisição. Esses dois desafios costumam ser resolvidos com o uso de técnicas de criptografia desenvolvidas para esse propósito. Entretanto, existem dois desafios de segurança que ainda não foram totalmente resolvidos:

Escalabilidade

Um sistema é descrito como escalável se permanece eficiente quando há um aumento significativo no número de recursos utilizados ou usuários conectados. Projetar um sistema distribuído escalável apresenta os seguintes desafios:

Tratamento de falhas

Quando ocorrem falhas no hardware ou software, os programas podem produzir resultados incorretos, ou mesmo pararem sua execução. As falhas em um sistema distribuído costumam ser parciais, isto é, alguns componentes falham, enquanto outros continuam funcionando. Desta forma, a detecção e tratamento de falhas pode ser mais difícil. Algumas técnicas para tratar falhas incluem:

Concorrência e sincronização

Durante o dia a dia de uso de um sistema distribuído há sempre a possibilidade de que vários clientes tentem acessar um recurso compartilhado ao mesmo tempo. É possível, por exemplo, que duas pessoas comprem ao mesmo tempo a última passagem de um vôo, pois o sistema as processou simultaneamente e considerou as duas válidas.

Uma forma de resolver esse problema é aceitar e tratar apenas um pedido de um cliente por vez. Por mais que garanta a consistência, essa limitação diminui muito o desempenho de um sistema, que poderia permitir o processamento de vários pedidos ao mesmo tempo.

Como qualquer objeto que represente um recurso compartilhado em um sistema distribuído deve ser responsável por garantir que ele opere corretamente em um ambiente concorrente, é necessário a utilização de técnicas de consistência e sincronização, como por exemplo semáforos.

Transparência

A transparência significa a ocultação da natureza distribuída do sistema. O usuário final ou o programador de algum aplicativo de integração consegue observar apenas o sistema como um todo, e não o conjunto de componentes independentes.