DEV Community

Vitória Lopes
Vitória Lopes

Posted on

System design - princípios da escalabilidade de sistemas através da distribuição

A escalabilidade é um requisito fundamental para o sucesso de sistemas modernos, especialmente diante do crescente volume de dados e da demanda por desempenho. Para atender a essas necessidades, a distribuição das funcionalidades de um sistema é uma interessante estratégia.

Seu principal objetivo é aumentar o poder computacional e disponibilidade para a resolução de problemas utilizando diferentes máquinas que trabalham de forma uniforme como um sistema único.

Princípios

Para construir um verdadeiro sistema distribuído e alcançar os objetivos dessa distribuição é importante ter alguns princípios como metas de design.

Escalabilidade

Para compreender este princípio, iremos analisar as 3 dimensões em que ele pode ser aplicado:

  1. Escalabilidade em tamanho → o sistema pode escalar em número de usuários e recursos sem perca de performance.
  2. Escalabilidade geográfica → apesar da distância geográfica de usuários e recursos, delays de comunicação são dificilmente notados.
  3. Escalabilidade administrativa → o sistema pode ser facilmente gerenciável mesmo que seus componentes e usuários estejam sob diferentes administrações de rede.

Existem, porém, algumas dificuldades na aplicação deste princípio, uma vez que nenhum componente do sistema possui informação completa sobre o estado global do sistema, tomando decisões baseadas na informação disponível localmente.

Não se pode, também, assumir a existência de um relógio global, uma vez que cada componente pode estar sob um fuso horário diferente. A comunicação assíncrona, portanto, seria o ideal, embora nem sempre é possível dado o contexto de funcionamento/utilização do sistema.

Transparência

Torna a utilização de processos e recursos distribuídos invisível para usuários finais e demais aplicações que interagem com o sistema.
Existem diferentes aspectos onde a transparência pode ser aplicada. Entre eles, temos:

  • Transparência de localização → usuários não são capazes de dizer onde um objeto está fisicamente armazenado no sistema.
  • Transparência de migração → o sistema suporta a migração de recursos e processos sem afetar comunicações e operações em andamento.
  • Transparência de replicação → uso de diferentes cópias do mesmo sistema com o objetivo de aumentar a disponibilidade ou eficiência de processamento não é aparente.
  • Transparência de concorrência → a concorrência pela utilização de recursos computacionais entre os diferentes componentes do sistema não é aparente.
  • Transparência de falhas →o sistema é resiliente a falhas, de modo que o usuário não percebe a ocorrência de um erro com algum componente.
  • Transparência de acesso → o acesso a recursos é uniforme apesar da possibilidade de localização dos componentes em diferentes sistemas operacionais.
  • Transparência de realocação → a realocação de recursos (mudança de servidor, por exemplo) não é perceptível pelo usuário.

O grau de transparência pode variar muito dependendo do contexto e intenção do sistema. Em algumas situações, pode ser preferível expor a distribuição ao invés de mascará-la e tornar a experiência de uso do sistema ruim (pelo fuso horário dos servidores ou lentidões na rede, por exemplo), de modo que o usuário possa compreender melhor comportamentos inesperados do sistema e saber como lidar com eles.

Abertura

Um sistema distribuído aberto é um sistema capaz de oferecer componentes que podem ser facilmente utilizados ou integrados por outros sistemas, além de integrar componentes de qualquer outro lugar para extender o sistema. Deve ser simples configurar sistemas formados por diferentes componentes (de diferentes equipes de desenvolvimento) utilizando uma interface comum.

Resiliência

Este princípio se refere ao grau em que o sistema distribuído é confiável para operar conforme o esperado, apesar da possibilidade de ocorrência de falhas. Caso algum componente falhe, o sistema deve ser tolerante e continuar funcionando adequadamente.

A resiliência se apoia sobre 4 conceitos importantes:

  1. Disponibilidade → o sistema está sempre disponível para utilização.
  2. Confiabilidade → o sistema é capaz de operar continuamente sem falhas.
  3. Recuperação → quando o sistema falha temporariamente, nenhum evento catastrófico ocorre.
  4. Manutenabilidade → quão facilmente o sistema pode ser reparado em caso de falhas.

Segurança

Garantia de confiabilidade e integridade das informações operadas pelo sistema. É preciso que o acesso à informação e aos diferentes componentes do sistema seja controlado mediante níveis de autorização específicos para os diferentes tipos de usuários capazes de operá-lo.

Compartilhamento de recursos

Princípio que garante a facilidade para usuários e aplicações acessarem e compartilharem remotamente recursos utilizando o sistema.

Técnicas

Alcançar as metas de design em acordo com o objetivo geral dos sistemas distribuídos envolve a aplicação de diferentes técnicas, que variam de acordo com o contexto. Em breve tratei as principais.


Referências


Obrigada pela leitura! Compartilhe suas ideias sobre o tema nos comentários 😊

Minhas redes:

Top comments (0)