software-à-sua-medida-azul

O que é uma aplicação distribuída?

Uma aplicação distribuída é aquela que é projetada para funcionar em vários dispositivos ou computadores. As aplicações distribuídas distribuem as tarefas e os recursos por vários nós na rede. Isto permite que a aplicação seja facilmente escalável, mais resistente e capaz de lidar com cargas de trabalho mais exigentes.

Normalmente, as aplicações distribuídas são constituídas por módulos ou componentes que podem ser executados em diferentes computadores, muitas vezes em locais geograficamente distintos. Estes módulos trabalham em conjunto de forma colaborativa para executar tarefas complexas.

Para uma melhor compreensão, podemos considerar o exemplo da World Wide Web. Aqui, os navegadores interagem com servidores para aceder a diferentes páginas. Neste cenário, os servidores partilham recursos, como páginas, imagens ou vídeos.

Sistemas distribuídos devem ser utilizados principalmente em situações de elevada complexidade, ou seja, em sistemas que são difíceis de evoluir e manter numa arquitetura monolítica.

Vantagens e desvantagens das aplicações distribuídas

Quando surge uma necessidade genuína que justifique a adoção de sistemas distribuídos, surgem várias vantagens associadas a esta escolha.

Escalabilidade

A escalabilidade refere-se à capacidade de uma aplicação se expandir para lidar com um aumento na carga de trabalho, seja através da adição de mais recursos de hardware ou da distribuição de tarefas entre múltiplos nós na rede.

Maior tolerância a falhas

A maior resiliência a falhas é uma vantagem de destaque nas aplicações distribuídas. Estas aplicações possuem uma capacidade intrínseca de enfrentar falhas de hardware ou software de forma mais robusta quando comparadas com sistemas monolíticos.

Código mais testável

A facilidade de testar o código representa uma vantagem crucial nas aplicações distribuídas. Esta qualidade está ligada à capacidade de avaliar o código de forma eficiente, assegurando que este funciona adequadamente e cumpre os requisitos estabelecidos.

Embora as aplicações distribuídas ofereçam vantagens significativas, também apresentam desafios que devem ser cuidadosamente tidos em conta.

Complexidade

A implementação de sistemas distribuídos pode ser mais complexa e dispendiosa. A complexidade é uma desvantagem nas aplicações distribuídas devido à necessidade de coordenar componentes geograficamente dispersos, utilizar comunicação assíncrona, gerir estados, garantir segurança e lidar com custos de desenvolvimento superiores, juntamente com desafios em termos de testes e manutenção.

Segurança

A segurança pode ser uma das tarefas mais complexas de garantir, uma vez que envolve a proteção de múltiplos pontos de acesso. Ela representa uma desvantagem nas aplicações distribuídas devido à complexidade em proteger a comunicação e os dados que transitam entre diversos nós, bem como em garantir a autenticação e a autorização apropriadas. A dispersão geográfica dos componentes também amplia o risco de exposição a ameaças externas, o que requer a implementação de medidas de segurança bastante complexas em cada ponto da rede. Adicionalmente, manter a segurança de forma contínua num ambiente em constante evolução exige uma monitorização constante e atualizações de segurança, tornando a gestão de ameaças um desafio complexo.

Dependência de rede

A dependência da rede representa uma desvantagem nas aplicações distribuídas, uma vez que as mesmas, necessitam de uma conectividade de rede constante e estável. Qualquer interrupção na rede pode resultar na degradação do desempenho ou até mesmo na indisponibilidade dos serviços distribuídos. Além disso, a dispersão geográfica dos nós em diferentes locais pode introduzir atrasos na comunicação e afetar a capacidade de resposta da aplicação. Para minimizar esses riscos, torna-se necessário implementar estratégias de tolerância a falhas de rede, acrescentando assim complexidade ao design e manutenção das aplicações distribuídas. A disponibilidade da rede é, de facto, crucial para o funcionamento adequado das aplicações distribuídas, pois qualquer falha na rede pode resultar na interrupção dos serviços.