0% acharam este documento útil (0 voto)
7 visualizações68 páginas

Fundamentos de Sistemas Distribuídos

O documento aborda os fundamentos dos sistemas distribuídos, destacando suas características, vantagens e desafios, como a escalabilidade, confiabilidade e tolerância a falhas. Também discute a importância da comunicação eficiente e da gestão de estado em ambientes distribuídos, além de apresentar objetivos de aprendizagem para os leitores. A compreensão desses conceitos é essencial para o desenvolvimento de soluções tecnológicas eficazes em um mundo cada vez mais interconectado.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
7 visualizações68 páginas

Fundamentos de Sistemas Distribuídos

O documento aborda os fundamentos dos sistemas distribuídos, destacando suas características, vantagens e desafios, como a escalabilidade, confiabilidade e tolerância a falhas. Também discute a importância da comunicação eficiente e da gestão de estado em ambientes distribuídos, além de apresentar objetivos de aprendizagem para os leitores. A compreensão desses conceitos é essencial para o desenvolvimento de soluções tecnológicas eficazes em um mundo cada vez mais interconectado.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

SISTEMAS

DISTRIBUÍDOS
Unidade 1
Fundamentos
de sistemas
distribuídos
CEO

DAVID LIRA STEPHEN BARROS

Diretora Editorial
ALESSANDRA FERREIRA

Gerente Editorial

LAURA KRISTINA FRANCO DOS SANTOS

Projeto Gráfico

TIAGO DA ROCHA

Autoria

IZADORA SOARES CARDOSO


Izadora Soares Cardoso
AUTORIA

Olá. Sou doutoranda em Engenharia Elétrica pelo Progra-


ma de Pós-Graduação em Engenharia Elétrica da Universidade Fe-
deral de Campina Grande (UFCG). Mestra em Engenharia Elétrica
(2022) e Bacharel em Engenharia Elétrica (2019) pela mesma insti-
tuição. Técnica em Eletrotécnica pelo Instituto Federal de Alagoas
- IFAL Campus Palmeira dos Índios (2012). Elaborei projetos de ex-
tensão em Eletrônica Básica para alunos do ensino médio da rede
pública e projeto de iniciação científica pelo Programa Nacional de
Cooperação Acadêmica (PROCAD), nas áreas de instrumentação
e telemetria de sistemas não tripulados. Desenvolvi estudos rela-
cionados ao processo de Ensino e Aprendizagem no curso de gra-
duação em Engenharia Elétrica da UFCG, além de videoaulas para
Unidade 1

alunos de graduação em temas relacionados à Engenharia Elétrica


e Eletrônica. Desde 2013, sou colaboradora do Laboratório de Ins-
trumentação e Metrologia Científicas (LIMC) da UFCG, no qual par-
ticipei de diversos projetos de ensino, pesquisa e extensão. Atuei
como Analista de Engenharia por mais de 3 anos no setor privado.
Participo de Projetos de Ensino voltados ao desenvolvimento de
material didático instrucional para o Curso de Engenharia Elétrica.
Tenho experiência com desenvolvimento de material didático ins-
trucional; elaboração de itens; criação de conteúdo e elaboração
de aulas e avaliações para a educação técnica e superior. Tenho
interesse em temas como: ensino, eletrônica analógica e digital,
processamento de sinais, desenvolvimento de material didático
instrucional, criação de conteúdo e gestão de pessoas. Sou apaixo-
nada pelo que faço e adoro transmitir minha experiência de vida
àqueles que estão iniciando em suas profissões. Por isso, fui con-
vidada pela Editora Telesapiens a integrar seu elenco de autores
independentes. Estou muito feliz em poder ajudar você nesta fase
de muito estudo e trabalho. Conte comigo!

4 SISTEMAS DISTRIBUÍDOS
Esses ícones aparecerão em sua trilha de aprendizagem nos seguintes casos:

ÍCONES
No início do Caso haja a
desenvolvimento necessidade de
de uma nova apresentar um novo
OBJETIVO competência. DEFINIÇÃO conceito.

Quando são
Se as observações
necessárias
escritas tiverem que
observações ou
ser priorizadas.
NOTA complementações. IMPORTANTE

Se existirem
Se algo precisar ser curiosidades e

Unidade 1
melhor explicado ou indagações lúdicas
EXPLICANDO detalhado. sobre o tema em
MELHOR VOCÊ SABIA?
estudo.

Existência de Se for preciso acessar


textos, referências sites para fazer
bibliográficas e links downloads, assistir
para aprofundar seu vídeos, ler textos ou
SAIBA MAIS ACESSE
conhecimento. ouvir podcasts.

Se houver a
necessidade de Quando for preciso
chamar a atenção fazer um resumo
sobre algo a cumulativo das últimas
REFLITA ser refletido ou RESUMINDO abordagens.
discutido.

Quando alguma Quando uma


atividade de competência é
autoaprendizagem concluída e questões
ATIVIDADES for aplicada. TESTANDO são explicadas.

SISTEMAS DISTRIBUÍDOS 5
Conceitos e desafios dos sistemas .......................................... 9
SUMÁRIO

Introdução aos sistemas distribuídos.............................................................. 9

Vantagens e desvantagens dos sistemas distribuídos................................ 12

Desafios na construção de sistemas distribuídos........................................ 14

Tendências atuais e futuras em sistemas distribuídos................. 17

Modelos de comunicação em sistemas distribuídos............ 23


Introdução aos modelos de comunicação..................................................... 23

Modelos de comunicação baseados em mensagens.................................. 27

Modelos de comunicação baseados em chamadas de procedimento


remoto (RPC)........................................................................................................ 30

Modelos de comunicação baseados em eventos.......................... 33


Unidade 1

Sincronização e coordenação em sistemas distribuídos ..... 37


Introdução à sincronização e coordenação em sistemas distribuídos.... 37

Mecanismos de sincronização em sistemas distribuídos........................... 41

Coordenação e consenso em sistemas distribuídos .................................. 44

Estratégias de replicação e consistência......................................... 48

Consistência e replicação em sistemas distribuídos ........... 53


Introdução aos métodos de consistência em sistemas distribuídos........ 53

Replicação de dados: estratégias e desafios................................................. 56

Algoritmos de consenso e coordenação....................................................... 60

Técnicas avançadas e casos de uso ................................................ 63

6 SISTEMAS DISTRIBUÍDOS
Você sabia que a área de sistemas distribuídos é uma das
mais demandadas na indústria e será responsável pela geração

APRESENTAÇÃO
de milhares de empregos nos próximos anos? Isso mesmo. Ela
faz parte da cadeia de tecnologia de uma empresa. Sua principal
responsabilidade é garantir que os sistemas computacionais
possam funcionar de forma eficiente e confiável, mesmo quando
distribuídos em diferentes máquinas e locais geográficos.
Coordenar a comunicação entre esses sistemas e garantir que os
dados permaneçam consistentes e replicados adequadamente
é uma tarefa complexa e essencial para o bom funcionamento
de muitas empresas e serviços online. Entendeu? Ao longo desta
unidade letiva, você vai mergulhar neste universo fascinante
dos sistemas distribuídos, explorando desde os conceitos
fundamentais até os desafios mais avançados enfrentados por

Unidade 1
profissionais da área. Prepare-se para adquirir um conhecimento
valioso que será crucial para sua carreira no mundo da tecnologia!

SISTEMAS DISTRIBUÍDOS 7
Olá. Seja muito bem-vindo à Unidade 01. Nosso objetivo
é auxiliar você no desenvolvimento das seguintes competências
OBJETIVOS

profissionais até o término desta etapa de estudos:

1. Definir os conceitos básicos e entender os desafios dos


sistemas distribuídos;

2. Distinguir entre diferentes modelos de comunicação e


suas aplicações;

3. Implementar estratégias de sincronização e


coordenação em ambientes distribuídos;

4. Avaliar métodos de consistência e replicação para


garantir a integridade dos dados em sistemas
distribuídos.
Unidade 1

8 SISTEMAS DISTRIBUÍDOS
Conceitos e desafios dos
sistemas
Ao término deste capítulo, você será capaz
de entender como funcionam os sistemas
distribuídos. Isso será fundamental para o
exercício de sua profissão, especialmente em um
OBJETIVO
mundo cada vez mais conectado e dependente de
tecnologias distribuídas. As pessoas que tentaram
projetar ou gerenciar sistemas distribuídos sem a
devida instrução, tiveram problemas ao lidar com
questões de comunicação, consistência e tolerância
a falhas. E então? Motivado para desenvolver esta
competência? Vamos lá. Avante!

Unidade 1
Introdução aos sistemas
distribuídos
Os sistemas distribuídos são uma classe de sistemas de
computação que consistem em um conjunto de componentes
autônomos localizados em diferentes máquinas que se comunicam
e coordenam suas ações por meio de trocas de mensagens em
uma rede.
Imagem 1.1 - Sistemas distribuídos

Fonte: Freepik.

SISTEMAS DISTRIBUÍDOS 9
De acordo com Tanenbaum e Steen (2007), um sistema
distribuído é aquele em que os componentes localizados em
computadores interconectados se comunicam e coordenam suas
ações apenas por meio de trocas de mensagens. Essa definição
enfatiza a independência dos componentes e a ausência de um
relógio global compartilhado.

As características principais dos sistemas distribuídos


incluem a descentralização do controle, a autonomia dos
componentes, a escalabilidade, a tolerância a falhas e a
transparência. A descentralização implica que não há um único
ponto de controle ou falha, o que aumenta a confiabilidade do
sistema.

A autonomia dos componentes permite que eles operem


Unidade 1

independentemente, o que é crucial para a escalabilidade e a


tolerância a falhas. A transparência, por sua vez, refere-se à
capacidade de ocultar a complexidade do sistema distribuído do
usuário ou do desenvolvedor, apresentando-o como um sistema
único e coerente.

Exemplos de sistemas distribuídos na vida real são


abundantes e variam desde a infraestrutura da internet, como
servidores DNS e redes de entrega de conteúdo (CDNs), até
sistemas de computação em nuvem, como Amazon Web Services
e Google Cloud Platform. Outros exemplos incluem sistemas
de gerenciamento de bases de dados distribuídas, sistemas de
arquivos distribuídos como o Hadoop Distributed File System
(HDFS) e aplicações de software como serviço (SaaS) que fornecem
funcionalidades por meio da internet.

Os sistemas distribuídos desempenham um papel crucial


na infraestrutura tecnológica moderna, permitindo o processa-
mento e armazenamento distribuído de dados, a computação em
larga escala e a prestação de serviços resilientes e escaláveis.

10 SISTEMAS DISTRIBUÍDOS
Conforme discutido por Coulouris, Dollimore e Kindberg
(2017), a compreensão dos princípios e desafios dos sistemas
distribuídos é fundamental para projetar e implementar soluções
eficazes que atendam às necessidades de desempenho.

Aprofundando mais no tema, é importante destacar que


a sua natureza distribuída traz desafios únicos em termos de
coordenação, comunicação e consistência dos dados entre os
componentes distribuídos.

Um dos principais desafios é o problema da sincronização,


que surge devido à falta de um relógio global compartilhado entre
os componentes do sistema.

Isso torna difícil garantir a ordem e a consistência das

Unidade 1
operações em todo o sistema. Algoritmos de sincronização, como
o algoritmo de Lamport ou o algoritmo de vetor de relógio, são
usados para estabelecer uma ordem parcial dos eventos e garantir
a consistência dos dados.

Outro desafio é a comunicação entre os componentes


distribuídos, que pode ser afetada por latência, largura de banda
limitada e falhas na rede. Mecanismos de comunicação eficientes
e protocolos robustos são essenciais para garantir a troca de
mensagens confiável e eficiente entre os componentes.

A tolerância a falhas é outra característica crucial dos siste-


mas distribuídos. Devido à natureza distribuída e à possibilidade
de falhas em componentes individuais, os sistemas distribuídos
devem ser projetados para continuar operando de maneira satis-
fatória mesmo na presença de falhas. Isso é alcançado mediante
técnicas como replicação de dados, balanceamento de carga e re-
cuperação automática de falhas.

SISTEMAS DISTRIBUÍDOS 11
Finalmente, a escalabilidade é um aspecto importante dos
sistemas distribuídos, permitindo que eles se adaptem ao cresci-
mento em termos de usuários, carga de trabalho ou recursos de
hardware. Os sistemas distribuídos devem ser projetados para se-
rem escaláveis horizontalmente, ou seja, adicionar mais máquinas
ao sistema deve aumentar proporcionalmente sua capacidade de
processamento.

Em resumo, eles são fundamentais para muitas aplicações


modernas, desde serviços de nuvem até sistemas de big data e
redes sociais.

O entendimento dos conceitos, desafios e técnicas


associadas aos sistemas distribuídos é essencial para o
desenvolvimento de soluções tecnológicas eficientes e confiáveis
Unidade 1

em um mundo cada vez mais interconectado.

Vantagens e desvantagens dos


sistemas distribuídos
Os sistemas distribuídos oferecem várias vantagens em
comparação com os sistemas centralizados, mas também apre-
sentam desafios únicos. Com base nas referências mencionadas,
podemos discutir as vantagens e desvantagens dos sistemas dis-
tribuídos em termos de escalabilidade, confiabilidade, tolerância a
falhas, desempenho e segurança (Barbosa, 1996).

Vantagens:

1. Escalabilidade: os sistemas distribuídos são


altamente escaláveis. Eles podem ser expandidos
horizontalmente, adicionando mais máquinas conforme
necessário para lidar com o aumento da carga de
trabalho. Isso é particularmente útil em ambientes de
nuvem, em que os os recursos podem ser alocados

12 SISTEMAS DISTRIBUÍDOS
dinamicamente. Tanenbaum e Steen (2007) destacam
que a escalabilidade é uma das principais vantagens dos
sistemas distribuídos, permitindo que eles atendam a
uma ampla gama de requisitos de desempenho.

2. Confiabilidade: devido à natureza distribuída, se


uma máquina falhar, o sistema como um todo ainda
pode continuar operando. Essa redundância aumenta
a confiabilidade do sistema. Coulouris, Dollimore e
Kindberg (2017) enfatizam que a confiabilidade é uma
consideração crítica no projeto de sistemas distribuídos.

3. Tolerância a falhas: os sistemas distribuídos são


projetados para serem tolerantes a falhas, o que
significa que eles podem continuar funcionando mesmo

Unidade 1
na presença de falhas parciais. Isso é alcançado graças
a técnicas como replicação de dados e balanceamento
de carga. Kshemkalyani e Singhal (2011) discutem
várias estratégias para alcançar a tolerância a falhas
em sistemas distribuídos.

Desvantagens:

1. Desafios de desempenho: a comunicação entre


máquinas distribuídas pode introduzir latência e reduzir
o desempenho geral do sistema. Otimizar o desempenho
em um ambiente distribuído é mais complexo do que
em um sistema centralizado. Barbosa (1996) aborda a
importância de algoritmos eficientes para melhorar o
desempenho dos sistemas distribuídos.

2. Desafios de segurança: a segurança é uma preocupação


significativa em sistemas distribuídos, pois os dados
são transmitidos por redes e armazenados em várias
máquinas. Garantir a segurança e a privacidade dos
dados em um ambiente distribuído requer medidas de

SISTEMAS DISTRIBUÍDOS 13
segurança robustas, como criptografia e autenticação.
Tanenbaum e Steen (2007) discutem os desafios de
segurança associados aos sistemas distribuídos e as
abordagens para mitigá-los.

Em resumo, os sistemas distribuídos oferecem vantagens


significativas em termos de escalabilidade, confiabilidade e
tolerância a falhas, mas também apresentam desafios em termos
de desempenho e segurança.

O projeto e a implementação de sistemas distribuídos


eficientes requerem uma compreensão cuidadosa dessas
vantagens e desafios, bem como o uso de técnicas e tecnologias
apropriadas para abordá-los.

Desafios na construção de
Unidade 1

sistemas distribuídos
A construção de sistemas distribuídos apresenta uma série
de desafios técnicos e de projeto que devem ser superados para
garantir a eficiência, confiabilidade e escalabilidade do sistema.

Um dos principais desafios é a comunicação entre


processos distribuídos em diferentes máquinas. A comunicação
eficiente é fundamental para o funcionamento correto do sistema,
mas a latência da rede, a largura de banda limitada e as falhas
podem afetar significativamente o desempenho da comunicação.

Algoritmos e protocolos de comunicação devem ser


cuidadosamente projetados para lidar com essas limitações e
garantir a troca eficiente de mensagens entre os componentes do
sistema.

Outro desafio importante é o gerenciamento de estado


distribuído. Em sistemas distribuídos, o estado do sistema é
espalhado por vários nós, o que torna difícil manter uma visão
consistente e atualizada do estado global.

14 SISTEMAS DISTRIBUÍDOS
Mecanismos de sincronização e coordenação, como
eleições de líder e algoritmos de consenso, são necessários para
garantir a consistência e a coerência dos dados em todo o sistema.
Além disso, técnicas de replicação de dados podem ser usadas
para aumentar a disponibilidade e a tolerância a falhas, mas
também introduzem desafios adicionais de consistência.

A detecção e resolução de falhas são desafios críticos


em sistemas distribuídos. Devido à natureza distribuída e à
possibilidade de falhas parciais, é difícil detectar e diagnosticar
falhas em todo o sistema. Mecanismos de monitoramento e
recuperação de falhas devem ser implementados para detectá-las
em componentes individuais e iniciar processos de recuperação
para restaurar a operação normal do sistema. Isso pode envolver

Unidade 1
a realocação de tarefas, a reinicialização de componentes com
falha ou a reconfiguração do sistema para contornar componentes
inoperantes.

Esses desafios destacam a complexidade envolvida na


construção de sistemas distribuídos eficientes e confiáveis.
Conforme discutido por Tanenbaum e Steen (2007), o projeto
e a implementação de sistemas distribuídos requerem uma
abordagem cuidadosa e uma compreensão profunda dos
princípios de distribuição, comunicação e coordenação.

Além disso, é essencial considerar os trade-offs entre


desempenho, confiabilidade, escalabilidade e segurança ao
projetar e desenvolver sistemas distribuídos.

Além dos desafios mencionados anteriormente, a


construção de sistemas distribuídos envolve outras considerações
importantes. Uma delas é a questão da transparência, que
se refere à capacidade de ocultar a complexidade do sistema
distribuído do usuário ou do desenvolvedor, fazendo com que
pareça um sistema único e integrado.

SISTEMAS DISTRIBUÍDOS 15
A transparência pode incluir aspectos como transparência
de localização, na qual o usuário não precisa saber o local física
dos recursos, transparência de acesso, em que o acesso a recursos
remotos é feito da mesma maneira que o acesso a recursos locais,
e transparência de falhas, quando o sistema oculta as falhas dos
componentes individuais do usuário.

Outro aspecto importante é a heterogeneidade dos


sistemas distribuídos, que podem envolver uma variedade de
hardware, sistemas operacionais, linguagens de programação e
protocolos de comunicação.

Lidar com essa heterogeneidade requer a adoção de pa-


drões abertos e o uso de middleware, que atua como uma cama-
da intermediária entre os componentes do sistema, proporcio-
Unidade 1

nando serviços comuns e permitindo a interoperabilidade entre


diferentes tecnologias.

A segurança também é uma preocupação crítica em


sistemas distribuídos, pois os dados são frequentemente
transmitidos por redes públicas e armazenados em múltiplos
locais.

Mecanismos de segurança robustos, incluindo criptogra-


fia, autenticação, autorização e auditoria, são essenciais para pro-
teger os dados e garantir a confidencialidade, integridade e dispo-
nibilidade do sistema.

Por fim, o gerenciamento de recursos em sistemas distri-


buídos é um desafio complexo, envolvendo o balanceamento de
carga, a alocação de recursos e o escalonamento de tarefas entre
os nós do sistema.

Técnicas de gerenciamento de recursos eficientes são


cruciais para otimizar o desempenho do sistema, garantir a
utilização eficiente dos recursos e atender aos requisitos de
qualidade de serviço.

16 SISTEMAS DISTRIBUÍDOS
Deste modo, a construção de sistemas distribuídos envolve
uma série de desafios técnicos e de projeto, que vão desde a
comunicação entre processos e o gerenciamento de estado
distribuído até a detecção e resolução de falhas, a transparência,
a heterogeneidade, a segurança e o gerenciamento de recursos.

Superar esses desafios requer uma compreensão profun-


da dos princípios dos sistemas distribuídos, bem como o uso de
tecnologias e técnicas apropriadas para projetar e implementar
soluções eficazes e confiáveis.

Tendências atuais e futuras em


sistemas distribuídos

Unidade 1
As tendências atuais e futuras em sistemas distribuídos
estão moldando a maneira como lidamos com a computação, o
armazenamento de dados e a conectividade em uma escala global.

Uma das tendências mais significativas é a computação


em nuvem, que revolucionou a forma como os recursos de
computação são consumidos e gerenciados.

A nuvem oferece escalabilidade, flexibilidade e eficiência,


permitindo que as organizações acessem recursos de computa-
ção sob demanda sem a necessidade de investir em infraestrutura
física. Isso não apenas reduz os custos, mas também acelera o
desenvolvimento e a implantação de aplicações.

SISTEMAS DISTRIBUÍDOS 17
Imagem 1.2- A computação em nuvem
Unidade 1

Fonte: Freepik.

Paralelamente à computação em nuvem, o edge computing


está ganhando destaque como uma abordagem complementar.
Ele busca levar o processamento de dados mais próximo da fonte
dos dados, ou seja, na borda da rede.

Isso é particularmente importante para aplicações que


exigem baixa latência, como a Internet das Coisas (IoT), realidade
aumentada (RA) e veículos autônomos. Ao processar dados
localmente, o edge computing pode reduzir a latência, economizar
largura de banda e melhorar a experiência do usuário.

Outra tendência importante é a adoção de sistemas


distribuídos baseados em microsserviços. Essa abordagem
divide uma aplicação em um conjunto de serviços menores e
independentes, cada um executando um processo único e se
comunicando por meio de APIs leves.

18 SISTEMAS DISTRIBUÍDOS
Por conseguinte, os microsserviços permitem que
as equipes de desenvolvimento atualizem e escalem partes
individuais da aplicação sem afetar o sistema como um todo. Isso
facilita a implantação contínua, a escalabilidade e a manutenção
das aplicações.

No entanto, essas tendências também trazem desafios


emergentes. A gestão de sistemas distribuídos complexos, a ga-
rantia de segurança e privacidade dos dados e a otimização do
desempenho em ambientes de computação em nuvem e edge são
áreas críticas de pesquisa e desenvolvimento.

Além disso, a integração de sistemas distribuídos com


tecnologias emergentes, como inteligência artificial e blockchain,
apresenta oportunidades e desafios adicionais.

Unidade 1
A pesquisa em sistemas distribuídos continua a evoluir
para abordar esses desafios. Áreas como a orquestração de
contêineres, a computação sem servidor e o gerenciamento de
redes definidas por software estão se tornando cada vez mais
importantes.

Além disso, a exploração de novos modelos de programa-


ção e arquiteturas de sistemas para otimizar o desempenho e a
eficiência energética em ambientes distribuídos é uma área pro-
missora.

As tendências atuais e futuras em sistemas distribuídos


estão moldando o futuro da tecnologia, com a computação
em nuvem, o edge computing e os microsserviços liderando a
transformação. À medida que essas tendências evoluem, os
desafios emergentes e as áreas de pesquisa continuam a se
expandir, oferecendo oportunidades para inovação e avanços
significativos na forma como interagimos com a tecnologia em
nosso mundo cada vez mais conectado.

SISTEMAS DISTRIBUÍDOS 19
A evolução dos sistemas distribuídos está intrinsecamente
ligada ao avanço das tecnologias de comunicação e computação.
À medida que novas tecnologias emergem, elas impulsionam o
desenvolvimento de novas abordagens e soluções em sistemas
distribuídos. Uma área de interesse crescente é a integração de
sistemas distribuídos com a Internet das Coisas (IoT).

À medida que mais dispositivos se tornam conectados,


surge a necessidade de sistemas distribuídos capazes de
gerenciar e processar grandes volumes de dados gerados por
esses dispositivos. Isso requer não apenas avanços em termos
de escalabilidade e desempenho, mas também em segurança e
privacidade, dada a natureza sensível de muitos dados da IoT.

Outro aspecto relevante é o papel dos sistemas distribuí-


Unidade 1

dos na habilitação de tecnologias emergentes como a inteligência


artificial (IA) e o aprendizado de máquina.

A capacidade de processar e analisar grandes conjuntos


de dados distribuídos é fundamental para treinar modelos de
IA e extrair insights valiosos. Isso implica desafios relacionados à
eficiência do processamento de dados e à distribuição de cargas
de trabalho de forma otimizada entre os recursos disponíveis.

Além disso, a crescente preocupação com a sustentabilida-


de e a eficiência energética está levando ao desenvolvimento de
sistemas distribuídos mais “verdes”. Isso envolve a otimização do
uso de recursos e a redução do consumo de energia, o que é espe-
cialmente importante em ambientes de computação em nuvem e
edge, em que a infraestrutura pode ser extensa e dispersa.

Por fim, a evolução dos sistemas distribuídos também está


sendo impulsionada pela necessidade de maior interoperabilidade
e padronização. À medida que diferentes sistemas e plataformas
precisam se comunicar e trabalhar juntos, torna-se essencial
estabelecer padrões e protocolos comuns para garantir a
compatibilidade e a integração eficiente.

20 SISTEMAS DISTRIBUÍDOS
Vale ressaltar que os sistemas distribuídos estão no centro
de muitas das tendências tecnológicas atuais e futuras, desde a
IoT e IA até a sustentabilidade e a interoperabilidade. À medida
que essas áreas continuam a evoluir, espera-se que os sistemas
distribuídos se tornem ainda mais sofisticados e capazes de aten-
der às demandas crescentes de um mundo cada vez mais conec-
tado e dependente de dados.

Unidade 1

SISTEMAS DISTRIBUÍDOS 21
E então? Gostou do que lhe mostramos? Aprendeu
mesmo tudinho? Agora, só para termos certeza
de que você realmente entendeu o tema de
RESUMINDO estudo deste capítulo, vamos resumir tudo o que
vimos. Você deve ter aprendido que os sistemas
distribuídos são conjuntos de componentes
autônomos localizados em diferentes máquinas
que se comunicam e coordenam suas ações
por meio de trocas de mensagens. Eles são
fundamentais para muitas aplicações modernas,
como a computação em nuvem e a Internet das
Coisas (IoT). Esses sistemas oferecem vantagens
como escalabilidade, confiabilidade e tolerância a
falhas. No entanto, também apresentam desafios
como a comunicação eficiente entre processos, o
Unidade 1

gerenciamento de estado distribuído e a segurança


dos dados.
A construção de sistemas distribuídos envolve lidar
com problemas de sincronização, comunicação
entre processos e detecção e resolução de
falhas. A complexidade desses sistemas exige
uma abordagem cuidadosa no seu projeto e
implementação. As tendências atuais incluem
a computação em nuvem, o edge computing e
sistemas baseados em microsserviços. Os desafios
emergentes e as áreas de pesquisa incluem a
integração com IoT, a eficiência energética e a
interoperabilidade entre diferentes sistemas e
plataformas. Esperamos que este resumo tenha
ajudado a consolidar seu entendimento sobre os
conceitos e desafios dos sistemas distribuídos. Com
esse conhecimento, você está bem preparado para
explorar as aplicações práticas e as implicações
desses sistemas no mundo real. Avançaremos
agora para o próximo capítulo. Vamos lá!

22 SISTEMAS DISTRIBUÍDOS
Modelos de comunicação em
sistemas distribuídos
Ao término deste capítulo, você será capaz de
entender como funcionam os diferentes modelos
de comunicação em sistemas distribuídos. As
pessoas que tentaram projetar ou implementar
OBJETIVO
sistemas distribuídos sem a devida instrução
tiveram problemas ao garantir a interoperabilidade
e a eficiência na comunicação entre os
componentes. E então? Motivado para desenvolver
esta competência? Vamos lá. Avante!

Introdução aos modelos de


comunicação

Unidade 1
Os modelos de comunicação em sistemas distribuídos são
fundamentais para o entendimento e a implementação eficaz de
comunicações entre processos em um ambiente distribuído.

Esses modelos fornecem abstrações que ajudam a simpli-


ficar o projeto e a análise de sistemas distribuídos, permitindo que
desenvolvedores e engenheiros de sistemas se concentrem nas
funcionalidades essenciais sem se preocuparem com os detalhes
de baixo nível da comunicação de rede.

SISTEMAS DISTRIBUÍDOS 23
Imagem 1.3 - Modelos de comunicação
Unidade 1

Fonte: Freepik.

A importância dos modelos de comunicação em sistemas


distribuídos reside na sua capacidade de abstrair a complexidade
inerente à comunicação entre processos distribuídos. Eles forne-
cem um conjunto de regras e convenções que regem a troca de
mensagens, facilitando a interoperabilidade e a compatibilidade
entre diferentes componentes do sistema.

Além disso, os modelos de comunicação ajudam a garantir


a confiabilidade, a eficiência e a segurança das comunicações em
ambientes distribuídos.

Existem diferentes tipos de modelos de comunicação em


sistemas distribuídos, cada um com suas próprias características
e aplicações.

EXEMPLO: o modelo de comunicação síncrona requer que


o remetente e o destinatário estejam sincronizados no
tempo, ou seja, o remetente deve esperar uma resposta
do destinatário antes de prosseguir.

24 SISTEMAS DISTRIBUÍDOS
Esse modelo é útil em situações que exigem uma forte
garantia de entrega e ordem das mensagens, mas pode ser menos
eficiente em termos de desempenho devido à espera necessária.

Por outro lado, o modelo de comunicação assíncrona


permite que o remetente continue suas operações sem esperar
uma resposta imediata do destinatário. Esse modelo é mais
flexível e pode melhorar o desempenho em cenários nos quais
a latência de comunicação é uma preocupação, mas pode exigir
mecanismos adicionais para garantir a confiabilidade e a ordem
das mensagens.

Outro modelo importante é o de comunicação baseado


em eventos, no qual os componentes do sistema reagem a
acontecimentos específicas, como a chegada de uma mensagem

Unidade 1
ou a manifestação de uma condição particular. Esse modelo é
especialmente útil em sistemas distribuídos orientados a eventos,
em que a comunicação é acionada por ocorrências em vez de
solicitações explícitas.

Além desses modelos, existem também abordagens


híbridas que combinam elementos de diferentes modelos de
comunicação para atender a requisitos específicos de sistemas
distribuídos.

EXEMPLO: um sistema pode usar comunicação síncrona


para operações críticas que exigem garantias fortes,
enquanto emprega comunicação assíncrona para
operações menos críticas que podem tolerar alguma
incerteza.

Desta forma, os modelos de comunicação em sistemas


distribuídos são essenciais para o projeto e a implementação efi-
cazes de comunicações entre processos em ambientes distribuí-
dos. Eles fornecem abstrações que simplificam a complexidade

SISTEMAS DISTRIBUÍDOS 25
da comunicação de rede e oferecem diferentes abordagens para
atender às diversas necessidades de desempenho, confiabilidade
e escalabilidade dos sistemas distribuídos.

A escolha do modelo de comunicação adequado em


sistemas distribuídos é crucial para atingir os objetivos de
desempenho, confiabilidade e escalabilidade desejados. Além
dos modelos síncronos, assíncronos e baseados em eventos
já mencionados, existem outros modelos que podem ser
considerados, dependendo das características específicas do
sistema.

Um exemplo é o modelo de comunicação baseado em


filas de mensagens, que utiliza uma estrutura de dados de fila
para armazenar mensagens até que sejam processadas pelo
Unidade 1

destinatário. Esse modelo é particularmente útil em cenários em


que a produção de mensagens é mais rápida do que seu consumo,
permitindo um desacoplamento temporal entre remetente e
destinatário.

Outro modelo relevante é o de comunicação baseado


em RPC (remote procedure call), que abstrai a comunicação entre
processos como chamadas de procedimentos ou métodos
remotos. Esse modelo simplifica o desenvolvimento de aplicações
distribuídas, pois permite que os desenvolvedores invoquem
procedimentos em outros sistemas como se fossem chamadas
locais.

Além disso, o modelo de comunicação baseado em pub/


sub (publicação/assinatura) é amplamente utilizado em sistemas
distribuídos orientados a eventos.

Nesse modelo, os produtores de mensagens (publica-


dores) não enviam mensagens diretamente aos consumidores
(assinantes), mas publicam mensagens em um tópico. Os consu-
midores se inscrevem nos tópicos de seu interesse e recebem au-
tomaticamente as mensagens publicadas.

26 SISTEMAS DISTRIBUÍDOS
Cada um desses modelos de comunicação tem suas pró-
prias vantagens e desvantagens, e a escolha entre eles depende
dos requisitos específicos do sistema distribuído em questão. Fa-
tores como a natureza das interações entre os componentes, a
frequência e o volume de comunicação, a tolerância a falhas e a
latência aceitável são todos importantes na determinação do mo-
delo de comunicação mais adequado.

Em conclusão, a comunicação eficaz é um pilar fundamen-


tal dos sistemas distribuídos, e a escolha do modelo de comunica-
ção correto é essencial para o sucesso do sistema.

Compreender as características e as implicações de


cada modelo de comunicação permite que os desenvolvedores
e engenheiros de sistemas projetem e implementem sistemas

Unidade 1
distribuídos que atendam às necessidades de desempenho,
confiabilidade e escalabilidade de suas aplicações.

Modelos de comunicação
baseados em mensagens
Os modelos de comunicação baseados em mensagens
desempenham um papel crucial nos sistemas distribuídos,
permitindo a troca de informações entre componentes. Esses
modelos podem ser categorizados em comunicação síncrona
e assíncrona, cada uma com suas próprias características e
aplicações.

Na comunicação síncrona, o remetente envia uma


mensagem e espera uma resposta antes de prosseguir. Esse
modelo garante uma forte sincronização entre os processos, mas
pode levar a bloqueios e ineficiências se o destinatário demorar a
responder.

SISTEMAS DISTRIBUÍDOS 27
Apesar desses desafios, a comunicação síncrona é
frequentemente utilizada em cenários que exigem confirmação
imediata e ordem estrita das mensagens.

Por outro lado, a comunicação assíncrona permite


que o remetente continue suas operações sem aguardar uma
resposta imediata. Esse modelo é mais flexível e pode melhorar
o desempenho em ambientes distribuídos, pois reduz o tempo
de espera e permite o processamento paralelo de mensagens.
A comunicação assíncrona é particularmente adequada para
cenários com alta latência de rede ou que a ordem das mensagens
não é crítica.

Os sistemas de troca de mensagens e filas de mensagens


(message queuing) são uma implementação comum de
Unidade 1

comunicação assíncrona em sistemas distribuídos. Eles utilizam


uma estrutura de dados de fila para armazenar mensagens até
que sejam processadas pelo destinatário.

Essa abordagem oferece desacoplamento temporal entre


remetente e destinatário, permitindo que os componentes do
sistema operem de forma independente e escalável.

As filas de mensagens também facilitam a tolerância a


falhas, pois as mensagens podem ser armazenadas de forma
persistente até que sejam entregues com sucesso.

Além disso, esses sistemas geralmente oferecem recursos


como balanceamento de carga, priorização de mensagens e ga-
rantias de entrega, tornando-os uma escolha popular para a cons-
trução de sistemas distribuídos robustos e escaláveis.

Os protocolos de comunicação, como message queuing


telemetry transport (MQTT) e advanced message queuing protocol
(AMQP), são essenciais para o funcionamento eficaz dos sistemas
de troca de mensagens. O MQTT é um protocolo leve e simples,

28 SISTEMAS DISTRIBUÍDOS
projetado para dispositivos de baixa potência e redes com largura
de banda limitada. Ele é amplamente utilizado em aplicações
de Internet das Coisas (IoT) para facilitar a comunicação entre
dispositivos e servidores (Coulouris; Dollimore; Kindberg, 2017).
Imagem 1.4 - Internet das Coisas (IoT)

Unidade 1
Fonte: Freepik.

O AMQP, por outro lado, é um protocolo mais complexo


e rico em recursos, projetado para sistemas de mensagens
corporativos. Ele oferece suporte a uma variedade de padrões
de mensagens, garantias de entrega e segurança avançada,
tornando-o adequado para ambientes empresariais que exigem
alta confiabilidade e desempenho.

SISTEMAS DISTRIBUÍDOS 29
O protocolo MQTT, amplamente utilizado em
sistemas de comunicação baseados em mensagens
para Internet das Coisas (IoT), foi originalmente
VOCÊ SABIA? desenvolvido em 1999 por Andy Stanford-Clark da
IBM e Arlen Nipper da Arcom, agora Eurotech. Sua
criação teve como objetivo estabelecer um método
de comunicação leve e eficiente para dispositivos
com recursos limitados e em redes com largura de
banda restrita. Hoje, o MQTT é um padrão aberto
(OASIS e ISO/IEC 20922) e continua sendo um dos
protocolos mais populares para a conectividade
de dispositivos IoT em todo o mundo, graças à sua
simplicidade, eficiência e capacidade de suportar
milhões de dispositivos simultaneamente.
Unidade 1

Ressalta-se que os modelos de comunicação baseados em


mensagens são fundamentais para o projeto e a implementação
de sistemas distribuídos. A escolha entre comunicação síncrona
e assíncrona, bem como a seleção de sistemas de troca de men-
sagens e protocolos de comunicação, depende das necessidades
específicas do sistema e dos requisitos de desempenho, escalabi-
lidade e confiabilidade. A compreensão desses modelos e proto-
colos é essencial para o desenvolvimento de sistemas distribuídos
eficazes e eficientes.

Modelos de comunicação
baseados em chamadas de
procedimento remoto (RPC)
Os modelos de comunicação baseados em chamadas de
procedimento remoto (RPC) são uma abordagem fundamental
para facilitar a comunicação entre processos em sistemas distri-
buídos. O RPC permite que um programa em um computador cha-
me um procedimento ou função em outro computador como se

30 SISTEMAS DISTRIBUÍDOS
fosse local. Esse modelo abstrai a complexidade da comunicação
de rede, permitindo que os desenvolvedores se concentrem na
lógica de negócios.

O princípio básico do RPC é que ele encapsula a


comunicação de rede, convertendo a chamada de procedimento
e seus parâmetros em uma forma que pode ser transmitida pela
rede.

No lado do servidor, o RPC desempacota a chamada,


executa o procedimento e retorna o resultado ao cliente. Essa
abstração simplifica o desenvolvimento de aplicações distribuídas,
tornando as chamadas de rede tão simples quanto chamadas de
função local.

Unidade 1
Os RPCs são tipicamente implementados usando stubs,
que são peças de código geradas automaticamente que represen-
tam o procedimento remoto no cliente e no servidor.

O stub do cliente lida com a serialização dos parâmetros


da chamada e a comunicação com o servidor, enquanto o stub do
servidor deserializa os parâmetros, executa a chamada e serializa
o resultado de volta ao cliente.

Existem várias variantes do RPC, cada uma adaptada a


diferentes necessidades e cenários de uso. O gRPC, desenvolvido
pelo Google, é uma variante moderna do RPC que usa o formato
de serialização Protocol Buffers para mensagens e suporta
comunicação bidirecional e streaming. O gRPC é projetado para ser
leve e de alto desempenho, tornando-o adequado para ambientes
de microsserviços e sistemas distribuídos em larga escala.

Outra variante popular é o JSON-RPC, que usa JavaScript


Object Notation (JSON) para serializar chamadas de procedimento
e respostas. O JSON-RPC é simples e fácil de usar, tornando-o uma
escolha comum para aplicações web e serviços baseados em REST.

SISTEMAS DISTRIBUÍDOS 31
A integração do RPC com sistemas de microsserviços é
uma prática comum, pois eles geralmente precisam se comunicar
entre si para realizar tarefas complexas. O RPC fornece um meca-
nismo eficiente e fácil de usar para essa comunicação, permitindo
que cada microsserviço exponha uma interface clara de procedi-
mentos ou funções que podem ser chamadas remotamente.

Em sistemas de microsserviços, o RPC pode ser usado para


implementar padrões de comunicação síncrona, em que um faz
uma chamada bloqueante a outro e espera por uma resposta. Isso
é útil para operações que requerem consistência imediata ou para
simplificar o fluxo de controle em operações sequenciais.

No entanto, o uso de RPC em sistemas de microsserviços


também apresenta desafios, como a dependência entre serviços
Unidade 1

e o acoplamento de interfaces. Para mitigar esses problemas, é


importante projetar as interfaces cuidadosamente e usar técnicas
como versionamento de API e contratos de serviço para manter a
compatibilidade.

Além disso, o monitoramento e a rastreabilidade das


chamadas RPC em um ambiente de microsserviços podem ser
desafiadores, dada a natureza distribuída do sistema. Ferramentas
de rastreamento distribuído, como o Zipkin ou o Jaeger, podem
ser usadas para rastrear chamadas de procedimento remoto por
meio de vários serviços e identificar gargalos ou falhas.

Em resumo, os modelos de comunicação baseados em


chamadas de procedimento remoto (RPC) são uma parte essencial
dos sistemas distribuídos, fornecendo uma maneira eficiente e
abstrata de realizar chamadas entre processos. Variantes como
o gRPC e o JSON-RPC oferecem opções adaptadas a diferentes
requisitos de desempenho e formato de mensagem.

32 SISTEMAS DISTRIBUÍDOS
A integração do RPC com sistemas de microsserviços
permite a comunicação eficaz entre serviços, mas requer
consideração cuidadosa do design da interface e da gestão de
dependências.

Modelos de comunicação baseados


em eventos
Os modelos de comunicação baseados em eventos
são uma abordagem poderosa para a construção de sistemas
distribuídos, especialmente em cenários em que a reatividade e a
desacoplagem são essenciais.

Esses modelos são fundamentados em arquiteturas

Unidade 1
orientadas a eventos, nas quais os componentes do sistema
interagem principalmente mediante envio e recebimento de
eventos.

Em uma arquitetura orientada a eventos, os produtores


geram eventos que representam mudanças de estado ou
atividades significativas no sistema. Os consumidores de eventos,
por outro lado, reagem a eles executando ações apropriadas.

Essa separação entre produtores e consumidores


promove a desacoplagem e a escalabilidade, pois os componentes
podem ser desenvolvidos, implantados e escalados de forma
independente.

Os sistemas de publicação/assinatura são uma


implementação comum de comunicação baseada em eventos.
Nesses sistemas, os produtores publicam eventos em tópicos
específicos, e os consumidores se inscrevem nos tópicos de seu
interesse.

SISTEMAS DISTRIBUÍDOS 33
Quando um evento é publicado em um tópico, todos os
consumidores inscritos nesse tópico recebem o evento. Isso
permite a difusão eficiente de eventos para múltiplos destinatários
e facilita a construção de sistemas reativos e assíncronos.

Os brokers de eventos desempenham um papel central nos


sistemas de publicação/assinatura, atuando como intermediários
entre produtores e consumidores. Eles são responsáveis por
gerenciar tópicos, armazenar eventos e entregar eventos aos
consumidores inscritos. Além disso, os brokers podem oferecer
recursos como persistência, filtragem e transformação de eventos,
e garantias de entrega.

Os sistemas de streaming de dados, como Apache Kafka e


RabbitMQ, são exemplos de tecnologias que implementam brokers
Unidade 1

de eventos com capacidades avançadas de processamento de


fluxos de dados. O Apache Kafka, por exemplo, é projetado para
lidar com altos volumes de dados em tempo real, oferecendo alta
taxa de transferência, armazenamento persistente de eventos e
capacidade de processamento de fluxos de dados em paralelo.
Imagem 1.5 - Sistemas de streaming de dados

Fonte: Freepik.

34 SISTEMAS DISTRIBUÍDOS
Essas tecnologias são particularmente úteis em aplica-
ções de sistemas distribuídos em tempo real e Internet das Coi-
sas (IoT), em que a capacidade de processar e reagir a eventos
em tempo real é crucial.

EXEMPLO: em cenários de IoT, por exemplo, sensores


podem gerar eventos contínuos que representam leituras
de dados, e sistemas de processamento de eventos podem
analisar esses dados para detectar padrões, acionar
alertas ou tomar decisões automatizadas.

Além disso, os modelos de comunicação baseados


em eventos são fundamentais para a construção de sistemas
distribuídos resilientes e tolerantes a falhas. Eles permitem que

Unidade 1
os sistemas se recuperem de falhas de componentes isolados
e continuem operando com base nos eventos recebidos, sem a
necessidade de sincronização rígida entre os componentes.

Assim, percebemos que os modelos de comunicação


baseados em eventos, juntamente com arquiteturas orientadas
a eventos e tecnologias de streaming de dados, fornecem uma
abordagem flexível e escalável para a construção de sistemas
distribuídos. Eles são particularmente adequados para cenários
que exigem reatividade, desacoplamento e processamento
de dados em tempo real, como aplicações em IoT e sistemas
distribuídos em tempo real.

SISTEMAS DISTRIBUÍDOS 35
E então? Gostou do que lhe mostramos? Apren-
deu mesmo tudinho? Agora, só para termos cer-
teza de que você realmente entendeu o tema de
estudo deste capítulo, vamos resumir tudo o que
RESUMINDO
vimos. Você deve ter aprendido que os modelos de
comunicação fornecem abstrações fundamentais
para facilitar a interação entre os componentes de
sistemas distribuídos. Eles definem como as men-
sagens são trocadas, processadas e interpretadas,
permitindo a construção de sistemas complexos e
escaláveis. De modo que os modelos de comunica-
ção baseados em mensagens utilizam mensagens
como meio de comunicação entre processos. Eles
podem ser síncronos ou assíncronos, e são am-
plamente utilizados em sistemas distribuídos para
garantir escalabilidade, desacoplamento e flexibi-
lidade. Sistemas de troca de mensagens e filas de
Unidade 1

mensagens, como Apache Kafka e RabbitMQ, são


exemplos práticos dessa abordagem. Além do que,
os modelos de RPC abstraem a comunicação en-
tre processos como chamadas de procedimentos
remotos, simplificando a interação entre serviços
em sistemas distribuídos. Variantes como gRPC e
JSON-RPC oferecem diferentes opções de desem-
penho e formato de mensagem, adaptadas a diver-
sos cenários de uso. Os modelos de comunicação
baseados em eventos são centrados no conceito
de eventos, nos quais os componentes reagem a
mudanças de estado ou atividades significativas.
Arquiteturas orientadas a eventos e sistemas de
publicação/assinatura permitem a construção de
sistemas reativos e assíncronos, essenciais para
aplicações em tempo real e IoT. Esperamos que
este resumo tenha reforçado seu entendimento
dos diferentes modelos de comunicação em sis-
temas distribuídos e suas aplicações. Com esse
conhecimento, você está preparado para explorar
ainda mais as possibilidades e desafios associados
à construção de sistemas distribuídos eficientes e
escaláveis. Vamos em frente!

36 SISTEMAS DISTRIBUÍDOS
Sincronização e coordenação
em sistemas distribuídos
Ao término deste capítulo, você será capaz de en-
tender como funcionam as estratégias de sincroni-
zação e coordenação em ambientes distribuídos.
Isso será fundamental para o exercício de sua pro-
OBJETIVO
fissão, especialmente ao lidar com sistemas que
requerem consistência e cooperação entre dife-
rentes componentes distribuídos. As pessoas que
tentaram implementar sistemas distribuídos sem
a devida instrução tiveram problemas ao garantir
a sincronia e a coordenação efetiva entre os pro-
cessos. E então? Motivado para desenvolver esta
competência? Vamos lá. Avante!

Unidade 1
Introdução à sincronização
e coordenação em sistemas
distribuídos
A sincronização e coordenação em sistemas distribuídos
são conceitos fundamentais que garantem a consistência e a
colaboração efetiva entre componentes distribuídos.
Esses conceitos são essenciais para o funcionamento cor-
reto e eficiente de sistemas distribuídos, que são caracterizados
por múltiplos processos ou entidades que operam em diferentes
máquinas, mas que precisam trabalhar de forma conjunta para
atingir um objetivo comum.
A definição de sincronização em sistemas distribuídos
refere-se à capacidade de manter uma ordem temporal coeren-
te entre eventos ou ações executadas por diferentes processos.
Isso é crucial para garantir que operações críticas sejam realiza-
das de forma sequencial ou que dados sejam consistentes em
todo o sistema.

SISTEMAS DISTRIBUÍDOS 37
A coordenação, por outro lado, diz respeito à gestão das
interações entre processos, assegurando que eles colaborem de
forma eficaz para realizar tarefas conjuntas.

A importância da sincronização e coordenação em siste-


mas distribuídos não pode ser subestimada. Eles são fundamen-
tais para manter a integridade dos dados, evitar condições de
corrida, garantir a execução correta de transações distribuídas e
facilitar a recuperação de falhas. Além disso, uma coordenação
eficaz permite que os sistemas distribuídos sejam escaláveis e
flexíveis, adaptando-se a mudanças na carga de trabalho ou na
topologia da rede.

No entanto, a implementação de mecanismos de sincroni-


zação e coordenação em ambientes distribuídos apresenta desa-
Unidade 1

fios específicos. Um dos principais desafios é a falta de um relógio


global, o que torna difícil estabelecer uma ordem temporal precisa
entre eventos em diferentes processos. Isso requer o uso de algo-
ritmos de sincronização de relógio e protocolos de consenso para
alcançar uma visão comum do tempo e da ordem dos eventos.

Outro desafio é a comunicação entre processos


distribuídos, que pode ser afetada por latência, falhas de rede
e desordem de mensagens. Mecanismos robustos de troca
de mensagens e protocolos de comunicação confiáveis são
necessários para garantir a coordenação efetiva entre processos.

Além disso, a tolerância a falhas é um aspecto crítico em


sistemas distribuídos. Mecanismos de detecção e recuperação
de falhas, juntamente com estratégias de redundância e
replicação, são essenciais para garantir a continuidade do serviço
e a consistência dos dados, mesmo na presença de falhas em
componentes individuais.

38 SISTEMAS DISTRIBUÍDOS
Imagem 1.6 - Tolerância a falhas

Unidade 1
Fonte: Freepik.

Em resumo, a sincronização e coordenação em sistemas


distribuídos são áreas complexas que exigem uma compreensão
profunda dos princípios subjacentes e dos desafios específicos
desses ambientes. A implementação bem-sucedida desses
mecanismos é fundamental para o desenvolvimento de sistemas
distribuídos confiáveis, eficientes e escaláveis.

Para aprofundar ainda mais na discussão sobre


sincronização e coordenação em sistemas distribuídos, é
importante destacar a relevância dos algoritmos de exclusão
mútua distribuída. Esses algoritmos são fundamentais para
garantir que apenas um processo por vez execute uma seção
crítica, evitando assim a ocorrência de condições de corrida e
garantindo a integridade dos dados.

Além disso, as técnicas de coordenação baseadas em tran-


sações distribuídas desempenham um papel crucial em ambien-
tes nos quais a consistência dos dados é primordial. Mecanismos

SISTEMAS DISTRIBUÍDOS 39
como o protocolo de confirmação em duas fases (2PC) são empre-
gados para garantir que as transações sejam concluídas de forma
atômica, ou seja, todas as operações da transação são concluídas
com sucesso ou nenhuma delas é realizada.

Outra área de interesse é a coordenação baseada em mo-


delos de consistência, como consistência eventual, linearizável e
causal. Esses modelos definem regras sobre como as atualizações
nos dados são propagadas e visíveis para os processos no siste-
ma, equilibrando a consistência dos dados com a disponibilidade
e a latência do sistema.

Em sistemas distribuídos de grande escala, como os de


processamento de fluxo de dados e plataformas de computação
em nuvem, a coordenação eficiente é essencial para o balancea-
Unidade 1

mento de carga, a escalabilidade e a otimização de recursos.

Algoritmos de escalonamento e técnicas de orquestração


de contêineres são exemplos de mecanismos utilizados para
coordenar a execução de tarefas em ambientes distribuídos
dinâmicos.

É importante mencionar o papel crescente dos sis-


temas distribuídos em aplicações de inteligência
artificial e aprendizado de máquina. Nesses cená-
rios, a coordenação de recursos computacionais
IMPORTANTE
distribuídos é fundamental para o treinamento efi-
ciente de modelos de aprendizado de máquina em
grandes conjuntos de dados.

Técnicas como o aprendizado federado estão emergindo


para permitir a colaboração e coordenação entre dispositivos e
sistemas distribuídos, mantendo a privacidade e a segurança dos
dados.

40 SISTEMAS DISTRIBUÍDOS
Em conclusão, a sincronização e coordenação em sistemas
distribuídos são áreas de pesquisa e desenvolvimento ativas, com
implicações significativas para uma ampla gama de aplicações. A
compreensão desses conceitos é essencial para o projeto e a im-
plementação de sistemas distribuídos robustos, eficientes e esca-
láveis.

Mecanismos de sincronização em
sistemas distribuídos
Mecanismos de sincronização em sistemas distribuídos
são essenciais para manter a consistência e a ordem entre as
operações realizadas por diferentes processos distribuídos.
Esses mecanismos garantem que os processos cooperem de

Unidade 1
forma eficaz, respeitando as dependências temporais e evitando
conflitos.

Um dos principais desafios em sistemas distribuídos é a


sincronização de relógios. Devido à ausência de um relógio global
e às variações na latência de rede, os relógios dos diferentes
processos podem divergir, levando a inconsistências temporais.

Para lidar com esse problema, algoritmos de sincronização


de tempo, como o Network Time Protocol (NTP) e o algoritmo de
Berkeley, são utilizados para ajustar os relógios dos processos e
minimizar o desvio entre eles.

O NTP é um protocolo amplamente utilizado na internet


para sincronizar os relógios de computadores com uma referência
de tempo precisa, geralmente proveniente de relógios atômicos.

O NTP utiliza uma hierarquia de servidores de tempo e


algoritmos sofisticados para calcular o desvio de tempo e aplicar
ajustes aos relógios locais, alcançando uma precisão na ordem de
milissegundos.

SISTEMAS DISTRIBUÍDOS 41
O algoritmo de Berkeley, por outro lado, é uma aborda-
gem mais simples, adequada para sistemas distribuídos com um
número limitado de processos. Nesse algoritmo, um processo lí-
der coleta os tempos dos outros processos, calcula a média e en-
via ajustes de tempo para alinhar os relógios. Esse método é eficaz
em ambientes controlados, mas pode ser menos preciso que o
NTP em redes maiores e mais variáveis.

Além da sincronização de relógios, a exclusão mútua


distribuída é outro mecanismo crucial em sistemas distribuídos.
Esse mecanismo garante que apenas um processo por vez possa
acessar um recurso compartilhado ou executar uma seção crítica,
evitando assim condições de corrida e garantindo a consistência
dos dados.
Unidade 1

Existem vários algoritmos para implementar a exclusão


mútua distribuída, cada um com suas próprias características e
trade-offs. Alguns algoritmos, como o de Lamport e o de Ricart-
Agrawala, utilizam marcações de tempo lógicas e trocas de
mensagens para estabelecer uma ordem entre as solicitações de
acesso à seção crítica.

Outra abordagem é o uso de algoritmos de eleição de


líder, nos quais os processos concorrem para se tornar o líder ou
coordenador responsável por controlar o acesso à seção crítica.
Esses algoritmos, como o algoritmo do valentão e o do anel,
são particularmente úteis em cenários em que é necessário um
controle centralizado, mas é importante garantir a tolerância a
falhas e a recuperação de líderes.

Em resumo, os mecanismos de sincronização em sistemas


distribuídos, incluindo a sincronização de relógios e a exclusão
mútua distribuída, são fundamentais para o funcionamento
correto e eficiente desses sistemas.

42 SISTEMAS DISTRIBUÍDOS
A escolha do algoritmo apropriado depende das
características específicas do sistema, como a topologia da rede,
o número de processos e os requisitos de precisão temporal e
consistência.

Além dos mecanismos de sincronização de relógios e ex-


clusão mútua distribuída, é importante considerar outros aspec-
tos relacionados à coordenação e sincronização em sistemas dis-
tribuídos.

Um ponto relevante é a consistência de dados em


sistemas distribuídos. A sincronização de dados
entre diferentes réplicas de um sistema é crucial
para garantir que todas as partes interessadas
IMPORTANTE
tenham uma visão consistente e atualizada das

Unidade 1
informações. Isso é especialmente importante
em sistemas de bancos de dados distribuídos,
em que as transações precisam ser coordenadas
e sincronizadas para garantir a integridade dos
dados.

Nesse contexto, surgem os protocolos de replicação de


dados, que permitem que eles sejam replicados em diferentes
nós do sistema. Esses protocolos precisam lidar com questões
de consistência, como a eventual e a forte, garantindo que as
diferentes cópias dos dados permaneçam consistentes ao longo
do tempo.

Além disso, a sincronização e coordenação em sistemas


distribuídos também estão relacionadas à tolerância a falhas.
Mecanismos de detecção e recuperação de falhas são necessários
para garantir que o sistema permaneça operacional mesmo em
caso de falhas em alguns de seus componentes. Isso requer a
implementação de algoritmos de recuperação, como o algoritmo
de recuperação de líder, que permite que o sistema eleja um novo
líder em caso de falha do líder atual.

SISTEMAS DISTRIBUÍDOS 43
Outro aspecto importante é a escalabilidade dos meca-
nismos de sincronização e coordenação. À medida que o sistema
cresce em tamanho e complexidade, é fundamental que os me-
canismos de sincronização e coordenação sejam capazes de lidar
com um grande número de processos e operações de forma efi-
ciente. Isso requer o uso de algoritmos e protocolos otimizados,
bem como a utilização de técnicas de paralelismo e distribuição
de carga.

Em suma, a sincronização e coordenação em sistemas


distribuídos são áreas de pesquisa e desenvolvimento contínuos,
com muitos desafios e oportunidades. À medida que os sistemas
distribuídos se tornam cada vez mais comuns em aplicações
do mundo real, é fundamental continuar avançando no
Unidade 1

desenvolvimento de mecanismos de sincronização e coordenação


robustos, eficientes e escaláveis.

Coordenação e consenso em
sistemas distribuídos
Coordenação e consenso são conceitos fundamentais no
contexto de sistemas distribuídos, em que múltiplas entidades
computacionais precisam operar de forma coerente para
alcançar um objetivo comum. Esses conceitos são cruciais para a
confiabilidade, consistência e disponibilidade de serviços e dados
em ambientes distribuídos.

O problema do consenso em sistemas distribuídos


refere-se à necessidade de garantir que todos os componentes
do sistema concordem com um determinado valor ou decisão,
mesmo na presença de falhas e incertezas.

44 SISTEMAS DISTRIBUÍDOS
Isso é particularmente desafiador devido a características
como a falta de um relógio global, latência variável na comunica-
ção e possibilidade de falhas de componentes.

Algoritmos de consenso, como Paxos e Raft, são projeta-


dos para resolver esse problema. Paxos, introduzido por Leslie
Lamport, é um protocolo que garante a consistência e o consen-
so em um ambiente distribuído, mesmo quando alguns dos com-
ponentes falham ou se comportam de maneira não confiável. O
algoritmo é baseado em uma série de propostas e eleições, nas
quais os componentes votam em valores propostos até que um
consenso seja alcançado.

Raft é outro algoritmo de consenso projetado para ser


mais compreensível do que Paxos, mantendo propriedades

Unidade 1
semelhantes de correção e eficiência. Raft divide o processo
de consenso em termos de líderes e seguidores, simplificando
o gerenciamento de replicação de log e tornando mais fácil a
implementação e compreensão do protocolo.

Protocolos de coordenação, como o ZooKeeper,


desempenham um papel vital na gestão de configurações,
sincronização e nomeação em sistemas distribuídos. ZooKeeper
fornece um serviço centralizado para manter informações de
configuração, nomear, sincronizar e fornecer serviços de grupo,
facilitando a coordenação e o gerenciamento de estado entre os
componentes distribuídos.

A coordenação eficaz em sistemas distribuídos é alcança-


da por meio da implementação de protocolos robustos que ga-
rantem a sincronização e o consenso entre os componentes. Isso
envolve técnicas como o bloqueio distribuído, eleições de líder e
barramentos de sincronização, que ajudam a manter a consistên-
cia e a ordenação das operações.

SISTEMAS DISTRIBUÍDOS 45
O consenso em sistemas distribuídos é essencial para
operações que exigem uma decisão unificada entre componentes
distribuídos, como transações distribuídas, replicação de dados
e atualizações de estado. Os algoritmos de consenso garantem
que, apesar das falhas e da comunicação assíncrona, um acordo
comum pode ser alcançado, assegurando a integridade dos dados
e a continuidade dos serviços.

Implementar algoritmos de consenso e protocolos de


coordenação em sistemas distribuídos apresenta desafios
significativos, como lidar com a partição de rede, escolher líderes
em meio a falhas e garantir a escalabilidade e o desempenho.
Esses desafios exigem uma cuidadosa consideração de trade-offs
entre consistência, disponibilidade e tolerância a partições.
Unidade 1

O problema do consenso também está intrinsecamente


ligado à tolerância a falhas bizantinas, em que os componentes
podem falhar de maneira arbitrária ou maliciosa. Resolver o
consenso em tais cenários exige algoritmos que possam lidar com
a desinformação e comportamentos não cooperativos, garantindo
a integridade do sistema.

Protocolos de coordenação, como ZooKeeper, ajudam


a abstrair a complexidade inerente à coordenação em sistemas
distribuídos, fornecendo uma interface simples para tarefas
complexas. Isso permite que desenvolvedores se concentrem
na lógica da aplicação, em vez de nos detalhes intrincados da
coordenação distribuída.

A evolução dos algoritmos de consenso e dos protocolos


de coordenação continua à medida que novos desafios emergem
em sistemas distribuídos, especialmente com o advento de
tecnologias como blockchain e computação em nuvem. Essas
tecnologias dependem fortemente de consenso distribuído e
coordenação para funcionar efetivamente.

46 SISTEMAS DISTRIBUÍDOS
Uma curiosidade fascinante sobre os sistemas dis-
tribuídos e os algoritmos de consenso é a inspira-
ção biológica por trás de alguns deles. Um exem-
VOCÊ SABIA? plo notável é o algoritmo de consenso baseado
no comportamento das abelhas. Esse algoritmo
foi inspirado pela maneira como as abelhas esco-
lhem um novo local para a colmeia. Quando uma
colmeia se torna superpopulada, ela se divide, e as
abelhas operárias saem em busca de novos locais.
Ao encontrar um local potencial, a abelha retorna
à colmeia e realiza uma “dança” para comunicar
a localização, a qualidade e a distância do novo
local para as outras abelhas. As abelhas que ob-
servam essa dança podem visitar o local sugerido
e, se aprovarem, juntam-se à dança para reforçar

Unidade 1
a sugestão. Esse processo continua até que haja
consenso na colmeia sobre o melhor novo local.
Essa abordagem de “tomada de decisão coletiva”
das abelhas foi adaptada para o desenvolvimento
de algoritmos de consenso em sistemas distribuí-
dos, em que múltiplos nós devem concordar sobre
um valor ou ação específica. A ideia é que, assim
como as abelhas, cada nó no sistema distribuído
pode “votar” ou “dançar” para a sua escolha prefe-
rida. Esses votos são agregados para chegar a um
consenso, mesmo na presença de falhas ou nós
maliciosos.

Deste modo, o algoritmo de consenso inspirado nas


abelhas ilustra a riqueza de soluções encontradas na natureza
para problemas complexos de coordenação e decisão. Ele
também demonstra como a observação de sistemas biológicos
pode inspirar soluções inovadoras para desafios tecnológicos,
promovendo avanços significativos em campos como sistemas
distribuídos, robótica e inteligência artificial.

SISTEMAS DISTRIBUÍDOS 47
Essa interseção entre biologia e tecnologia continua
a ser uma fonte valiosa de inspiração para pesquisadores
e desenvolvedores, abrindo novos caminhos para soluções
eficientes e resilientes em sistemas computacionais distribuídos.

Estratégias de replicação e
consistência
Estratégias de replicação e consistência são fundamentais
na construção e manutenção de sistemas distribuídos confiáveis e
eficientes. A replicação de dados envolve a cópia de informações
em múltiplos locais, nodos ou sistemas para garantir a disponibili-
dade e a tolerância a falhas.
Unidade 1

Já a consistência se refere à garantia de que todas as có-


pias dos dados permaneçam sincronizadas ou, pelo menos, alcan-
cem um estado de sincronia dentro de um tempo aceitável.

Modelos de consistência fornecem um framework teórico


para entender e projetar sistemas que utilizam replicação de
dados.

EXEMPLO: o modelo de consistência sequencial exige


que as operações sobre os dados apareçam como se
estivessem sendo executadas em uma sequência única e
determinística, mesmo em um ambiente distribuído.

Isso significa que se uma operação de escrita acontece


antes de uma operação de leitura em um sistema, todas as leituras
subsequentes devem refletir essa escrita.

Por outro lado, a consistência eventual é um modelo


mais relaxado, no qual as cópias dos dados não precisam ser
idênticas imediatamente após uma operação de escrita. Em vez
disso, o sistema garante que, se nenhuma nova atualização for

48 SISTEMAS DISTRIBUÍDOS
feita aos dados, todas as cópias convergirão para o mesmo valor
eventualmente. Esse modelo é particularmente útil em sistemas
nos quais a disponibilidade é mais crítica do que a precisão
imediata dos dados.

Técnicas de replicação de dados variam de simples


replicação mestre-escravo a abordagens mais complexas, como
replicação multi-mestre, em que múltiplos nodos podem aceitar
escritas simultaneamente. Cada técnica tem seus próprios trade-
offs em termos de complexidade, desempenho, disponibilidade e
consistência dos dados.

Gerenciar conflitos é uma parte essencial da replicação,


especialmente em modelos que permitem atualizações
concorrentes dos dados. Estratégias de resolução de conflitos

Unidade 1
podem incluir desde a sobreposição de escritas baseada em
timestamp até algoritmos mais sofisticados que tentam mesclar
mudanças de maneira inteligente.

Sistemas distribuídos devem escolher estratégias de repli-


cação e modelos de consistência que melhor atendam aos seus
requisitos específicos. Para aplicações que demandam alta dis-
ponibilidade e podem tolerar alguma inconsistência temporária,
a consistência eventual e a replicação multi-mestre podem ser
apropriadas. Em contraste, sistemas que necessitam de leituras
consistentes imediatas podem se beneficiar da replicação mestre-
-escravo com consistência sequencial.

EXEMPLO: a seleção de um modelo de consistência ade-


quado impacta diretamente na experiência do usuário
final. Em sistemas de comércio eletrônico, a consistência
eventual pode ser suficiente para a listagem de produtos,
mas não para o inventário, no qual a consistência sequen-
cial é crítica para evitar vendas de itens não disponíveis.

SISTEMAS DISTRIBUÍDOS 49
Implementar replicação de dados e manter a consistência
em sistemas distribuídos também exige mecanismos robustos de
detecção e recuperação de falhas. Esses mecanismos asseguram
que falhas em um ou mais nodos não comprometam a integrida-
de ou a disponibilidade dos dados replicados.

Além disso, a escalabilidade é outro aspecto importante


influenciado pelas estratégias de replicação e consistência. Sis-
temas bem projetados devem ser capazes de escalar horizontal-
mente, adicionando mais nodos sem degradar significativamente
o desempenho ou a confiabilidade.

A segurança dos dados replicados é outra consideração


crítica. Medidas de proteção, como criptografia e controle de
acesso, devem ser aplicadas consistentemente em todas as cópias
Unidade 1

dos dados para evitar exposições e violações.


Imagem 1.7 - Segurança de dados

Fonte: Freepik.

50 SISTEMAS DISTRIBUÍDOS
A complexidade do gerenciamento de sistemas distribuí-
dos com replicação de dados e diferentes modelos de consistên-
cia demanda ferramentas e plataformas especializadas. Soluções
como sistemas de gerenciamento de banco de dados distribuído
e plataformas de sincronização de dados oferecem abstrações e
funcionalidades para simplificar essas tarefas.

Assim, a evolução contínua de tecnologias de armazena-


mento e comunicação oferece novas oportunidades e desafios
para a replicação de dados e a manutenção da consistência em
sistemas distribuídos. Pesquisas e desenvolvimentos nessa área
continuam a expandir as fronteiras do que é possível, melhorando
a eficiência, a confiabilidade e a escalabilidade desses sistemas.

Além do que, a replicação de dados e a gestão da consis-

Unidade 1
tência são aspectos vitais dos sistemas distribuídos, exigindo um
equilíbrio cuidadoso entre disponibilidade, desempenho e preci-
são dos dados. À medida que a dependência de sistemas distri-
buídos continua a crescer em muitos setores, a importância de
estratégias eficazes de replicação e modelos de consistência só
tende a aumentar.

SISTEMAS DISTRIBUÍDOS 51
E então? Gostou do que lhe mostramos? Aprendeu
mesmo tudinho? Agora, só para termos certeza de
que você realmente entendeu o tema de estudo
RESUMINDO deste capítulo, vamos resumir tudo o que vimos.
Você deve ter aprendido que a sincronização e
coordenação em sistemas distribuídos são essen-
ciais para garantir a consistência, a ordem e a coo-
peração efetiva entre componentes distribuídos.
Vimos que os mecanismos de sincronização, como
o Network Time Protocol (NTP) e o algoritmo de
Berkeley, são fundamentais para ajustar os reló-
gios dos processos e minimizar o desvio entre eles.
Além disso, exploramos estratégias de replicação
e consistência, como a replicação multi-mestre
com consistência eventual, que são cruciais para
Unidade 1

garantir a disponibilidade, a tolerância a falhas e


a integridade dos dados em sistemas distribuídos.
Esperamos que você esteja preparado para aplicar
esses conceitos em cenários reais de sistemas dis-
tribuídos, desenvolvendo competências essenciais
para sua atuação profissional. Avante!

52 SISTEMAS DISTRIBUÍDOS
Consistência e replicação em
sistemas distribuídos
Ao término deste capítulo, você será capaz de en-
tender como funciona a consistência e replicação
em sistemas distribuídos. Isso será fundamental
para o exercício de sua profissão, especialmente
OBJETIVO
se você estiver envolvido no projeto, implementa-
ção ou manutenção de sistemas distribuídos. As
pessoas que tentaram implementar estratégias de
consistência e replicação em sistemas distribuídos
sem a devida instrução tiveram problemas ao ga-
rantir a integridade dos dados e a sincronização
entre os diversos nós do sistema. E então? Moti-
vado para desenvolver esta competência? Vamos

Unidade 1
lá. Avante!

Introdução aos métodos de


consistência em sistemas
distribuídos
A compreensão dos métodos de consistência em sistemas
distribuídos é fundamental para garantir a integridade dos dados
em ambientes nos quais os componentes de software e hardware
operam de forma dispersa.

Esses métodos abordam como as operações de dados


são gerenciadas para assegurar que todas as instâncias de dados
replicados permaneçam sincronizadas, ou eventualmente se
tornem consistentes após certas operações.

A complexidade desses sistemas implica uma série de


desafios únicos, especialmente relacionados à consistência dos
dados, que são cruciais para o desempenho e confiabilidade do
sistema.

SISTEMAS DISTRIBUÍDOS 53
Consistência forte é um modelo ideal em que todas as
operações de leitura retornam o valor mais recente escrito. Em
um ambiente distribuído, isso significa que qualquer atualização
de dados precisa ser imediatamente visível para todas as leituras
subsequentes, independentemente do nodo que as executa.

Embora a consistência forte facilite o raciocínio sobre o


estado do sistema, sua implementação pode ser desafiadora. Isso
ocorre porque exige mecanismos de sincronização complexos
que podem impactar negativamente o desempenho do sistema,
devido à necessidade de esperar a propagação de dados para
todos os nodos antes de completar as operações.

Por outro lado, a consistência eventual oferece um modelo


mais flexível. Ela permite que as cópias dos dados eventualmente
Unidade 1

cheguem ao mesmo estado, sem garantir que as operações de


leitura imediatamente após uma escrita reflitam essa atualização.

Esse modelo é adequado para aplicações em que a


disponibilidade e a tolerância a partições são prioritárias em
relação à precisão imediata dos dados. A consistência eventual é
amplamente utilizada em sistemas distribuídos de grande escala,
em que a latência na propagação de dados é uma concessão
aceitável para melhorar o desempenho e a escalabilidade.

A consistência causal é outro modelo importante que es-


tabelece uma ordem causal entre as operações. Isso significa que
se uma operação A acontece antes da operação B, então todos os
sistemas no ambiente distribuído perceberão A antes de B.

Esse modelo é particularmente útil em aplicações que


dependem de uma sequência lógica de eventos, como sistemas
de mensagens, cuja ordem das mensagens afeta como elas são
processadas.

54 SISTEMAS DISTRIBUÍDOS
Implementar esses modelos de consistência em sistemas
distribuídos envolve um equilíbrio entre disponibilidade, latência
e precisão dos dados. Escolher o modelo de consistência
adequado depende das exigências específicas da aplicação, em
que diferentes abordagens podem ser adotadas para diferentes
partes do sistema.

Os métodos de consistência não apenas afetam como os


dados são acessados e atualizados, mas também influenciam o
design do sistema. Por exemplo, sistemas que adotam a consistên-
cia forte podem precisar de algoritmos de consenso para garantir
que todas as cópias dos dados sejam atualizadas atomicamente.
Isso pode envolver protocolos de votação ou eleição entre os no-
dos para decidir sobre as atualizações.

Unidade 1
Além disso, a implementação de consistência forte em
sistemas distribuídos geralmente requer o uso de transações
distribuídas, que podem ser complexas de gerenciar devido
à necessidade de lidar com falhas e garantir a atomicidade e
isolamento das operações.

A consistência eventual, embora reduza a complexidade


da sincronização entre nodos, requer mecanismos para lidar
com conflitos de dados que possam surgir devido a atualizações
concorrentes.

Estratégias como resolução de conflitos baseada em


timestamp ou versionamento de dados podem ser empregadas
para assegurar que as cópias dos dados eventualmente converjam
para um estado consistente.

A consistência causal, por sua vez, exige o rastreamento


das dependências causais entre operações, o que pode ser reali-
zado por meio de vetores de relógio ou estampas de tempo lógico.
Essas técnicas permitem que o sistema determine a ordem lógi-
ca das operações e aplique atualizações de forma que respeitem
essa ordem.

SISTEMAS DISTRIBUÍDOS 55
A escolha entre diferentes modelos de consistência tam-
bém tem implicações diretas na experiência do usuário. Aplica-
ções que requerem respostas imediatas e precisas dos dados,
como sistemas financeiros, podem demandar consistência forte,
enquanto aplicações que podem tolerar alguma desatualização
temporária dos dados, como feeds de redes sociais, podem se be-
neficiar da consistência eventual.

Ademais, a evolução dos sistemas distribuídos tem levado


ao desenvolvimento de soluções híbridas que tentam combinar os
benefícios de diferentes modelos de consistência. Essas soluções
visam oferecer garantias fortes de consistência para operações
críticas, enquanto permitem maior flexibilidade e desempenho
para outras operações menos sensíveis.
Unidade 1

Em suma, a integridade dos dados em sistemas distribuí-


dos é uma questão complexa que requer um entendimento pro-
fundo dos métodos de consistência e replicação.

Os desenvolvedores devem ponderar cuidadosamente


as necessidades de suas aplicações para escolher a estratégia de
consistência mais adequada, equilibrando entre consistência, dis-
ponibilidade e tolerância a partições. À medida que a tecnologia
avança, novos modelos e técnicas continuarão a surgir, expandin-
do as possibilidades de design e implementação de sistemas distri-
buídos confiáveis e eficientes.

Replicação de dados: estratégias


e desafios
A replicação de dados é uma técnica essencial em siste-
mas distribuídos, projetada para aumentar a disponibilidade, a
resiliência e o desempenho. Existem várias estratégias de repli-
cação, cada uma com seus próprios conjuntos de vantagens e

56 SISTEMAS DISTRIBUÍDOS
desafios. Duas das formas mais comuns de replicação são a sín-
crona e a assíncrona, ambas desempenhando papéis cruciais em
ambientes distribuídos.

Na replicação síncrona, as atualizações de dados são


simultaneamente replicadas em todos os nodos antes de uma
operação ser considerada completa. Essa abordagem garante
uma forte consistência dos dados, assegurando que todas as
leituras retornem o valor mais recente.
Imagem 1.8 - Atualização de dados

Unidade 1
Fonte: Freepik.

Embora a replicação síncrona ofereça a vantagem da


consistência imediata, ela apresenta desafios significativos
relacionados à latência de rede. Cada operação de escrita requer
a confirmação de todos os nodos replicados, o que pode retardar
significativamente as operações devido à latência de rede e à
largura de banda limitada.

Por outro lado, a replicação assíncrona permite que as


operações de escrita sejam concluídas em um nodo antes de
serem replicadas para outros nodos. Essa abordagem melhora

SISTEMAS DISTRIBUÍDOS 57
o desempenho das operações de escrita, pois não é necessário
esperar pelas confirmações de todos os nodos.

No entanto, a replicação assíncrona pode levar a


inconsistências temporárias entre os nodos, uma vez que as
atualizações podem não ser imediatamente visíveis em todos os
nodos replicados.

Além das abordagens síncrona e assíncrona, a replicação


mestre-escravo é outra estratégia comum. Neste modelo, um úni-
co nodo mestre lida com todas as operações de escrita, enquanto
os nodos escravos são sincronizados com o mestre.

Embora essa estratégia simplifique o gerenciamento de


escritas e possa melhorar a consistência, ela introduz um ponto
Unidade 1

único de falha: se o nodo mestre falhar, todo o sistema pode se


tornar indisponível até que a falha seja resolvida.

A replicação multi-mestre oferece uma solução para o


problema do ponto único de falha, permitindo que múltiplos
nodos aceitem operações de escrita.

Essa abordagem aumenta a disponibilidade e a resistência


a falhas, pois o sistema pode continuar operando mesmo se
alguns nodos falharem. No entanto, a replicação multi-mestre
também traz desafios adicionais de gerenciamento de conflitos,
pois atualizações concorrentes em diferentes nodos podem
resultar em inconsistências.

O gerenciamento de conflitos é, portanto, um desafio


crítico em sistemas que utilizam replicação de dados. Estratégias
para resolver conflitos variam desde a sobreposição simples, em
que a última escrita vence, até abordagens mais sofisticadas que
tentam mesclar automaticamente as mudanças conflitantes.

58 SISTEMAS DISTRIBUÍDOS
Independentemente da estratégia escolhida, é crucial que
o sistema seja capaz de identificar e resolver conflitos de maneira
eficiente para manter a integridade dos dados.

Além disso, a latência de rede e as limitações de largura


de banda são preocupações constantes em sistemas distribuídos.
Estratégias de replicação devem ser cuidadosamente projetadas
para minimizar o impacto dessas limitações, otimizando o uso da
rede e reduzindo a latência sempre que possível.

A escolha da estratégia de replicação adequada depende


de vários fatores, incluindo os requisitos de consistência dos da-
dos, a tolerância a falhas, o desempenho desejado e as caracte-
rísticas específicas do ambiente de rede. Desenvolvedores e ar-
quitetos de sistemas distribuídos devem avaliar cuidadosamente

Unidade 1
esses fatores para determinar a melhor abordagem para seu caso
específico.

Além das considerações técnicas, questões operacionais


como o monitoramento do estado de replicação e a recuperação
de falhas também são fundamentais.

Sistemas distribuídos devem incluir mecanismos robustos


para monitorar a saúde dos nodos replicados e para recuperar
rapidamente as falhas, garantindo a continuidade das operações
e a integridade dos dados.

Em resumo, a replicação de dados em sistemas distribuí-


dos é um equilíbrio delicado entre consistência, disponibilidade,
desempenho e resiliência. As estratégias escolhidas devem refletir
cuidadosamente as necessidades do sistema, ao mesmo tempo
em que se adaptam às limitações inerentes aos ambientes distri-
buídos.

SISTEMAS DISTRIBUÍDOS 59
Ao enfrentar esses desafios com soluções bem pensadas
e técnicas eficazes, é possível criar sistemas distribuídos que não
apenas atendam aos requisitos operacionais, mas também ofere-
çam uma base sólida para aplicações confiáveis e escaláveis.

Algoritmos de consenso e
coordenação
Algoritmos de consenso e coordenação são pilares funda-
mentais nos sistemas distribuídos, permitindo que múltiplos nós
operem como uma entidade coesa apesar da ausência de um re-
lógio global e da presença de falhas.

Esses algoritmos são cruciais para resolver problemas


Unidade 1

complexos de consistência de dados e coordenação de atividades


entre nós distribuídos, garantindo que todos os componentes
do sistema mantenham uma visão consistente do estado
compartilhado.

Paxos, introduzido por Leslie Lamport, é um dos algorit-


mos de consenso mais influentes e estudados no campo dos sis-
temas distribuídos. Sua genialidade reside na capacidade de ga-
rantir a consistência dos dados mesmo na presença de falhas de
comunicação e de componentes.

Por conseguinte, Paxos é baseado em uma série de ro-


dadas de propostas e acordos, em que os nós participantes con-
cordam sobre uma sequência específica de operações. Embora
reconhecido pela sua robustez e correção teórica, Paxos é fre-
quentemente criticado por sua complexidade de compreensão e
implementação, o que levou ao desenvolvimento de algoritmos
alternativos.

60 SISTEMAS DISTRIBUÍDOS
Raft é um desses algoritmos projetados para ser mais
compreensível do que Paxos, sem comprometer a confiabilidade
e a eficiência. Raft simplifica o problema do consenso ao eleger
um líder para coordenar as mudanças no estado do sistema.
Esse líder é responsável por gerenciar a replicação de logs entre
os nós e assegurar que as operações sejam aplicadas na mesma
ordem em todos eles. Raft introduz conceitos claros de termos,
eleição de líder e replicação de log, tornando-o mais acessível para
estudantes e profissionais.

ZooKeeper Atomic Broadcast (Zab) é outro algoritmo de


consenso utilizado pelo ZooKeeper para gerenciar a configuração
e a sincronização em sistemas distribuídos. Zab garante que todas
as mudanças no estado do sistema sejam entregues a todos os

Unidade 1
nós na mesma ordem, permitindo que o sistema se recupere
de falhas e mantenha uma consistência forte entre todos os
seus componentes. A combinação do Zab com a arquitetura do
ZooKeeper oferece uma solução robusta para problemas de
coordenação em ambientes distribuídos.

Os algoritmos de consenso, como Paxos, Raft e Zab,


são fundamentais para resolver o dilema entre consistência e
disponibilidade em sistemas distribuídos. Eles permitem que
sistemas operem eficientemente mesmo quando confrontados
com a incerteza inerente à comunicação em redes, falhas de
componentes e a necessidade de manter a integridade dos dados.

A coordenação eficaz em sistemas distribuídos é alcançada


por meio da implementação cuidadosa desses algoritmos de
consenso. Eles garantem que todas as operações sejam realizadas
de maneira ordenada e atômica, evitando estados inconsistentes
que podem surgir de operações concorrentes.

SISTEMAS DISTRIBUÍDOS 61
Essa coordenação é essencial não apenas para a
consistência dos dados, mas também para a correção das
operações realizadas pelo sistema como um todo.

Um desafio significativo no design e implementação


de algoritmos de consenso é a tolerância a falhas. Sistemas
distribuídos devem ser capazes de continuar operando de forma
satisfatória mesmo na presença de falhas de nodos individuais ou
de partes da rede. Algoritmos como Paxos e Raft são projetados
com mecanismos de tolerância a falhas, permitindo que o sistema
se recupere de falhas sem perder dados ou comprometer a
consistência.

Outra consideração importante é a latência inerente à


comunicação em redes distribuídas. Algoritmos de consenso
Unidade 1

devem ser otimizados para minimizar o impacto da latência na


velocidade de acordo entre os nós, equilibrando a necessidade de
consistência com a demanda por desempenho.

A escolha do algoritmo de consenso adequado depende


de vários fatores, incluindo os requisitos específicos do sistema, a
topologia da rede, e o modelo de falhas assumido.
Imagem 1.9 - A rede

Fonte: Freepik.

62 SISTEMAS DISTRIBUÍDOS
Cada algoritmo tem suas próprias vantagens e desvanta-
gens, e a decisão deve ser baseada em uma avaliação cuidadosa
das necessidades do sistema. A implementação desses algoritmos
em sistemas reais requer atenção aos detalhes e uma compreen-
são profunda dos princípios subjacentes.

O algoritmo Paxos, amplamente utilizado em


sistemas distribuídos para garantir o consenso
entre os nós, recebeu seu nome em homenagem
VOCÊ SABIA? ao restaurante grego favorito de Leslie Lamport, o
criador do algoritmo. O termo “Paxos” é derivado
da palavra grega para “votação” e reflete a natureza
democrática do processo de consenso que o
algoritmo facilita. Essa curiosidade adiciona uma
dimensão interessante à história por trás de um

Unidade 1
dos algoritmos mais importantes na computação
distribuída.

Técnicas avançadas e casos de uso


Técnicas avançadas de consistência e replicação desem-
penham um papel crucial em sistemas distribuídos de grande
escala, garantindo que os dados sejam precisos, atualizados e
acessíveis em diferentes nós da rede.

Uma dessas técnicas é o versionamento de vetores, que


consiste em associar um vetor a cada dado para rastrear suas
diferentes versões em cada nó. Isso permite que os sistemas
identifiquem e resolvam conflitos de forma eficiente, mantendo a
consistência dos dados.

Outra técnica importante é a reconciliação de conflitos,


que é essencial em ambientes distribuídos nos quais diferentes
nós podem modificar o mesmo dado simultaneamente.

SISTEMAS DISTRIBUÍDOS 63
Existem várias abordagens para a reconciliação de con-
flitos, como a escolha do último escritor, a priorização de certos
nós ou até mesmo a realização de fusões inteligentes de dados
conflitantes. Essas técnicas garantem que os dados permaneçam
consistentes e que as operações sejam concluídas com sucesso.

Além disso, estratégias de particionamento de dados são


fundamentais para distribuir os dados de forma eficiente entre os
nós da rede. O particionamento pode ser feito de várias maneiras,
como particionamento por chave, em que os dados são divididos
com base em uma chave específica, ou particionamento por
intervalo, no qual os dados são divididos com base em intervalos
de valores. Essas estratégias garantem que os dados sejam
distribuídos de forma equilibrada e que as operações de leitura e
Unidade 1

gravação sejam eficientes.

No contexto de bancos de dados NoSQL, essas técnicas


são amplamente utilizadas para lidar com grandes volumes de
dados e garantir sua disponibilidade e consistência.

EXEMPLO: o Apache Cassandra utiliza o versionamento


de vetores e estratégias de particionamento para oferecer
alta disponibilidade e escalabilidade linear em ambientes
distribuídos.

Em sistemas de arquivos distribuídos, como o Google


File System (GFS) e o Hadoop Distributed File System (HDFS), as
técnicas avançadas de consistência e replicação são essenciais
para garantir que os arquivos sejam acessíveis e atualizados de
forma consistente em diferentes nós.

O GFS, por exemplo, utiliza a replicação de blocos de dados


e técnicas de reconciliação de conflitos para garantir a integridade
dos arquivos em ambientes distribuídos.

64 SISTEMAS DISTRIBUÍDOS
Nas plataformas de computação em nuvem, como o
Amazon Web Services (AWS) e o Microsoft Azure, essas técnicas
são aplicadas para garantir que os serviços e recursos sejam
escaláveis, resilientes e consistentes.

O AWS DynamoDB utiliza técnicas de versionamento


de vetores e particionamento para oferecer uma alta taxa de
transferência e baixa latência em suas operações de banco de
dados distribuído.

Em resumo, as técnicas avançadas de consistência


e replicação são fundamentais para garantir a eficiência,
disponibilidade e consistência dos dados em sistemas distribuídos
de grande escala.

Unidade 1
Por meio do versionamento de vetores, reconciliação de
conflitos e estratégias de particionamento, é possível construir
sistemas distribuídos robustos e escaláveis que atendam às
demandas de aplicações modernas.

SISTEMAS DISTRIBUÍDOS 65
E então? Gostou do que lhe mostramos? Aprendeu
mesmo tudinho? Agora, só para termos certeza de
que você realmente entendeu o tema de estudo
RESUMINDO deste capítulo, vamos resumir tudo o que vimos.
Você deve ter aprendido que os sistemas distribuí-
dos apresentam desafios únicos quando se trata
de garantir a consistência e a integridade dos da-
dos. No que diz respeito aos métodos de consis-
tência, exploramos conceitos como consistência
forte, eventual e causal, cada um com suas caracte-
rísticas e impactos no design de sistemas distribuí-
dos. Além disso, discutimos as estratégias de re-
plicação de dados, incluindo replicação síncrona e
assíncrona, e as complexidades associadas a cada
uma, como gerenciamento de conflitos, latência de
Unidade 1

rede e questões de largura de banda. Ao abordar


os algoritmos de consenso e coordenação, exami-
namos de perto o Paxos, Raft e Zab, algoritmos
fundamentais para alcançar o consenso entre os
nós de um sistema distribuído. Compreendemos
como esses algoritmos permitem que múltiplos
nós cheguem a um acordo sobre o estado dos da-
dos, garantindo a integridade e a consistência dos
mesmos. Por fim, exploramos técnicas avançadas
e casos de uso desses algoritmos, destacando sua
importância em cenários reais de aplicação. Por-
tanto, ao término deste capítulo, você deve ter
adquirido uma compreensão mais sólida sobre os
desafios enfrentados na garantia da consistência e
replicação em sistemas distribuídos, bem como as
técnicas e os algoritmos utilizados para superar es-
ses desafios. Esses conhecimentos são essenciais
para o projeto, implementação e manutenção de
sistemas distribuídos eficientes e confiáveis.

66 SISTEMAS DISTRIBUÍDOS
STEEN, M. V.; TANENBAUM, A. Sistemas distribuídos: princípios e

REFERÊNCIAS
paradigmas. São Paulo: Prentice Hall, 2007.
KSHEMKALYANI, A. D.; SINGHAL, M. Distributed computing:
principles, algorithms and systems. Cambridge: Cambridge
University Press, 2011.
BARBOSA, V. C. An introduction to distributed algorithms.
Cambridge: MIT Press, 1996.
COULOURIS, G.; DOLLIMORE, J.; KINDBERG, T. Sistemas
distribuídos: conceitos e projetos. Porto Alegre: Bookman, 2017.

Unidade 1

SISTEMAS DISTRIBUÍDOS 67

Você também pode gostar