Continuo vendo em anúncios de emprego que o candidato deve ter experiência em escrever aplicativos "escalonáveis". O que torna um aplicativo escalável e como sei que meu código pode ser escalado para milhões de usuários?
Eu acho que uma maneira melhor de formular esta pergunta é: Como posso escrever meu código com escalabilidade em mente? Para que o código seja escalável desde o início, em oposição a uma reflexão tardia. Existem certas metodologias de design? Ou é simplesmente uma questão de escolher os algoritmos corretos para o trabalho?
fonte
A escalabilidade é medida em termos de taxa de transferência com base em alguma variável. Por exemplo, número de solicitações / segundo com usuários X. A maneira mais simples de descrever a escalabilidade é:
A primeira coisa que você precisa entender ao projetar para escalabilidade é qual medida é mais importante para seu aplicativo? Existem várias maneiras de medir a eficiência, que é um componente essencial da escalabilidade:
Existem medições de mais eficiência que podem ser usadas, mas são comuns para sistemas baseados na Web ou sistemas de processamento em lote.
O próximo aspecto da escalabilidade é medir o que acontece com sua eficiência à medida que a carga aumenta. As formas comuns de aumentar a carga são:
O objetivo de um aplicativo escalável é manter ou melhorar a eficiência à medida que lidamos com o problema de carga. Em resumo, se o tempo de resposta estiver demorando muito, podemos adicionar outro servidor para distribuir a carga uniformemente? Essa abordagem reduz a quantidade de trabalho de um servidor e mantém os servidores operando nesse "ponto ideal" para obter eficiência.
Sua aplicação precisará ser projetada especificamente para ser dimensionada. Isso significa que você deve ter cuidado com os dados da sessão, encaminhando solicitações para o servidor certo, reduzindo os gargalos que limitam a capacidade de dimensionamento do aplicativo.
fonte
Basicamente, você deseja evitar gargalos de desempenho ao aumentar o número de usuários e / ou processar um conjunto de dados maior e / ou oferecer sua interface em mais idiomas, etc.
Basicamente, você analisa o esquema do banco de dados, os algoritmos e o processo de desenvolvimento de software e tenta prever problemas futuros. Você também deseja configurar o monitoramento de desempenho para identificar problemas quando eles começarem a construir.
Peguei essas dicas ao ler Construindo sites escaláveis (link para amazon).
Espero que isto ajude!
fonte
A única maneira de os aplicativos serem verdadeiramente escalonáveis é não ter restrições que não possam ser aprovadas (ou apenas muito caras).
Um exemplo típico é o que acontece quando você fica sem os ciclos da CPU disponíveis? Se o seu programa é multi-rodado, você pode executar em uma caixa com vários núcleos, mas o que acontece quando você não pode mais comprar uma caixa maior? Seu aplicativo simplesmente não pode mais crescer e, portanto, não é escalável.
Qualquer aplicativo verdadeiramente escalável deve poder se espalhar por vários computadores de maneira transparente e fazê-lo sem inchaços perceptíveis. Isso não é fácil e é uma das razões pelas quais o Google tem sido tão bem-sucedido.
fonte
Existem problemas exclusivos que acompanham o suporte a grandes aplicativos em escala. O anúncio de emprego procura candidatos que trabalharam nesse ambiente e tiveram que resolver esses problemas.
A partir de um aplicativo de alto nível, a escalabilidade é feita constantemente, perguntando-se o que aconteceria se fosse solicitado que esse trecho de código fosse executado milhares de vezes em um período muito pequeno. Isso significa gerenciar suas pegadas de memória, fazer cache de totais e dados, usar fontes de dados escaláveis, etc.
fonte
Se você estava criando um recurso de pesquisa com bom desempenho quando ele possui 100 linhas no banco de dados para pesquisar e 10 usuários usando-o por vez. Qual seria o desempenho quando 100 usuários o estivessem usando ao mesmo tempo e há 100 mil linhas para procurar.
Se ele executa o mesmo, não importa o que, então é muito bom. se for proporcional à quantidade de usuários / dados (o que significa 10x mais dados == 10x mais tempo para processar), isso é bom. Se ele tiver um desempenho muito menor, mais dados possuir (dados no modo 10x == 10x ^ 10 mais tempo para processar), mas não será bem dimensionado.
Meus exemplos realmente devem ser mostrados na notação Big O, mas atualmente não o conheço o suficiente para escrever os exemplos em Big O.
Você pode simular mais dados despejando dados fictícios no seu banco de dados e existem ferramentas para simular mais usuários, como o Apache AB.
fonte