Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

SISTEMAS 
DISTRIBUÍDOS
Dalvan Jair Griebler
Tipos de sistemas 
distribuídos
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Descrever os tipos de sistemas distribuídos.
 � Aplicar os tipos de sistemas distribuídos em sistemas reais.
 � Classificar as principais características em comum entre os modelos 
expostos.
Introdução
Logo que a computação começou a ser utilizada, os sistemas eram desen-
volvidos considerando uma arquitetura centralizada. Isso ocorria devido a 
limitações principalmente relacionadas ao hardware, como, por exemplo, 
a configuração de redes. Com o avanço das redes de computadores, 
e a necessidade da distribuição dos sistemas, começamos a desenvolver 
diferentes tipos de sistemas distribuídos, que melhor se adequassem à 
necessidade do desenvolvedor, empresa ou instituição, e ao objetivo 
do sistema.
Sistemas distribuídos podem ser classificados em três grandes tipos: 
computacionais, que atendem a aplicações de computação intensiva; 
de informação, projetados para responder a aplicações corporativas que 
envolvam acesso a serviços distribuídos; e pervasivos, que atendem a 
aplicações que executam em dispositivos embarcados e móveis. 
Neste capítulo, você conhecerá mais detalhes sobre os tipos de sis-
temas distribuídos, exemplos de suas reais aplicações e as características 
mais comuns nos modelos expostos.
1 Tipos de sistema distribuído
Devido à complexidade envolvida no projeto de sistemas distribuídos, é impor-
tante saber diferenciá-los e entender como são desenvolvidos. Essa classificação 
ajuda a evidenciar e distinguir os desafios de cada um deles.
Sistemas computacionais distribuídos
Esses sistemas são construídos para tarefas que necessitam de alto desem-
penho computacional. Segundo Tanenbaum e Van Steen (2007), podem ser 
subdivididos em clusters computacionais e grades computacionais. Os clusters 
computacionais, conhecidos como supercomputadores, possuem uma coleção 
de computadores dedicados e ligados por meio de uma rede de interconexão 
de alta velocidade. Esse tipo de sistema, tornou-se popular quando as estações 
de trabalho diminuíram de preço e aumentaram seu desempenho. Com isso, 
a construção de supercomputadores passou a ser atrativa do ponto de vista 
financeiro e técnico. Em geral, esses sistemas são usados para programação 
paralela, na qual um único programa de computação intensiva pode ser exe-
cutado em múltiplas máquinas.
A Figura 1 ilustra um exemplo de cluster baseado em sistemas operacionais 
(SO) Linux, o qual é conhecido como Beowulf e foi proposto por Becker et al. 
(1995). Cada nodo possui instalado um mesmo SO local e estão conectados 
com o mesmo tipo de rede. Esses nodos são controlados e gerenciados pelo 
nodo mestre, responsável por alocar os nodos auxiliares para um determinado 
programa paralelo, gerenciar uma fila de lotes de trabalhos e oferecer uma 
interface de sistema para os usuários interagirem. Dessa forma, o mestre atua 
como se fosse um middleware para a execução de programas e o gerenciamento 
do cluster, ao passo que os nodos auxiliares precisam apenas do SO. 
Nesse contexto, as bibliotecas de paralelismo são muito importantes, pois 
permitem o desenvolvimento de programas paralelos, sendo instaladas e 
configuradas no nodo mestre. Essas bibliotecas focam em uma interface 
avançada para troca de mensagens e não oferecem mecanismos para lidar 
com falhas, segurança e outros desafios de sistemas distribuídos. Outro as-
pecto importante a ser observado é o acesso à Internet, gerenciado pelo nodo 
mestre, que pode compartilhar com os demais nodos por meio de uma rede 
padrão. Uma rede de alta velocidade pode ser usada para a comunicação entre 
os processos distribuídos. Observe que, nesse tipo de sistema distribuído, 
o usuário não tem a ilusão de um sistema único e precisa lidar com os desafios 
que envolvem a distribuição da carga de processamento.
Tipos de sistemas distribuídos2
Figura 1. Exemplo de um cluster computacional Beowulf.
Fonte: Adaptada de Tanenbaum e Van Steen (2007).
Aplicação de
gerenciamento
Nodo mestre Nodo auxiliar Nodo auxiliar
Bibliotecas de
paralelismo
Componentes
da aplicação
paralela
Componentes
da aplicação
paralela
SO local SO local SO local
Rede padrão
Rede de alta velocidade
Rede internet
As grades computacionais são formadas por sites geograficamente distribu-
ídos e interligados pela internet, formando um sistema único. Cada site pode ser 
um supercomputador. Em uma grade computacional, existe uma heterogeneidade 
maior, em que rede, SO, política de segurança e domínios administrativos não 
são os mesmos. Uma grade computacional, segundo Tanenbaum e Van Steen 
(2007), permite que recursos de diferentes organizações possam ser colocados à 
disposição de um grupo de pessoas ou instituições, em formato de uma organiza-
ção virtual. Os recursos a serem compartilhados podem ser supercomputadores, 
sistemas de armazenamento em larga escala e banco de dados. 
A arquitetura de sistemas de computação em grade pode ser organizada 
em camadas. A primeira camada, de mais baixo nível (nível 1), oferece uma 
interface para reservar os recursos locais de um site. A próxima camada (nível 2) 
é a de abstração e envolve oferecer protocolos de comunicação para suportar 
as transações da grade, as quais permitem o uso de múltiplos recursos. Além 
disso, o nível 2 é responsável por alocar um único recurso, bem como chamar 
uma função que retorna as informações de configuração, de um recurso ou 
vários, para realizar operações de criação de processos e leitura de dados. 
Na camada de nível 3, o sistema é responsável por gerenciar múltiplos recursos 
e usuários, como serviços de descoberta de recursos, alocação e escalonamento 
de tarefas para múltiplos recursos, replicação de dados, entre outros. O nível 4 
é a camada de aplicação, na qual, dentro de uma organização virtual, as 
aplicações executam em um ambiente de grade computacional.
3Tipos de sistemas distribuídos
Sistemas de informação distribuídos
Os sistemas de informação distribuídos têm como desafio lidar com a intero-
perabilidade, que é a característica que permite que um sistema se comunique 
com outro de forma transparente. Este tipo de sistema normalmente é acessado 
por meio de um navegador ou aplicativo que se comunica com um provedor. 
Além disso, diversos tipos de dispositivos podem se conectar à internet e 
acessar esse serviço. A interoperabilidade é cada vez mais necessária no 
meio corporativo. Os dados e o processamento ficam do lado do provedor. 
Os clientes enviam requisições que, depois de processadas, são devolvidas 
ao cliente, e toda essa operação deve ocorrer, preferencialmente, de maneira 
transparente ao usuário. 
A Figura 2 ilustra um cenário clássico de um sistema de informação distri-
buído, que precisa lidar com várias transações vindas de diferentes clientes e 
distribui-las para os servidores que possuem banco de dados. As informações 
são armazenadas ou consultadas, dependendo do tipo de transação, e o mo-
nitoramento do processamento de transações é necessário para permitir que 
uma aplicação do cliente consiga acessar múltiplos bancos de dados.
Figura 2. Monitoramento do processamento de transações.
Fonte: Adaptada de Tanenbaum e Van Steen (2007).
Aplicação
cliente
Transação
Requisição
Requisição
Requisição
Servidor
Servidor
Servidor
Banco de dados
Banco de dados
Banco de dados
Requisição
Resposta
Resposta
Resposta
Resposta
Monitor de
transações
Tipos de sistemas distribuídos4
Como pode ser observado na Figura 2, esse tipo de sistema se assemelha 
muito à lógica e à forma como as transações e operações ocorrem em um banco 
de dados. As transações podem ser do tipo atômicas, consistentes, isoladas e 
duradouras. Segundo Tanenbaum e Van Steen (2007), observou-se a necessi-
dade de desassociar as aplicações corporativas dos modelos de transações de 
banco de dados, para permitir a integração com outras aplicações.A ideia é 
que os componentes da aplicação possam se comunicar diretamente, sem usar 
um sistema de monitoramento de transações. Esse advento permitiu o surgi-
mento de diferentes middlewares de comunicação, como a chamada remota 
de procedimento, do inglês remote procedure calls (RPC), e a invocação de 
métodos remotos, do inglês remote method invocations (RMI). 
O problema em usar RPC e RMI é que, tanto o processo que pede como o 
que recebe, precisa estar ativo e executando no mesmo tempo de comunicação, 
além de saber se referir um ao outro. Uma opção para isso são os middlewares 
orientados à mensagem, do inglês message-oriented middleware (MOM), 
os quais atuam enviando mensagens para os seus pontos de contatos ou indiví-
duos. As aplicações podem indicar o tipo de mensagem para que o middleware 
se encarregue de entregá-la para as aplicações. Esses são chamados de sistemas 
publish/subscribe e são amplamente adotados em aplicações corporativas.
Sistemas pervasivos distribuídos
O surgimento de dispositivos móveis e embarcados introduziu um novo desafio: 
lidar com a instabilidade. 
Os dispositivos em sistemas pervasivos são classificados como pequenos, 
móveis, com pouca capacidade de bateria e se conectam usando rede sem fio, 
além disso, não precisam ser administrados por uma pessoa especialista, pois o 
usuário é quem o configura. Por outro lado, esses sistemas precisam descobrir 
em que ambiente estão e como se inserir nele da melhor forma possível. Assim, 
segundo Tanenbaum e Van Steen (2007), as aplicações pervasivas precisam 
herdar as seguintes características:
 � abranger mudanças de contexto de forma contínua, como detectar 
que a rede não está mais disponível no momento e reagir, tentando se 
conectar a outro ponto de acesso ou tomar outra ação mais apropriada;
 � ser facilmente configuradas pelo usuário do sistema, de diferentes 
formas e de maneira fácil ou automática, pois muitos dispositivos serão 
usados pelos usuários;
5Tipos de sistemas distribuídos
 � permitir o fácil acesso a informações ou recursos, para que o usuário 
possa facilmente ler, armazenar, gerenciar e compartilhar; 
 � lidar com a sincronização dos dados, pois os sistemas pervasivos tem 
suas conexões interrompidas com maior frequência. 
Portanto, é possível concluir que os sistemas pervasivos distribuídos devem 
ser capazes de se adaptar ao contexto do ambiente, lidar com a incerteza e a 
heterogeneidade. Além disso, precisam ser eficientes na descoberta de serviços 
e reagir de forma apropriada. A abstração é um aspecto delicado nesse tipo 
de sistemas. Em sistemas pervasivos, o usuário precisa ter conhecimento 
mínimo sobre todas as características do sistema, para que ele possa operar. 
Pense em um ambiente como uma smarthome, onde o usuário vai adicionando 
os equipamentos inteligentes que serão gerenciados pelo seu telefone celular. 
Neste caso, é melhor deixar menos abstrato, visto que abstração se refere a 
focar apenas nos aspectos mais essenciais do sistema. É preferível não esconder 
os detalhes da distribuição de dados, processos e controle, pois, dessa forma, 
tanto usuário como sistema conseguem se adaptar melhor as circunstâncias 
e requisitos do ambiente. 
Na Figura 3, é demonstrado um contexto em que o usuário visita uma 
organização e deseja acessar serviços que estão na Internet, Intranet anfitriã 
e sua rede doméstica. O usuário pode utilizar essa rede com seu notebook 
ou smartphone, o qual possui acesso a rede sem fio. Uma vez conectado, 
consegue acessar os recursos da intranet, como a impressora e a internet. 
Com seu smartphone, consegue acesso direto à Internet, usando a rede 4G, 
e busca sua localização com seu global positioning system (GPS). A câmera 
digital está conectada na rede local e também pode interagir, enviando fotos 
para um projetor ou impressora. Segundo Coulouris et al. (2013), esse cenário 
requer operação conjunta espontânea, na qual as associações são criadas e 
destruídas conforme a demanda. O desafio é permitir operações rápidas e 
convenientes, em um ambiente no qual o usuário nunca esteve antes, e seus 
equipamentos serem capazes de descobrir e associar os serviços de forma 
espontânea e adequada. 
Tipos de sistemas distribuídos6
Figura 3. Exemplo de sistema pervasivo distribuído usando equipamentos portáteis.
Fonte: Adaptada de Coulouris et al. (2013).
Internet
Rede de telefonia 4G
Intranet doméstica
Sinal de satélite GPSTelefone móvel
NotebookSite an�trião
Roteador sem �o
Intranet an�triã
Impressora
Câmera
Sistemas de saúde eletrônicos são exemplos de sistemas pervasivos distribuídos. 
Eles são usados para monitorar o estado dos pacientes e notificar os médicos sobre 
a condição física em que se encontram. Em alguns casos, podem ser usados para 
prever uma mudança de estado ou problema, por exemplo, um ataque cardíaco. 
Outra finalidade é evitar que as pessoas fiquem hospitalizadas. 
A Figura 4 ilustra um sistema de saúde pessoal, em que existem vários sensores 
espalhados pelo corpo, comunicando-se por uma rede. Note que existem dois mo-
delos de armazenamento de dados, o interno (a) e externo (b). A vantagem de usar 
um dispositivo interno para armazenamento é que ele também pode gerir a rede. 
No modelo de armazenamento externo, é preciso comunicar com uma rede sem fio 
externa. Nessa configuração, é necessário um dispositivo transmissor, que gerencie a 
rede de sensores e envie os dados para armazenamento. Como a rede externa é menos 
confiável, um modelo híbrido é o mais apropriado nesse cenário, em que os dados são 
guardados internamente e enviados para um armazenamento externo permanente, 
de tempos em tempos. As principais questões nesse tipo de sistema pervasivo são: 
 � maneiras de monitorar os dados; 
 � evitar perdas de dados; 
 � infraestrutura para gerenciar e propagar os alertas; 
 � permissão para o diagnóstico on-line; 
 � robustez no monitoramento; 
 � segurança e privacidade dos dados.
7Tipos de sistemas distribuídos
Sensor de
inclinação
Sensor de
eletrocardiograma
Agregação
dos dados
Sensores de
monitoramento
a) Rede do corpo b) Rede do corpo
Transmissor
Armazenamento
externo
Fonte: Adaptada de Tanenbaum e Van Steen (2007).
2 Exemplos de sistemas distribuídos
Sistemas distribuídos fazem parte da nossa realidade em aplicações compu-
tacionalmente intensivas, corporativas, orientadas a serviço, embarcadas, 
entre outros. A seguir, você verá alguns exemplos reais do uso de sistemas 
distribuídos e os principais desafios enfrentados no seu desenvolvimento.
Pesquisa na internet
A pesquisa de conteúdo na web realizada por meio de buscadores como Google, 
Yahoo!, Baidu e Bing facilitou e simplificou a forma de encontrar informações 
na internet. Esses mecanismos indexam o conteúdo disponível em um grande 
banco de dados distribuído, classificando e organizando a informação. O con-
teúdo tem diferentes formatos e estilos, que vão desde páginas, vídeo, áudio, 
imagens, livros etc. Segundo Coulouris et al. (2013), a web possuí bilhões de 
páginas e trilhões de endereços.
Entre os mecanismos citados, o Google se tornou o mais popular e mais 
eficiente de todos, sendo um exemplo de projeto bem-sucedido e com uma 
infraestrutura geograficamente distribuída. É possível afirmar que se trata 
de uma das instalações mais robustas do mundo, que, ainda, incorpora e 
comporta outros serviços, como o armazenamento e o compartilhamento 
de arquivos, editores, streaming de vídeo, mapas, e-mail, agenda e muitos 
outros. Coulouris et al. (2013) sumarizam os destaques do sistema distribuído 
do Google da seguinte forma:
Tipos de sistemas distribuídos8
 � infraestrutura física subjacente, consistindo em grandes números de 
computadores interligados em rede, localizados em centros de dados 
por todo o mundo;
 � sistema de arquivos distribuído projetado para suportar arquivos muito 
grandes e fortemente otimizados para o estilo de utilização exigido 
pela busca e por outros aplicativos do Google (especialmente aleitura 
de arquivos em velocidade alta e constante);
 � sistema associado de armazenamento distribuído e estruturado, que 
oferece rápido acesso a conjuntos muito grandes de dados;
 � serviços que oferecem funções para sistemas distribuídos, como blo-
queio e acordo;
 � modelo de programação que suporta o gerenciamento de cálculos para-
lelos e distribuídos muito grandes na infraestrutura subjacente.
Computação em nuvem
Segundo Coulouris et al. (2013), a maturidade da infraestrutura dos sistemas 
distribuídos tornou possível ofertar e vender recursos como uma commodity ou 
um serviço, análogo ao formato de venda de água e eletricidade (o usuário paga 
somente pelo que usa). No contexto computacional, isso pode ser aplicado aos 
recursos físicos e lógicos. Por exemplo, ofertar armazenamento e processamento, 
bem como serviços de software, como e-mail e agendas. Computação em nuvem 
é termo usado para definir esse modelo de sistema distribuído.
Conforme a definição do National Institute of Standards and Technolo-
gies (NIST), de Mell e Grance (2011), uma nuvem computacional pode ser 
implantada para atender inquilinos no mundo todo (nuvem pública) ou apenas 
usuários de dentro de uma organização (nuvem privada). Existe a possibilidade 
de implantar uma nuvem que possua parte dos recursos privados e outra, 
públicos (nuvem híbrida). Ainda, é possível ter uma nuvem que integre recursos 
de nuvens pública, privada e híbrida, permitindo que usuários de diferentes 
organizações colaborem entre si e compartilhem recursos (nuvem comunitária). 
Essas nuvens, baseiam-se nos modelos de referência para oferta dos serviços, 
que se dividem em três principais categorias: infraestrutura como um serviço, 
do inglês Infrastructure as a Service (IaaS), plataforma como um serviço, do 
inglês Platform as a Service (PaaS), e software como um serviço, do inglês 
Software as a Service (SaaS).
9Tipos de sistemas distribuídos
Considerado como modelo de base, o IaaS entrega infraestrutura computa-
cional sob demanda, por meio da virtualização de hardware, unidade de arma-
zenamento e rede. O hardware é virtualizado para permitir a venda de máquinas 
virtuais, usadas em processamento e computação. Ao usuário, é oferecido uma 
interface para acessar e configurar essas máquinas virtuais (instâncias virtuais). 
A precificação desse recurso é, geralmente, realizada por hora de uso, e o valor 
varia de acordo com a capacidade ou característica do hardware virtual. A uni-
dade de armazenamento é virtualizada em formato de espaço em disco (usado 
para complementar o hardware virtualizado e oferecer um armazenamento 
persistente) ou armazenamento de objetos (usados para armazenar entidades). 
A virtualização de rede se refere aos serviços usados para gerenciá-la entre as 
instâncias virtuais e a conectividade com a internet ou rede local.
O modelo PaaS tem como objetivo entregar ambientes de execução escalá-
veis e elásticos sob demanda, bem como hospedar a execução de aplicações. 
Um middleware é responsável por abstrair a criação do ambiente no qual as 
aplicações irão executar e ser desenvolvidas. O provedor de serviço é respon-
sável por oferecer a escalabilidade (mais instância se necessário) e gerenciar 
as falhas (evitar indisponibilidade). Os usuários, por sua vez, se preocupam 
apenas com o desenvolvimento da aplicação, usando as bibliotecas oferecidas 
pelo provedor. Nesse modelo, existe um nível de abstração maior no formato 
em que os serviços são entregues ao usuário. Não é necessário se preocupar 
com infraestrutura computacional, armazenamento e rede.
No nível mais alto de abstração da computação em nuvem se encontra o 
modelo SaaS, cuja característica básica é a maior parte dos serviços serem 
acessados por meio de um navegador. Por exemplo, edição de texto, plani-
lhas, apresentações, figuras, imagens, entre outros são configurados em um 
ambiente que possa suportar o acesso de várias pessoas ao mesmo tempo no 
navegador. Os usuários desconhecem a localização dos recursos. O provedor 
pode otimizar esse serviço de forma que vários usuários compartilharem 
o uso dos recursos computacionais de uma instância, sem que percebam e, 
ao mesmo tempo, garantir a privacidade e a segurança das informações.
A popularização da computação em nuvem traz muitos benefícios para o 
usuário, que paga apenas pelo que usar, tem acesso aos recursos sob demanda, 
os preços são competitivos, é simples acelerar e escalar aplicações, a alocação 
de recursos é eficiente, tem eficiência energética, uso e criação de serviço de 
terceiros sem vinculação. Exemplo disso são os provedores de nuvem pública, 
como a Amazon, o Google Cloud e o Microsoft Azure. Se você precisa testar 
um programa que está desenvolvendo, você pode acessar o portal do provedor, 
realizar o cadastro e contratar instâncias com SO pré-instalado em minutos. 
Tipos de sistemas distribuídos10
O acesso amplo a rede é um grande desafio, principalmente no contexto dos 
provedores públicos, uma vez que a internet não é confiável e vários usuários 
ainda possuem uma largura de banda baixa. Uma empresa que pretende colocar 
seus serviços em um provedor público deve considerar que as atividades e 
as operações da empresa dependem da disponibilidade da internet. Outro 
ponto crítico é a privacidade, pois, dependendo do serviço que você utiliza 
na nuvem, você não precisará assinar um contrato ou pagar por um serviço, 
mas dados e informações pessoais que ficam armazenados nos provedores 
podem ser usados para outras finalidades. Mesmo que você pague ou contrate 
um serviço, os provedores não conseguem garantir total sigilo e privacidade. 
Existem muitos desafios inerentes aos sistemas distribuídos, como segu-
rança, abstração, tolerância a falhas, qualidade de serviço, alta disponibilidade e 
escalabilidade. É provável que o mais desconfortável deles seja ficar dependente 
de provedores. Isso acontece, principalmente, em aplicações desenvolvidas 
usado as bibliotecas do provedor contratado, porque, ao mesmo tempo que 
ajudam na produtividade de desenvolvimento para nuvem, elas deixam o código 
e a aplicação dependente dele. Caso o provedor aumente significativamente os 
preços dos produtos e você deseje hospedar sua aplicação em outro provedor, 
isso pode não ser viável, pois requer que a aplicação seja reescrita. Essa ação 
pode gerar um grande esforço de programação e investimento financeiro. 
É muito importante atentar para todos esses detalhes na hora de escolher o 
provedor e o projeto do sistema.
Serviços de multimídia
Aplicações multimídia são aplicativos que permitem a transmissão de vídeo, 
áudio e texto em um fluxo contínuo e em tempo real, podem, também, serem 
armazenadas e compartilhadas para posterior acesso pelos usuários. Youtube e 
Facebook são exemplos de aplicações que atuam com multimídia, permitindo 
a transmissão de jogos de futebol, shows e telejornais. O desafio no desenvol-
vimento desse tipo de aplicação está na capacidade de usar a largura de banda 
com eficiência e entregar com qualidade os serviços para diferentes usuários, 
sejam eles em smartphones, televisões ou computadores. Compressão, codi-
ficação e decodificação são fundamentais para reduzir o consumo da largura 
de banda. Além disso, é preciso lidar com diferentes latências de rede, pois os 
usuários estão geograficamente distribuídos. Coulouris et al. (2013) destacam 
as principais exigências da infraestrutura distribuída subjacente:
11Tipos de sistemas distribuídos
 � dar suporte a uma variedade (extensível) de formatos de codificação 
e criptografia, como a série moving picture expert group (MPEG) de 
padrões (incluindo o popular padrão MP3) e HDTV; 
 � fornecer mecanismos para garantir que a qualidade desejada de serviço 
possa ser obtida; 
 � fornecer estratégias de gerenciamento de recursos associados, incluindo 
políticas de programação apropriadas para dar suporte à qualidade de 
serviço desejada; 
 � entregar estratégias de adaptação para lidar com a inevitávelsituação, 
em sistemas abertos, em que a qualidade de serviço não pode ser obtida 
ou mantida.
3 Características dos sistemas distribuídos
O projeto de aplicações e sistemas distribuídos apresentam desafios, tanto 
similares como distintos. A seguir, você verá as características similares e as 
diferenças em relação aos tipos de sistemas distribuídos.
Heterogeneidade
Segundo Coulouris et al. (2013), a heterogeneidade está presente nas redes, 
hardware, SO, linguagens de programação e códigos dos desenvolvedores. 
Enquanto clusters geralmente são formados por hardware e rede do mesmo 
fabricante ou modelo e o mesmo SO, as grades computacionais possuem 
sites com hardware, rede e SO muito distintos. Em sistemas corporativos, 
o desafio é permitir que a aplicação cliente seja acessada em uma variedade de 
hardware, rede e SO, se tornando ainda maior quando esses sistemas precisam 
se comunicar com outros, tendo que lidar com diferentes códigos de desen-
volvedores e linguagens de programação. O maior grau de heterogeneidade 
é atingido nos sistemas distribuídos pervasivos. 
Uma forma de mitigar esse desafio em sistemas distribuídos é usar e de-
senvolver middlewares, o que é mais comum em sistemas coorporativos. 
Em sistemas distribuídos computacionais, a programação é de mais baixo nível, 
na qual a comunicação entre os programas ocorre por troca de mensagens 
usando o mesmo SO. O uso de máquina virtual tem permitido um grande 
avanço para lidar com a heterogeneidade de hardware, e um exemplo disso é 
a Java Virtual Machine (JVM). De acordo com Coulouris et al. (2013), o uso 
Tipos de sistemas distribuídos12
de programas em Java-script é o método mais popular para inserir código 
móvel em páginas web.
Sistemas abertos
Um sistema aberto precisa ter a possibilidade de ser estendido e reimplementado 
de várias maneiras, a depender do seu objetivo e das restrições impostas no 
projeto de uma aplicação. Os sistemas coorporativos são, geralmente, mais 
fechados e não possuem interesse que terceiros estendam as funcionalidades. 
Isso é muito particular de cada empresa de software. Tornar um sistema dis-
tribuído aberto traz vários benefícios, como a colaboração e a depuração de 
código e o aumento da capacidade da solução. Em sistemas pervasivos, por 
exemplo, existe uma request for comments (RFC), que especifica os formatos 
para as medições de sensores e parâmetros dos dispositivos (RFC 8428). 
Ainda, há a World Wide Web Consortium (W3C), que publica os padrões de 
funcionamento e interpretação do conteúdo na internet. 
Em sistemas distribuídos computacionais, existem bibliotecas de troca de 
mensagem para programação paralela e que definem um padrão para suas 
interfaces. Assim, cada um pode implementar sua versão, seja para otimizar 
a comunicação em determinados tipos de rede ou implementar técnicas de 
distribuição dos dados com comportamentos diferentes. Em todos os tipos 
de sistemas distribuídos, a adoção de padrões abertos permite que eles se 
comuniquem com terceiros ou outros tipos de sistemas.
Segurança
A segurança em sistemas distribuídos tem três preocupações, conforme Cou-
louris et al. (2013): confidencialidade, integridade e disponibilidade. Portanto, 
lidar com a confidencialidade e a integridade é um grande desafio em sistemas 
pervasivos e corporativos, uma vez que os usuários acessam e compartilham 
recursos por meio de uma rede aberta, como a internet. Técnicas de criptografia 
têm sido utilizadas para resolver essas questões. No caso de clusters e grades 
computacionais, é comum que seja usado uma rede local e mais controlada, 
pois, assim, os riscos são menores. 
Em um cluster ou grade computacional é importante garantir que a mensa-
gem chegue íntegra ao destino, caso contrário, o programa paralelo termina sua 
execução com inconsistência de dados. Isso pode ser resolvido com técnicas de 
verificação de erros. Ainda que, nesses sistemas, o risco que alguém intercepte 
as mensagens seja menor, pode haver uma falha na rede que comprometa 
13Tipos de sistemas distribuídos
a integridade da mensagem. Um dos grandes vilões da disponibilidade de 
sistemas distribuídos é o ataque de negação de serviços, ou denial of service. 
Sistemas coorporativos distribuídos são o principal alvo. Várias requisições 
são disparadas até causar a indisponibilidade do serviço. Contudo, a instalação 
de um firewall combinado com o monitoramento da rede e recursos é a forma 
mais usual para mitigar esse problema. 
Escalabilidade
Um sistema distribuído é escalável quando permite aumentar o número de 
recursos e usuários. Sistemas computacionais distribuídos possibilitam que 
você aumente a quantidade de recursos adicionando mais computadores em 
um cluster e mais sites em uma grade. Em sistemas coorporativos, o interesse 
primário é comportar mais usuários, o que implica, muitas vezes, obter mais 
recursos computacionais, ou seja, é preciso que sejam projetados para executar 
em mais de um computador. Em clusters e grades computacionais, apesar de 
ser simples adicionar mais computadores e a aplicação já ser programada para 
isso, a dificuldade é lidar com possíveis gargalos, como a largura de banda da 
rede e a distribuição eficiente da carga. Esses desafios também fazem parte 
do escopo dos sistemas corporativos e pervasivos em diferentes formatos. 
Para Coulouris et al. (2013), essa é uma característica central dos sistemas 
distribuídos, mas que pode ser resolvida usando técnicas de replicação de 
dados e distribuição de servidores que executam tarefas semelhantes.
A necessidade de aumentar o número de sensores em uma rede é um 
exemplo de escalabilidade de sistemas pervasivos. Como eles se comunicam 
via rede sem fio, o roteador pode se tornar um gargalo e impedir que mais 
usuários se conectam, assim, as aplicações, precisam ser otimizadas e realizar 
a comunicação de forma assíncrona, para evitar altas latências. 
Tratamento de falhas
As falhas em um sistema distribuídos podem ocorrem no nível de hardware e 
software e, quando ocorrem, a aplicação pode produzir resultados incorretos ou 
acabar antes. Geralmente, as falhas não acontecem em todos os componentes 
de um sistema distribuído, o que torna ainda mais desafiante implementar o 
tratamento de falhas. O primeiro passo é permitir que o sistema seja capaz de 
detectar onde e que tipo de falha ocorreu. Uma forma simples é verificar se 
os dados foram corrompidos. Para Coulouris et al. (2013), o mais desafiante é 
gerenciar falhas que não podem ser detectadas, mas são suspeitas. 
Tipos de sistemas distribuídos14
Algumas falhas podem ser mascaradas por meio da retransmissão de 
uma mensagem quando ela não chega ou gravar dados em duas unidades 
de armazenamento distintas. No caso de uma falhar ou corromper, a outra 
pode ser usada. É possível tolerar algumas falhas e deixar os usuários cientes 
disso, como nos casos em que um usuário usando o navegador tenta acessar 
a página do sistema corporativo ou em um aplicativo do smartphone e a rede 
está indisponível. 
No entanto, algumas aplicações precisam ser projetadas para se recuperar 
das falhas, ou seja, o software precisa salvar o estado toda vez que uma 
mudança ocorre. Se a falha ocorrer, o software retrocede até o último estado 
válido. A implementação de redundância é uma outra forma de tornar os 
sistemas tolerantes as falhas, por meio do uso de componentes redundantes 
do modelo distribuído. As formas de lidar e os tipos de falhas, em geral, são 
as mesmas nos diferentes tipos de sistemas distribuídos. Já que os sistemas 
distribuídos têm como objetivo oferecer uma boa experiência ao usuário, 
devem implementar mecanismos que o permitam se recuperar das falhas, 
pois o usuário não está disposto a perder seus dados ou ficar com o serviço 
inoperável por muito tempo.
Concorrência
A concorrência em sistemas distribuídos é naturalmente implementada em 
clusters e grades computacionais, uma vez que seu objetivo principal é explo-
rar o paralelismo para obter maiordesempenho na execução das aplicações. 
Em sistemas corporativos, a intenção é permitir que mais usuários possam 
acessar o serviço ao mesmo tempo, ou seja, concorrentemente. Na prática, isso 
não é uma tarefa simples e nem sempre possível de atingir, conforme Coulouris 
et al. (2013, p. 23) exemplificam: 
Se tivermos um recurso compartilhado, que é acessado por diferentes threads, 
processos ou fluxos de execução, e os fluxos executem ao mesmo tempo neste 
recurso, se não houver tratamento pode haver inconsistência no resultado 
da execução. Por exemplo, duas pessoas tentando reservar bancos em um 
sistema de reserva de voos ao mesmo tempo, João tenta reservar A1 e Jésse 
tenta reservar C36, se não houver controle no entrelaçamento das operações 
correspondentes, as operações poderiam ser armazenadas como João: C36 
e Jésse A1. 
15Tipos de sistemas distribuídos
É de responsabilidade do desenvolvedor garantir que não ocorra inconsis-
tência nos dados quando implementar concorrência em um sistema distribuído. 
Deve-se controlar a ordem de execução e garantir que dois processos ou 
threads não escrevam ao mesmo tempo na mesma região de memória. Para 
resolver esse problema, a técnica mais conhecida de programação concorrente 
é o uso de semáforo.
Transparência/abstração
De acordo com Coulouris et al. (2013), a característica de transparência 
ou abstração pode ocorrer em diferentes níveis nos sistemas distribuídos. 
No nível de acesso, o usuário não tem conhecimento se um recurso está 
sendo acessado local ou remotamente. No nível de localização, os recursos 
são acessados sem que o usuário perceba onde eles estão geograficamente. 
No nível de concorrência, existe o acesso concorrente e o compartilhamento 
de recursos sem interferência. No nível de replicação, vários recursos são 
replicados sem que programadores e usuário percebam. No nível de falhas, 
as falhas de software e hardware não são notadas. No nível de mobilidade, 
uma movimentação é realizada sem prejudicar a execução de programas e 
a operação dos usuários. No nível de desempenho, o sistema se reconfigura 
para se adaptar à carga, com o objetivo de melhorar o desempenho. No nível 
de escalabilidade, a estrutura e os algoritmos de uma aplicação não sofrem 
alteração à medida que mais recursos são adicionados.
Sistemas corporativos buscam atingir transparência em todos os níveis. 
Os sistemas pervasivos não possuem interesse na abstração. Por exemplo, 
um sistema que monitora os sinais vitais de uma pessoa não pode falhar sem 
disparar, pelo menos, um alerta, pois isso pode custar a vida de uma pessoa. 
Os sistemas computacionais, como cluster e grades, priorizam mais a trans-
parência de desempenho e escalabilidade. As preocupações e desafios são 
distintos em cada um dos tipos de sistemas distribuídos, porém, cada aplicação 
distribuída, independentemente do tipo de sistema do qual faz parte, tem seus 
objetivos e requisitos, que a fazem optar pelos níveis de transparência a serem 
implementados e ofertados.
Tipos de sistemas distribuídos16
Qualidade de serviço
A qualidade de serviços está diretamente relacionada à experiência do usuário 
ao interagir com o sistema distribuído. Portanto, o sistema precisa ser confi-
ável, seguro e apresentar bom desempenho. As aplicações distribuídas têm 
implementando estratégias para se adaptar às circunstâncias do ambiente em 
que estão. Por exemplo, o serviço de streaming distribuído, Netflix, adapta 
automaticamente a resolução do vídeo ao dispositivo que o está reproduzindo, 
com base na largura de banda do usuário, visando otimizar o desempenho 
(não travar).
Em sistemas pervasivos distribuídos a qualidade de serviço é muito impor-
tante, principalmente em aplicações da saúde, que realizam o monitoramento 
dos sinais vitais, uma vez que um atraso na entrega dos alertas pode significar 
a perda de uma vida. Em sistemas corporativos, a falta de qualidade do serviço 
pode significar perda de clientes; já em sistemas computacionais, como clus-
ter e grades, pode resultar em desperdício de recursos e tempo. Como pode 
ser observado, a qualidade de serviço é fundamental em diferentes tipos de 
sistemas distribuídos. Em alguns casos o mais importante será o desempenho, 
para outros, a segurança ou a confiabilidade. Conforme Coulouris et al. (2013, 
p. 25) descrevem: “A qualidade do serviço (QoS, do inglês Quality of service) 
depende dos recursos computacionais e de rede dos quais dispomos, em relação 
aos que são necessários para a execução do sistema.”.
Neste capítulo, você tomou conhecimento dos principais tipos de sistemas 
distribuídos: computacionais, de informação e pervasivos, com exemplos para 
cada um deles. Também apresentamos as principais características vinculadas 
a sistemas distribuídos, como a heterogeneidade, a abertura em relação ao 
código fonte, e qualidade do serviço.
BECKER, D. J. et al. Beowulf: a parallel workstation for scientific computation. In: THE 
INTERNATIONAL CONFERENCE ON PARALLEL PROCESSING, 3., 1995. Proceedings [...]. 
Boca Raton: CRC, 1995. p. 11–14.
COULOURIS, G. et al. Sistemas distribuídos: conceitos e projeto. 5. ed. Porto Alegre: 
Bookman, 2013. 
17Tipos de sistemas distribuídos
MELL, P.; GRANCE, T. The NIST definition of cloud computing. [S. l.]: U.S. Department of 
Commerce, 2011.
TANENBAUM, A. S.; VAN STEEN, M. Sistemas distribuídos: princípios e paradigmas. 2. ed. 
São Paulo: Pearson Prentice Hall, 2007.
Leituras recomendadas
BUYYA, R.; VECCHIOLA, C.; SELVI, S. T. Mastering cloud computing: fundation and appli-
cations programming. New Delhi: McGraw Hill Education, 2013.
GRAMA, A. et al. Introduction to parallel computing. 2nd ed. [S. l.]: Pearson, 2003.
WAHER, P. Learning internet of things. Birmingham: Packt Publishing, 2015.
Tipos de sistemas distribuídos18

Mais conteúdos dessa disciplina