Fileiras de racks de servidores em um data center, com luzes indicadoras de LED coloridas brilhando em um ambiente escuro e de alta tecnologia

O que são sistemas distribuídos?

Explicação sobre sistemas distribuídos

Um sistema distribuído é um conjunto de computadores e dispositivos independentes que trabalham juntos em uma rede de modo que, do lado de fora, pareçam ser um único sistema unificado.

Os sistemas distribuídos dividem o trabalho e os dados entre várias máquinas que funcionam simultaneamente, de modo que uma tarefa que poderia levar semanas para ser concluída em uma única máquina grande pode ser finalizada em horas ou até mesmo minutos. Cada máquina (ou "nó") do sistema tem sua própria CPU, memória e, muitas vezes, seu próprio armazenamento. Os nós podem enviar mensagens uns aos outros para coordenar o compartilhamento de dados, dividir o trabalho e combinar seus esforços em prol de um objetivo comum.

Em um sistema distribuído, as máquinas podem estar no mesmo rack de servidor (de um data center), em diferentes data centers ou em ambientes de nuvem híbrida espalhados pelo mundo. Independentemente da configuração, os sistemas distribuídos são projetados para que os usuários e as aplicações clientes interajam com eles como se fossem um único serviço ("um banco de dados", "um site", "um serviço de armazenamento"), não um monte de servidores individuais.

Os sistemas distribuídos oferecem às empresas uma solução para um desafio urgente da computação moderna. Muitas das aplicações atuais são muito grandes, exigem muito processamento ou são críticas demais para serem executadas adequadamente em uma única máquina. Essas aplicações frequentemente lidam com grandes volumes de dados e solicitações que podem sobrecarregar um único servidor. Eles lidam com fluxos de tráfego irregulares que exigem recursos ágeis de balanceamento de carga. Elas gerenciam processos de missão crítica onde um downtime longo pode ser catastrófico (sistemas bancários, por exemplo).

Sistemas distribuídos espalham cargas de trabalho por vários nós e podem adicionar automaticamente mais nós à rede conforme necessário. Essa escalabilidade permite que o sistema acomode mais usuários e mais dados, mesmo quando os fluxos de tráfego são imprevisíveis. A escalabilidade dos sistemas distribuídos é a razão pela qual as plataformas de streaming, por exemplo, podem atender milhões de usuários em todo o mundo, muitas vezes simultaneamente.

Os sistemas distribuídos também podem ajudar a otimizar a confiabilidade e a tolerância a falhas de uma arquitetura de TI. Quando um nó falha, outros nós podem assumir seu trabalho para que o serviço geral continue funcionando. Essa funcionalidade reduz os pontos únicos de falha e ajuda as empresas a manter sistemas de alta disponibilidade, o que é crucial para sistemas que exigem quase 100% de tempo de atividade.

Além disso, em um sistema distribuído, nós separados cooperam estreitamente, mas têm seus próprios bancos de dados e sistemas de armazenamento. Essa configuração facilita para as equipes de TI a criação de arquiteturas modulares em que diferentes partes do sistema podem ser dimensionadas e evoluir de forma independente.

Quais são as principais características de um sistema distribuído?

Os sistemas distribuídos abrangem uma variedade de arquiteturas diferentes, mas todas compartilham um conjunto de características principais.

Compartilhamento de recursos

As máquinas em um sistema distribuído podem compartilhar dados, armazenamento, capacidade de processamento e serviços. O compartilhamento de recursos aumenta a eficiência de todo o sistema porque os recursos podem ser agrupados e usados onde são mais necessários.

Simultaneidade

A simultaneidade permite que várias partes de um sistema distribuído sejam executadas ao mesmo tempo, para que diferentes nós possam processar solicitações de dados simultaneamente. A sincronização de nós ajuda a aumentar o processamento de todo o sistema.

Escalabilidade

A escalabilidade permite que os sistemas distribuídos lidem com mais usuários e dados ao adicionar mais máquinas em vez de substituir todo o sistema. Por exemplo, os serviços de streaming podem adicionar mais servidores à medida que mais pessoas começam a assistir a um evento ao vivo ao mesmo tempo.

Disponibilidade e tolerância a falhas

Disponibilidade e tolerância a falhas são conceitos relacionados que se concentram em minimizar o downtime do sistema usando um processo chamado replicação (onde os sistemas armazenam cópias de dados e serviços em vários nós).

A disponibilidade ajuda a garantir que os usuários ainda possam acessar o sistema quando algumas partes estiverem indisponíveis. A tolerância a falhas permite que os sistemas distribuídos continuem operando usando réplicas caso um ou mais nós falhem.

Heterogeneidade

Heterogeneidade significa que um sistema distribuído pode incluir (e provavelmente inclui) diferentes tipos de hardware, sistemas operacionais, linguagens de programação e middleware. Os nós de rede não precisam ser idênticos, permitindo que as equipes possam adicionar novas máquinas sem comprometer a interoperabilidade e criar arquiteturas que selecionam automaticamente a melhor ferramenta para cada trabalho.

Unificação

A unificação permite que os sistemas distribuídos ocultem sua complexidade interna dos usuários. Um usuário não precisa saber qual servidor respondeu à sua solicitação ou onde os dados estão fisicamente armazenados. Eles devem ser capazes de interagir apenas com um sistema unificado.

Como funcionam os sistemas distribuídos?

Para entender como os sistemas distribuídos funcionam, considere o exemplo dos jogos online multijogador massivos (MMOGs).

Os MMOGs utilizam arquiteturas distribuídas, onde muitos servidores e nós trabalham juntos para manter um universo de jogo persistente, permitindo que milhares de jogadores voem, negociem, lutem e explorem ao mesmo tempo.

Como o mundo do jogo é enorme e o número de jogadores é muito alto, o back-end do jogo é dividido em um cluster de máquinas em vez de ser gerenciado por um único sistema. Um conjunto de servidores monitora as funcionalidades do universo do jogo (posições dos jogadores, danos, inventário), enquanto outras partes da infraestrutura lidam com o login do usuário, os recursos de chat e a persistência do universo. A divisão ajuda o jogo a permanecer responsivo mesmo quando muitos jogadores estão ativos na mesma região ao mesmo tempo.

Durante cada sessão de jogo, o sistema deve manter o estado do jogo sincronizado entre todos os jogadores. Quando um jogador age (move um navio durante uma batalha naval, por exemplo), o cliente envia a ação para o servidor apropriado para aquela parte do mundo do jogo. O servidor então atualiza o estado do jogo compartilhado em tempo real e compartilha o resultado com os outros jogadores que precisam vê-lo.

Além disso, o sistema de jogos distribuídos usa protocolos especializados para ajudar a garantir que todos os jogadores vejam os mesmos eventos do jogo acontecendo aproximadamente ao mesmo tempo.

Se um servidor falhar durante o jogo, os outros servidores são projetados para assumir a falha e continuar operando normalmente para que os jogadores não sofram interrupções.

Sistemas centralizados versus sistemas distribuídos

Os sistemas distribuídos são o oposto funcional dos sistemas centralizados. Enquanto os sistemas distribuídos usam um conjunto de dispositivos para alimentar as operações, os sistemas centralizados dependem de um servidor principal.

Em um sistema centralizado, um nó central coordena a maioria ou todas as operações. Os clientes geralmente enviam solicitações para esse nó, e o nó decide como processá-las. Essa dinâmica torna o sistema mais fácil de entender, porque a autoridade fica em um só lugar.

No entanto, um único nó significa um único ponto de falha. Em um sistema centralizado, se o servidor central ficar inativo, todo o sistema fica indisponível, portanto a centralização pode apresentar problemas significativos em situações em que a alta disponibilidade é importante.

Os sistemas centralizados geralmente escalam verticalmente. Se uma equipe de TI quiser melhorar o servidor principal, ela o fará dando a ele mais processadores, memória ou armazenamento. Infelizmente, o crescimento vertical não é uma prática sustentável no longo prazo. Com o tempo, exige muito hardware e se torna muito caro.

Dessa forma, os sistemas centralizados são mais adequados para situações em que a simplicidade arquitetônica e a supervisão centralizada são mais importantes do que a altíssima resiliência. A centralização é comumente usada para redes de computadores menores, sistemas de negócios internos, servidores de arquivos e aplicações cliente-servidor, onde uma autoridade precisa de controle rigoroso.

Em um sistema distribuído, nenhuma máquina tem controle total. Vários nós cooperam, e cada nó pode lidar com parte da carga de trabalho ou armazenar parte dos dados. A estrutura é inerentemente mais flexível, mas requer coordenação entre os nós.

Os sistemas distribuídos são mais tolerantes a falhas porque outros nós podem continuar funcionando se um nó falhar. Um sistema distribuído ainda pode falhar, mas tende a se degradar de forma mais gradual do que um sistema centralizado.

Os sistemas distribuídos dependem da escalabilidade horizontal, onde o sistema adiciona mais máquinas para acomodar o aumento da demanda por recursos.

Consequentemente, ambientes distribuídos são frequentemente preferidos em situações onde muitos usuários, grandes conjuntos de dados ou dispersão geográfica tornam uma única máquina central impraticável. Sistemas distribuídos são comuns para serviços da web, plataformas de nuvem, redes blockchain e serviços de grande escala que exigem uma alta disponibilidade e escalabilidade.

IBM DevOps

O que é DevOps?

Andrea Crawford explica o que é DevOps, seu valor e como suas práticas e ferramentas ajudam você a migrar suas aplicações por todo o pipeline de entrega de software, desde a concepção até a produção. Conduzido pelos principais líderes da IBM, o conteúdo foi concebido para ajudar os líderes empresariais a adquirir o conhecimento necessário para priorizar os investimentos em IA que podem estimular o crescimento.

Tipos de sistemas distribuídos

Os sistemas distribuídos podem ser agrupados em alguns tipos comuns, com base em como as máquinas são organizadas e como se comunicam.

Sistemas cliente-servidor

Em um sistema cliente-servidor, um servidor central (ou um pequeno grupo de servidores) fornece serviços, enquanto outras máquinas (os "clientes") dependem do trabalho do servidor central.

O servidor central, geralmente a máquina mais potente em termos de hardware, é responsável pelo gerenciamento dos recursos compartilhados (arquivos, bancos de dados, impressoras, contas de usuário). Os clientes normalmente são máquinas de usuários finais (notebooks, telefones celulares, navegadores) que se concentram na interação com o usuário e no processamento de solicitações e respostas.

Como os clientes e o servidor central são executados em máquinas separadas e se comunicam por meio de uma rede, os sistemas cliente-servidor são considerados sistemas distribuídos. No entanto, a comunicação entre os nós em uma arquitetura cliente-servidor é centralizada.

Cada cliente depende do servidor central para acessar recursos compartilhados, e os clientes não conversam diretamente entre si sobre esses recursos. Em vez disso, a comunicação entre clientes e o servidor geralmente segue um padrão de solicitação-resposta.

Quando o usuário executa uma ação (como clicar em um botão), o cliente converte a ação em uma mensagem de solicitação e a envia pela rede para o servidor. O servidor recebe a solicitação, a processa e envia uma resposta. Em seguida, o cliente interpreta a resposta e mostra o resultado ao usuário de uma forma legível por humanos.

Por exemplo, uma aplicação da web pode utilizar um navegador (cliente) que envia solicitações HTTP para um servidor da web, que lê ou grava em um banco de dados e, em seguida, envia uma resposta em HTML ou JSON.

A comunicação centralizada facilita a atualização de sistemas cliente-servidor, a aplicação de políticas de segurança e o gerenciamento de dados. A desvantagem, no entanto, é que a centralização pode criar gargalos e pontos únicos de falha.

Sistemas ponto a ponto (P2P)

Em sistemas ponto a ponto, todos os nós, chamados de "pares", têm funções aproximadamente iguais. Cada par contribui com alguns de seus próprios recursos e consome os recursos oferecidos por outros pares. Cada par pode tanto solicitar recursos quanto fornecê-los a outros nós.

Portanto, "cliente" e "servidor" em um sistema P2P são apenas funções que um nó desempenha temporariamente, não identidades fixas.

Em um sistema P2P puro, os pares descobrem uns aos outros e se comunicam por meio de uma rede de sobreposição, uma rede lógica construída sobre conexões físicas com a internet. A rede de sobreposição decide quem fala com quem e como os dados são roteados entre os pares.

Quando um par precisa de algo (um fragmento de arquivo, por exemplo), ele envia solicitações diretamente para outros pares que possam tê-lo. E quando outro par receber a solicitação, ele pode responder e enviar de volta os dados solicitados, atuando efetivamente como um servidor naquele momento. Posteriormente, as funções podem ser trocadas, e os mesmos dois nós podem reverter quem está fornecendo dados e quem os está solicitando.

Como todos os pares podem dar e receber, as cargas de trabalho de processamento de dados tendem a estar distribuídas de forma mais uniforme por toda a rede. E à medida que mais pares ingressam, trazem mais capacidade com eles, o que pode ajudar o sistema a escalar mais facilmente.

As redes clássicas de compartilhamento de arquivos são um bom exemplo de sistemas P2P. O computador de cada usuário armazena partes de arquivos e as carrega para outros nós, enquanto também baixa quaisquer partes que faltem.

Os sistemas P2P são mais robustos contra pontos únicos de falha do que os sistemas cliente-servidor. Se um par ficar offline, todo o sistema normalmente continua funcionando porque outros pares mantêm cópias dos dados ou podem encaminhar os dados ao redor do nó com falha.

Sistemas multicamadas

Os sistemas multicamadas expandem o modelo cliente-servidor básico e o organizam em múltiplas camadas claramente separadas, cada uma com sua própria função. As formas mais comuns são de duas camadas, três camadas e n camadas.

Um sistema de duas camadas é uma arquitetura cliente-servidor com outro nome. O cliente contém a maior parte da lógica da aplicação e se comunica diretamente com o banco de dados do servidor para executar consultas e atualizações. O processo é simples, mas acopla a interface do usuário aos dados de forma precisa. Qualquer alteração na estrutura de dados pode forçar mudanças em muitos outros clientes.

Arquiteturas de três camadas usam três camadas. A camada de apresentação lida com a interface do usuário (páginas da web, IU móvel, IU de desktop). A camada de aplicação, ou “lógica de negócios”, implementa regras e fluxos de trabalho (validações, cálculos, decisões). A camada de dados armazena e recupera dados de bancos de dados distribuídos ou de outros sistemas de armazenamento.

Os sistemas de N camadas ampliam a ideia das três camadas ao adicionar mais camadas especializadas. Por exemplo, as equipes de TI podem optar por criar uma interface de programação de aplicativos (API) separada ou uma camada de serviço que exponha endpoints REST ou GraphQL. Elas também podem separar uma camada de autenticação e criptografia para lidar com logins e tokens de usuários.

Os níveis extras seguem o mesmo princípio dos três primeiros. Cada camada tem uma responsabilidade principal, e as camadas se comunicam por meio de interfaces bem definidas. Essa modularidade permite que as equipes trabalhem, atualizem ou substituam diferentes níveis de forma independente, talvez até usando tecnologias diferentes para cada um.

Sistemas multicamadas são comumente usados para executar sites de comércio eletrônico e aplicações bancárias.

Sistemas de cluster

Um cluster é um grupo de computadores localizados próximos que funcionam como se fossem uma única máquina mais poderosa. Os nós em um cluster estão fortemente acoplados; portanto, normalmente estão:

  • No mesmo local físico (a mesma sala ou data center).
  • Conectados a links de alta velocidade, como redes locais de alta largura de banda (LANs) ou interconexões especializadas.

  • Usando hardware e sistemas operacionais semelhantes ou idênticos.

Como os nós são semelhantes e bem conectados, o cluster pode dividir uma tarefa grande em partes menores para processamento paralelo em diferentes nós e, em seguida, combinar os resultados.

Os clusters são gerenciados por um software especial, como um middleware de cluster, um agendador ou um resource manager. O software decide quais nós executam quais trabalhos, monitora a integridade dos nós, gerencia o roteamento de dados e equilibra as cargas de trabalho entre os nós. Essa camada de gerenciamento é o que transforma "vários computadores em uma rede" em um cluster. Ela permite que os usuários enviem um trabalho para o cluster como um todo, em vez de fazer login em cada máquina manualmente.

Os sistemas de clusters são úteis para situações que exigem computação de alto desempenho, como análise de big data, treinamento de modelos de IA e simulações científicas.

Sistemas de computação em grade

A computação em grade consiste em reunir muitos computadores independentes, geralmente espalhados por diferentes cidades e países, e fazê-los cooperar em uma única grande tarefa computacional.

Cada máquina participante em uma grade pode pertencer a uma organização ou indivíduo diferente. Cada um deles pode ter CPUs, tamanhos de memória, sistemas operacionais e políticas locais diferentes. No entanto, concordam em compartilhar alguns de seus recursos extras para problemas comuns.

Como uma grade abrange vários domínios administrativos, nenhuma organização possui ou controla totalmente todas as máquinas. Essa é uma diferença central entre redes e clusters, onde uma instituição possui e gerencia servidores que residem em um único data center.

Em um sistema de grade, cada nó permanece autônomo. Ele pode entrar ou sair da rede, tem seu próprio resource manager local e pode ter regras ou prioridades de segurança diferentes. O middleware de grade fornece uma camada comum para enviar trabalhos, descobrir recursos disponíveis, agendar trabalhos, mover dados e coletar resultados. Esse middleware permite que toda a rede funcione como um supercomputador virtual para os usuários finais.

Quando um usuário envia um trabalho grande (como uma simulação de dobra de proteínas ou cálculo de risco financeiro), o middleware divide automaticamente o trabalho em muitas tarefas menores. Em seguida, procura máquinas ociosas ou subutilizadas em qualquer lugar da rede para atribuir a elas partes do trabalho. Cada máquina trabalha em sua parte e, em seguida, envia de volta resultados que são combinados na resposta final.

É importante ressaltar que os nós da grade não são dedicados apenas à grade. Podem ser desktops ou servidores comuns que doam ciclos de CPU extra quando não estão ocupados com seu trabalho local principal.

Sistemas de computação em nuvem

Os sistemas distribuídos baseados em nuvem são construídos sobre grandes centros de dados operados por provedores de nuvem.

Em vez de possuir servidores físicos, as organizações alugam recursos de computação distribuídos pela internet. Esses recursos são expostos como máquinas virtuais (VMs) , contêineres , bancos de dados, filas e outros serviços gerenciados.

Os sistemas em nuvem são, acima de tudo, elásticos. As empresas podem solicitar mais capacidade de computação, armazenamento ou rede quando a carga de trabalho aumenta e liberar recursos quando a carga diminui. Também possibilitam que as empresas paguem apenas pelos recursos que utilizam, em vez de comprar o hardware antecipadamente.

Com os sistemas em nuvem, as equipes de TI podem implementar processos dinâmicos de escalabilidade horizontal. Grupos de auto-scaling (grupos lógicos de instâncias de servidores idênticas) observam métricas de cargas de trabalho para detectar flutuações. Quando uma carga ultrapassa os limites estabelecidos, as ferramentas de automação geram mais instâncias do serviço. Quando a carga cai, desliga automaticamente instâncias extras para economizar dinheiro.

Arquiteturas de microsserviços

As arquiteturas de microsserviços são sistemas distribuídos em nível de aplicação que utilizam múltiplos componentes independentes executados em máquinas diferentes para construir aplicações de software.

Ao contrário das aplicações monolíticas, nenhum microsserviço em uma arquitetura de microsserviços contém o aplicativo inteiro. Em vez disso, cada microsserviço é seu próprio pequeno serviço (com seu próprio código e, geralmente, seu próprio armazenamento de dados), que é responsável por um recurso específico e é executado de forma independente de outros contêineres.

Como são independentes, os microsserviços podem ser desenvolvidos, implementados e dimensionados por conta própria, mas as vantagens do sistema vêm da colaboração entre os microsserviços.

Quando os usuários enviam uma solicitação, o cliente cria uma mensagem e a envia para um dispositivo de edge (um balanceador de carga ou um gateway de API , por exemplo). O dispositivo de edge envia a solicitação para o microsserviço apropriado. O microsserviço destinatário lê a mensagem, executa sua própria lógica de negócios e, em seguida, envia uma resposta de volta ao dispositivo de edge, que retransmite a resposta ao usuário.

Casos de uso para sistemas distribuídos

Os sistemas distribuídos são difundidos no mundo real. Muitas das ferramentas e serviços que as pessoas usam para entretenimento, negócios e gerenciamento financeiro são construídos em sistemas distribuídos.

Redes celulares

Uma rede celular é composta por muitas estações base (torres de celular ou pequenas antenas) espalhadas por regiões, todas conectadas às redes centrais dos provedores e à internet. Conforme os usuários se movem com seus telefones móveis, o sinal do telefone se move de torre em torre sem que o usuário perceba.  

Redes de entrega de conteúdo (CDNs)

Uma CDN é uma rede geograficamente distribuída de servidores proxy e data centers que armazenam em cache conteúdo (imagens, vídeos, páginas) mais próximos dos usuários. O conteúdo é replicado em muitos nós. Quando o usuário visita um site, sua solicitação é encaminhada para um servidor de edge próximo (em vez de até o servidor de origem) para processamento. Esse arranjo ajuda a rede a entregar o conteúdo solicitado mais rapidamente.

Serviços de streaming

Grandes plataformas de streaming dependem fortemente de sistemas distribuídos. Elas usam servidores em cluster em vários data centers para armazenar conteúdo de vídeo. Elas também usam CDNs para fragmentar, replicar e armazenar em cache o conteúdo, de modo que os fluxos de conteúdo possam ser veiculados (sob demanda) para milhões de usuários em todo o mundo.

Sistemas de blockchain

Uma rede de blockchain (como uma criptomoeda) é uma rede peer-to-peer distribuída em que muitos nó mantêm cópias de um livro-razão e concordam com novas transações por meio de um algoritmo de consenso. Cada nó armazena a cadeia completa (ou parcial), valida novos blocos e os compartilha com outros nós, para que os dados e a computação sejam verdadeiramente distribuídos.

Benefícios dos sistemas distribuídos

  • Escalabilidade: os sistemas de computação distribuída se destacam na escalabilidade horizontal, o que permite que as empresas simplesmente adicionem mais nós à rede quando as cargas de trabalho aumentam, em vez de investir em upgrades dispendiosos de servidores individuais.
  • Confiabilidade e tolerância a falhas: ao eliminar pontos únicos de falha, os sistemas distribuídos fornecem redundância integrada que mantém as aplicações em funcionamento para os usuários, mesmo quando nós individuais falham.
  • Eficiência de recursos e redução de custos: as arquiteturas distribuídas permitem que as empresas criem ambientes de computação poderosos usando clusters de hardware padrão de baixo custo em vez de supercomputadores especializados e caros.
  • Distribuição global e acessibilidade: sistemas distribuídos podem implementar aplicações mais próximas dos usuários em todo o mundo, reduzindo a latência ao atender solicitações de nós geograficamente mais próximos.

Autor

Chrystal R. China

Staff Writer, Automation & ITOps

IBM Think

Soluções relacionadas
IBM instana observability

Aproveite o poder da IA e da automação para resolver problemas de forma proativa em todo o stack de aplicações.

Explore o IBM Instana Observability
Soluções de observabilidade da IBM

Maximize a resiliência operacional e garanta a integridade das aplicações nativas da nuvem com a observabilidade impulsionada por IA.

Explore as soluções de observabilidade da IBM
IBM Consulting AIOps

Eleve a automação e as operações de TI com a IA generativa, alinhando todos os aspectos da sua infraestrutura de TI com as prioridades do negócio.

Explore a consultoria de AIOps do IBM Consulting
Dê o próximo passo

Descubra como IBM Instana oferece monitoramento de desempenho de aplicações em tempo real e insights impulsionados por IA, disponíveis como SaaS ou hospedado localmente.

  1. Explore o IBM Instana Observability
  2. Veja em ação