System design - princípios da escalabilidade de sistemas através da distribuição
Vitória Lopes
Posted on September 13, 2023
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:
- Escalabilidade em tamanho → o sistema pode escalar em número de usuários e recursos sem perca de performance.
- Escalabilidade geográfica → apesar da distância geográfica de usuários e recursos, delays de comunicação são dificilmente notados.
- 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:
- Disponibilidade → o sistema está sempre disponível para utilização.
- Confiabilidade → o sistema é capaz de operar continuamente sem falhas.
- Recuperação → quando o sistema falha temporariamente, nenhum evento catastrófico ocorre.
- 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
- M. van Steen and A.S. Tanenbaum, Distributed Systems, 4th ed., distributed-systems.net, 2023.
Obrigada pela leitura! Compartilhe suas ideias sobre o tema nos comentários 😊
Minhas redes:
- Github: https://github.com/stoneparker
- LinkedIn: https://www.linkedin.com/in/vitorialopesdiogo/
Posted on September 13, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
September 13, 2023