Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
April 27, 2022 12:05 am GMT

Sistemas distribudos so estranhos

Nota: Nenhuma das idias aqui nova. Essa a minha sntese sobre sistemas distribudos baseada nas fontes disponveis nas referncias.

O que so sistemas distribudos

Se eu tivesse que definir sistemas distribudos eu diria que:

Sistemas distribudos so sistemas cujas suas partes esto distribudas entre vrias maquinas. Essas mquinas se comunicam umas com as outras pela rede.

Atualmente, praticamente todo sistema moderno uma espcie de sistema distribudo, seja eles mais simples ou mais complexo. Afinal de contas, no melhor dos casos ns teremos uma mquina cliente e outra mquina servidor. As excees que so aplicaes desktop ou mobile se elas rodam totalmente offline.

Por que precisamos de sistemas distribudos?

Agora que sabemos o que um sistema distribudo, por que precisamos deles? No geral, ns criamos sistemas distribudos para resolver problemas que uma mquina s no capaz de resolver. Em sua maioria esses problemas so:

  • Escalabilidade: 1 mquina no consegue atender seus requisitos de requisies.
  • Disponibilidade: Caso 1 mquina morra, voc tem outra mquina para continuar atendendo suas requisies.
  • Latncia: Distncia importa. O limite fsico para transferncia de dados a velocidade da luz. Logo, se voc possui mquinas mais prximos dos seus usurios o tempo de resposta das requisies vai ser menor.

Por que sistemas distribudos so estranhos?

Um servio local

Vamos imaginar o seguinte cenrio. Voc decidiu criar um sistema simples que roda na sua prpria mquina e salva reviews de jogos que voc gostou. Se voc fosse escrever o cdigo que salva novas reviews, poderia ser algo do tipo:

package com.hugomarques;public class ReviewController {    private final ReviewRepository repository;    ReviewController(ReviewRepository repository) {        this.repository = repository;    }    @PostMapping("/reviews")    Review newEmployee(Review newReview) {        return repository.save(newReview);    }}

Agora pense que j que o sistema vai ficar na sua prpria mquina e algo bem pequeno, o repository salva os dados localmente, escrevendo eles no disco.

Diferenas entre local vs distribudo

Passado o tempo, te pediram para escrever um sistema parecido no seu trampo. A diferena crucial que agora em vez de salvar em disco, voc vai salvar os dados chamando outro servio ou um banco de dados. Vamos pensar juntos:

  1. Quais os problemas que isso pode causar?
  2. Quais as preocupaes que voc no tinha antes que agora voc tem que ter?

O primeiro problema que voc tem que entender que antes, o seu cdigo de salvar executava uma funo local. 99.99999% das vezes isso vai executar tranquilo, no mximo voc vai ter que lidar com uma exception porque o arquivo no existe ou o disco est cheio.

Agora, a sua chamada vai trafegar pela rede, ou seja, antes de salvar o arquivo os seus dados precisam ser enviados pela rede at a outra mquina, a outra mquina precisa salvar os dados e enviar a confirmao que tudo foi feito com sucesso. Vamos entender esse passo a passo?

Image description

  1. ReviewService envia a requisio pela rede.
  2. A rede "entrega" a mensagem pro banco de dados.
  3. O banco de dados valida que a requisio est correta.
  4. O banco de dados atualiza o seu estado interno.
  5. O banco de dados envia uma resposta pela rede.
  6. A rede entrega a resposta ao nosso ReviewService .
  7. O ReviewService valida se a resposta retornada est correta.
  8. Review service atualiza seus dados internos e envia a resposta para o usurio.

Perceba que em cada um dos passos acima, o processo pode falhar. As vezes, essa falha simples:

  • No passo 1, por exemplo, a rede foi desconectada e a requisio no pde ser enviada.

Outras vezes, a resposta pode ser ambgua. Por exemplo, se no passo 5, o banco de dados falhou em enviar a resposta pela rede. O nosso ReviewService agora no sabe:

  • Foi algum problema de rede?
  • O banco de dados foi atualizado?
  • Foi algum problem no tipo de dado enviado?

Esses problemas em lidar com as requisies navegando pela rede e como erros podem acontecer o que faz sistemas distribudos to complexos.

As 8 falcias dos sistemas distribudos

Alguns dos problemas que enfrentamos com sistemas distribudos so explicados pelas "8 falcias dos sistemas distribudos". Erros comuns que programadores fazem ao lidar com a rede e que acabam gerando bugs e comportamentos indesejados difceis de identificar e corrigir.

Image description
source: @deniseyu

Falcia #1: A rede confivel

A rede vai falhar. No uma questo de se mas de quando. Pacotes no vo chegar ao destino, cabos vo ser rompidos e roteadores so reiniciados o tempo todo. Lembra do erro no passo 5 acima? Um das possveis causas poderia ser essa falcia aqui.

Falcia #2: A latncia zero

A latncia no zero. Se lembre que a velocidade com que os dados transitam no mximo a velocidade da luz assumindo um cabo sem interferncia nenhuma. Ou seja, uma chamada local no seu datacenter que custaria 10ms agora pode custar 40ms se voc precisar chamar um datacenter mais distante. Para algumas aplicaes, esses 30ms extras tem impacto.

Falcia #3: A banda infinita

A banda no infinita. Existe um limite na quantidade de dados que so trafegados pela rede. Se limitarmos o tamanho dos pacotes que enviamos, isso pode significar mais viagens o que faz com que a latncia (falcia #2) aumente.

Falcia #4: A rede segura

Sempre assumimos que a rede est comprometida. A partir da trabalhamos com modelos como "Threat modeling" para identificar possveis ameaas e o que estamos ativamente fazendo para que as nossas aplicaes respondam a tais ameaas. Por exemplo, encriptao dos dados quando em trnsito.

Falcia #5: A topologia no muda

A topologia da rede muda o tempo inteiro. Nos tempos de hoje que usamos Cloud, servidores so removidos ou adicionados elasticamente medida que a escala necessita.

Falcia #6: Existe apenas 1 administrador

No passado, talvez at existisse uma pessoa responsvel por grandes pedaos da rede. Hoje em dia, a rede est cada vez mais fragmentada. Nem os prprios desenvolvedores mantm a rede de suas aplicaes, delegando essa atividade para plataformas de cloud como AWS, Azure ou Digital Ocean.

Falcia #7: O custo de transporte zero

Existe um custo relacionado a trafegar dados na rede. Custo de manuteno, de hardware e software.

Falcia #8: A rede homognea

Especialmente hoje em dia, a rede cada vez mais heterognea. Aparelhos mobile, aparelhos IoT como cmeras, termostatos ou mesmo laptops e desktops das mais variadas marcas e modelos podem se conectar a uma aplicao.

Concluso

Recapitulando o que aprendemos:

  1. Sistemas distribudos so sistemas cujas partes esto divididas e se comunicando pela rede.
  2. Sistemas distribudos nos ajudam a lidar com problemas de escalabilidade, disponibilidade e latncia.
  3. Sistemas distribudos so complexos porque ao depender da rede, vrios erros podem acontecer.
  4. As 8 falcias descrevem vrios dos desafios enfrentados por sistemas distribudos

Eu espero que esse seja o primeiro artigo de muitos que esto por vir onde vamos discutir mais sobre fundamentos de sistemas distribudos.

Se voc gostou, no deixe de acompanhar as minhas dicas no twitter @hugaomarques.

Referncias

  1. Challenges with distributed systems
  2. Why distributed systems are hard
  3. The eight fallacies of distributed computing
  4. Escrevendo Clients e Services Tolerantes a Falhas com Rafael Ponte

Original Link: https://dev.to/hugaomarques/sistemas-distribuidos-sao-estranhos-5bkp

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To