Um aplicativo distribuído é um programa executado em um ou mais computadores simultaneamente e que se comunica por meio de uma rede. Nesta postagem do blog, vamos nos aprofundar em como os aplicativos distribuídos funcionam, como eles diferem dos aplicativos autônomos ou tradicionais, como você pode usá-los, suas vantagens e desvantagens e algumas das ferramentas e tecnologias que você pode usar para criá-los.
Como funcionam os aplicativos distribuídos?
Os aplicativos de computação distribuída interagem para atingir uma meta ou tarefa específica. Você pode armazená-los em servidores ou plataformas de infraestrutura em nuvem. Os aplicativos distribuídos podem ser relativamente simples, envolvendo um único computador cliente e servidor, ou mais complexos, envolvendo vários computadores clientes e servidores - isso depende principalmente de como você planeja usá-los.

Aplicativos distribuídos conectados em uma rede
Também é importante observar que alguns aplicativos distribuídos são dois programas de software separados que consistem em aplicativos de front-end (cliente) e back-end (servidor). O front-end da operação é executado no computador cliente e requer um poder de processamento mínimo, enquanto o back-end requer muito mais poder de processamento, um sistema mais dedicado e é executado em um computador servidor.
Em outros aplicativos distribuídos, a funcionalidade se separa em partes menores e independentes. Esses aplicativos compreendem microsserviços que lidam com diferentes preocupações dentro do aplicativo mais amplo. Em um ambiente nativo da nuvemNo entanto, os componentes individuais normalmente são executados como contêineres em um cluster. Entraremos em mais detalhes sobre como um aplicativo distribuído é criado mais adiante neste blog.
Aplicativos autônomos vs. distribuídos
Os aplicativos autônomos dependem de um único sistema para serem executados. Por isso, todo o processamento, o armazenamento de dados e a recuperação são feitos em uma única máquina ou servidor. Se o aplicativo for um modelo cliente-servidor, o software será executado no cliente ou no servidor que o cliente acessou. Esses aplicativos são muito mais simples de manter e desenvolver e não requerem infraestrutura para comunicação e coordenação entre sistemas diferentes. Como os aplicativos não dependem de uma rede para se comunicar, eles não são propensos a falhas de comunicação devido a falhas na rede.
No entanto, isso também significa que esses sistemas têm recursos limitados e não são escalonáveis. Um aplicativo executado em um único sistema é um ponto único de falha - se o sistema falhar, o aplicativo não estará mais disponível. Eles também podem afetar negativamente a velocidade do desenvolvedor à medida que crescem, pois mais desenvolvedores precisam trabalhar em uma base de código compartilhada que não tem necessariamente limites bem definidos.
Por outro lado, os aplicativos distribuídos são máquinas interconectadas capazes de processar, armazenar e recuperar dados por meio de vários sistemas. Eles podem ser executados simultaneamente no servidor e no cliente. A vantagem de usar aplicativos distribuídos é que eles oferecem confiabilidade: se um sistema que executa um aplicativo ficar inativo, outro poderá retomar a tarefa. O sistema geral pode tolerar mais falhas nos aplicativos. Eles também podem usar dimensionamento horizontalo que é impossível com aplicativos autônomos. No entanto, essas vantagens têm o custo de maior complexidade e sobrecarga operacional.
Como posso usar aplicativos distribuídos?
Considere os aplicativos que são executados em hospitais, bancos ou outras organizações orientadas a serviços. Como o mesmo software é executado em vários computadores, ele permite que as pessoas trabalhem no mesmo registro a partir do mesmo local ou de locais diferentes, editando aspectos diferentes do registro, como registro de dados, atualização de endereços e recuperação de informações de transações.
Os casos de uso comuns para aplicativos distribuídos incluem:
-
- Navegadores da Web (Tor)
- Sites de comércio eletrônico (Amazon, eBay)
- Aplicativos de blockchain (Bitcoin, Ethereum)
- Plataformas de computação em nuvem (AWS, Microsoft Azure)
- Bancos de dados distribuídos (Couchbase, Apache Cassandra)
- Redes de compartilhamento de arquivos ponto a ponto (BitTorrent)
Qualquer aplicativo que armazene dados de um local e os recupere de outro pode ser considerado um aplicativo distribuído. Para entender qual arquitetura é apropriada para um caso de uso específico, devemos analisar os diferentes tipos de aplicativos distribuídos que um desenvolvedor pode criar.
Exemplos de aplicativos distribuídos
Os aplicativos distribuídos aproveitam o princípio dos sistemas distribuídos. As arquiteturas de aplicativos mais comumente usadas podem ser amplamente organizadas nas seguintes categorias com base em suas arquiteturas de rede subjacentes:
Arquitetura cliente-servidor: Esse é o sistema distribuído mais básico no qual o servidor e o cliente se comunicam. As comunicações incluem passagem de mensagens, coleta de dados e cálculos.
-
-
- Arquitetura de três camadas: Essa é uma arquitetura cliente-servidor organizada em três camadas: as camadas de apresentação, de aplicativos e de dados. Ela usa camadas separadas para cada função do programa. A camada de apresentação exibe a interface voltada para o usuário, a camada de aplicativo é responsável por acessar e processar os dados do banco de dados e a camada de dados é onde todos os dados e informações são hospedados e armazenados.
- Arquitetura de N camadas: É diferente da arquitetura de três camadas porque cada função é executada em uma máquina ou cluster separado.
-
Arquitetura ponto a ponto: Nesse sistema, cada computador atua como um nó de comunicação. Trabalhar como um nó para comunicação significa que cada computador é um servidor e um cliente. Ele não tem um servidor centralizado como na arquitetura anterior. Cada sistema gerencia a si mesmo em uma rede ponto a ponto, o que facilita a configuração e o manuseio.
Arquitetura de microsserviços: Essa arquitetura estrutura um aplicativo como uma coleção de serviços pequenos, pouco acoplados e implementáveis de forma independente. Um aplicativo pode ser decomposto em serviços altamente coesos, cada um representando um recurso ou uma funcionalidade comercial específica.
Arquitetura orientada a serviços: Nessa abordagem, os aplicativos são criados como uma coleção de serviços que se comunicam entre si por meio de protocolos padronizados, promovendo o acoplamento frouxo e a reutilização dos serviços.
Vantagens dos aplicativos distribuídos
As vantagens de usar aplicativos distribuídos são:
-
- Eles têm a capacidade de escalonar horizontalmente. Eles aproveitam os recursos de dimensionamento dos sistemas distribuídos e podem se expandir adicionando novos servidores e sistemas que aumentam a capacidade e as operações de uma rede. O dimensionamento horizontal permite que eles implementem facilmente aplicativos em novos sistemas sem afetar a rede original.
- Eles são tolerantes a falhas ou defeitos de software, o que os torna muito resilientes. Como os aplicativos são executados em vários sistemas, eles podem trabalhar de forma independente. A falha de um aplicativo ou a pane de uma máquina não afeta os outros aplicativos da rede.
- Devido à natureza distribuída do aplicativo, o tempo de resposta é muito mais rápido, o que lhe confere a vantagem da baixa latência.
- A autonomia é outra vantagem dos aplicativos distribuídos. Como o sistema compartilha dados, cada usuário ou site mantém o controle sobre os dados e recursos armazenados localmente. Isso também reduz o risco de uma falha em todo o sistema ou de manipulação de dados.
- Os aplicativos distribuídos também podem ser econômicos a longo prazo, pois vários computadores trabalham juntos compartilhando recursos em uma rede.
Desvantagens dos aplicativos distribuídos
As desvantagens dos aplicativos distribuídos são:
-
- Um aplicativo distribuído aumenta a complexidade do projeto. Há uma grande sobrecarga operacional na manutenção, implementação e solução de problemas.
- O uso de vários servidores, sistemas e bancos de dados aumenta o risco de violações de segurança, problemas de dados e vazamento de informações. No entanto, você pode combater isso tomando medidas de segurança e executando programas de proteção em sistemas e servidores em todos os locais.
- Como os aplicativos distribuídos se conectam em uma única rede, qualquer problema ou falha pode levar a uma falha de comunicação entre os aplicativos.
Ferramentas e tecnologias para a criação de aplicativos distribuídos
A criação de aplicativos distribuídos exige bastante habilidade e conhecimento de arquiteturas de sistemas distribuídos, estruturas, arquitetura de middleware e bancos de dados. As ferramentas que você escolhe dependem dos requisitos do aplicativo, linguagens de programaçãoe a funcionalidade e as características desejadas. A maioria das pessoas recorre a ferramentas como Docker e Kubernetes para implantar e gerenciar aplicativos distribuídos. Elas oferecem abordagens de conteinerização e recursos de orquestração para dimensionamento, balanceamento de carga e gerenciamento de implementações distribuídas. Plataformas de nuvem como AWS e Microsoft Azure também têm recursos de IaaS e SaaS, o que possibilita usá-las para criar aplicativos distribuídos escalonáveis,
Conclusão
Neste blog, abordamos os conceitos básicos de aplicativos distribuídos, como eles diferem dos aplicativos autônomos tradicionais, como e onde usá-los e as vantagens e desvantagens da implementação desses aplicativos. Se estiver interessado em criar seus próprios aplicativos distribuídos, confira os seguintes recursos:
Se você quiser saber mais sobre como os bancos de dados distribuídos funcionam ou como o Couchbase permite aplicativos de alto desempenho com cache distribuído, leia os recursos a seguir: