# data[].attributes.body
Os sistemas distribuídos têm ampla adoção e uso na maioria das experiências de software modernas. Aplicativos de mídia social, serviços de streaming de vídeo, sites de comércio eletrônico e muito mais são alimentados por sistemas distribuídos. Os sistemas centralizados evoluem com facilidade para sistemas distribuídos para lidar com o escalonamento. O uso de microsserviços é um padrão popular e com ampla adoção para a construção de um sistema distribuído.

Embora os sistemas distribuídos sejam mais complexos de construir e manter, o Compass da Atlassian aborda essa complexidade. A plataforma do Compass oferece uma experiência de desenvolvedor que ajuda na navegação da arquitetura distribuída, reunindo informações desconectadas sobre a produção de engenharia e as equipes que colaboram nelas em um local central com recurso de pesquisa.

# data[].attributes.body
Existem vários tipos de sistemas distribuídos. Os mais comuns são os seguintes:

Cliente-servidor

Uma arquitetura cliente-servidor é dividida em duas responsabilidades principais. O cliente é responsável pela apresentação da interface do usuário, que então se conecta pela rede ao servidor. O servidor é responsável por lidar com a lógica empresarial e o gerenciamento do estado. Uma arquitetura cliente-servidor pode ser degradada com facilidade para uma arquitetura centralizada se o servidor não for redundante. Uma configuração cliente-servidor de fato distribuída vai ter vários pontos centrais de servidor para distribuir as conexões do cliente. A maioria das arquiteturas cliente-servidor modernas são clientes que se conectam a um sistema distribuído encapsulado no servidor.

Vários níveis

Uma arquitetura de vários níveis expande a arquitetura cliente-servidor. O servidor em uma arquitetura de vários níveis é decomposto em pontos centrais granulares adicionais, que dissociam responsabilidades adicionais do servidor de back-end, como processamento e gerenciamento de dados. Esses pontos centrais adicionais são usados para processar trabalhos de longa duração sem sincronia e liberar os pontos centrais de back-end restantes para se concentrarem na resposta às solicitações do cliente e na interface com o armazenamento de dados.

Par-a-par

Em um sistema distribuído par-a-par, cada ponto central contém a instância completa de um aplicativo. Não há separação de pontos centrais da apresentação e do processamento de dados. Um ponto central contém a camada de apresentação e as camadas de manipulação de dados. Os pontos centrais de mesmo nível podem conter todos os dados de estado de todo o sistema.

Os sistemas par-a-par têm o benefício de extrema redundância. Quando um ponto central par-a-par é inicializado e colocado on-line, ele descobre e se conecta a outros pares e sincroniza seu estado local com o estado do sistema maior. Com esse recurso, a falha de um ponto central em um sistema par-a-par não vai interromper nenhum dos outros pontos centrais, e o sistema par-a-par vai persistir.

Arquitetura orientada ao Serviço

A arquitetura orientada ao Serviço (SOA) é uma antecessora dos microsserviços. A principal diferença entre a SOA e os microsserviços é o escopo do ponto central — o escopo dos pontos centrais de microsserviço existe no nível do recurso. Em microsserviços, um ponto central encapsula a lógica empresarial para lidar com um conjunto específico de recursos, como o processamento de pagamentos. Os microsserviços contêm vários pontos centrais de lógica empresarial diferentes que interagem com pontos centrais de banco de dados independentes. Em comparação, os pontos centrais da SOA encapsulam um aplicativo inteiro ou uma divisão corporativa. O limite de serviço para pontos centrais da SOA, em geral, inclui um sistema de banco de dados inteiro dentro do ponto central.

Os microsserviços surgiram como uma alternativa mais popular a SOA devido aos seus benefícios. Os microsserviços são mais compostos, permitindo que as equipes reutilizem a funcionalidade oferecida pelos pequenos pontos centrais de serviço. Os microsserviços são mais robustos e permitem um escalonamento vertical e horizontal mais dinâmico.

Casos de uso dos sistemas distribuídos

Muitos aplicativos modernos utilizam sistemas distribuídos. Aplicativos móveis e da web de alto tráfego são sistemas distribuídos. Os usuários se conectam de maneira cliente-servidor, em que o cliente é um navegador da Web ou um aplicativo móvel. O servidor é, então, seu próprio sistema distribuído. Os servidores da web modernos seguem um padrão de sistema de vários níveis. Um balanceador de carga é usado para delegar solicitações a muitos pontos centrais lógicos do servidor que se comunicam por sistemas de fila de mensagens.

O Kubernetes é uma ferramenta popular para sistemas distribuídos, pois pode criar um sistema distribuído usando uma coleção de contêineres. Os contêineres criam pontos centrais do sistema distribuído, e então o Kubernetes orquestra a comunicação de rede entre os pontos centrais e lida com o escalonamento horizontal e vertical dinâmico dos pontos centrais no sistema.

Outro bom exemplo de sistemas distribuídos são criptomoedas como Bitcoin e Ethereum, que são sistemas distribuídos par-a-par. Cada ponto central em uma rede de criptomoedas é uma replicação independente do histórico completo do livro-razão da moeda. Quando um ponto central de moeda é colocado on-line, ele inicializa conectando-se a outros pontos centrais e baixando sua cópia completa do livro-razão. Além disso, as criptomoedas têm clientes ou “carteiras” que se conectam aos pontos centrais do livro-razão por meio do protocolo JSON RPC.

# data[].attributes.headline
Benefícios, desvantagens e riscos dos sistemas distribuídos

# data[].attributes.subject
Benefícios, desvantagens e riscos dos sistemas distribuídos

# data[].attributes.body
Os sistemas distribuídos costumam ajudar a melhorar a confiabilidade e o desempenho do sistema. A confiabilidade é aprimorada removendo pontos centrais de falha e gargalos. Os pontos centrais de um sistema distribuído oferecem redundância para que, se algum ponto central falhar, haja outros pontos centrais prontos para cobrir e substituir a falha. O desempenho é aprimorado porque os pontos centrais podem ser escalados com facilidade no sentido horizontal e vertical. Se um sistema sofrer uma carga extensa, os pontos centrais extras podem ser adicionados para ajudar a absorver a carga. A capacidade de um ponto central individual também pode ser aumentada para lidar com cargas extensas.

No entanto, a compensação para esses benefícios pode ser a “dispersão do desenvolvimento”, em que um sistema se torna muito complexo e a manutenção, desafiadora. À medida que um sistema cresce em complexidade, as equipes podem ter dificuldades para organizar, gerenciar e melhorar esses sistemas com eficiência. Parte do problema pode ser entender como os diferentes componentes se relacionam entre si ou quem tem um componente de software específico. Assim fica difícil entender como fazer alterações nos componentes para maximizar a integridade operacional e evitar o impacto negativo não apenas aos componentes dependentes, mas aos clientes. Quando um sistema tem vários repositórios, ferramentas especializadas como o Compass da Atlassian podem ser necessárias para gerenciar e organizar o código de um sistema distribuído.

# data[].attributes.body
O rastreamento distribuído é um método usado para criar o perfil ou monitorar o resultado de uma solicitação executada em um sistema distribuído. Monitorar um sistema distribuído pode ser desafiador porque cada ponto central individual tem seu próprio fluxo de logs e de métricas. Para obter uma visão precisa de um sistema distribuído, essas métricas de pontos centrais diferentes precisam ser agregadas em uma visão abrangente.

As solicitações para sistemas distribuídos, em geral, não acessam todo o conjunto de pontos centrais dentro do sistema, mas acessam um conjunto parcial ou um caminho através dos pontos centrais. O rastreamento distribuído ilumina os caminhos acessados com frequência por meio de um sistema distribuído e permite que as equipes analisem e monitorem esses caminhos. O rastreamento distribuído é instalado em cada ponto central do sistema e, em seguida, permite que as equipes consultem o sistema para obter informações sobre a integridade do ponto central e o desempenho da solicitação.

# data[].attributes.headline
Os sistemas distribuídos são iguais aos microsserviços?

# data[].attributes.subject
Os sistemas distribuídos são iguais aos microsserviços?

# data[].attributes.body
Uma arquitetura de microsserviços é um tipo de sistema distribuído, pois decompõe um aplicativo em componentes ou “serviços” diferentes. Por exemplo, uma arquitetura de microsserviços pode ter serviços que correspondem a recursos de negócios (pagamentos, usuários, produtos etc.) em que cada componente correspondente lida com a lógica empresarial para essa responsabilidade. O sistema vai ter várias cópias redundantes dos serviços para que não haja um ponto central de falha para um serviço.

# data[].attributes.headline
Qual é a diferença entre um sistema centralizado e um distribuído?

# data[].attributes.subject
Qual é a diferença entre um sistema centralizado e um distribuído?

# data[].attributes.body
Um sistema de computação centralizado é onde toda a computação é executada por um único computador em um único local. A principal diferença entre sistemas centralizados e distribuídos é o padrão de comunicação entre os pontos centrais do sistema. O estado de um sistema centralizado está contido em um ponto central que os clientes acessam de maneira personalizada. Todos os pontos centrais de um sistema centralizado acessam o ponto central, o que pode levar ao congestionamento e lentidão da rede. Um sistema centralizado tem um único ponto de falha, enquanto um sistema distribuído não tem um único ponto de falha.

# data[].attributes.body
Um sistema distribuído é uma coleção de programas de computador que utilizam recursos computacionais em vários pontos centrais de computação diferentes para atingir um objetivo comum e compartilhado. Também conhecido como computação distribuída ou bancos de dados distribuídos, ele depende de pontos centrais diferentes para se comunicar e sincronizar em uma rede comum. Esses pontos centrais costumam representar dispositivos de hardware físicos diferentes, mas também podem representar processos de software diferentes ou outros sistemas encapsulados recursivos. Os sistemas distribuídos visam remover gargalos ou pontos centrais de falha de um sistema.

Os sistemas de computação distribuída têm as seguintes características:

Compartilhamento de recursos — um sistema distribuído pode compartilhar hardware, software ou dados

Processamento simultâneo — várias máquinas podem processar a mesma função ao mesmo tempo

Escalonamento — a capacidade de computação e processamento pode evoluir conforme necessário quando estendida para máquinas adicionais

Detecção de erros — as falhas podem ser detectadas com mais facilidade

Transparência — um ponto central pode acessar os e se comunicar com outros pontos centrais no sistema