Performance e escalabilidade são conceitos relacionados, porém distintos. Ambos demandam atenção na arquitetura e apresentam desafios particulares que ficam longe de soluções simplórias.
RECORDANDO
A performance de um software está relacionada com sua rapidez e eficiência para completar uma unidade de trabalho. Em um software baseado na interação com usuários, por exemplo, a performance poderá ser medida pelo response time. Quando não há interações com o usuário, a métrica adequada será o throughput. Melhorias de performance também ocorrem se o response time e o throughput permanecerem estáveis, porém, reduzindo consumo de recursos computacionais – como memória, processador, etc.
A escalabilidade de um software está expressa na capacidade de suportar aumentos de carga de trabalho com apropriação razoável de recursos computacionais. Um software será “mais” escalável na medida em que demandar incrementos menores de capacidade computacional, proporcionalmente ao aumento da carga de trabalho, com pouca ou nenhuma degradação de performance.
[tweet]Não há soluções mágicas, nem genéricas para a entrega efetiva de performance e escalabilidade. Muitas vezes, as respostas para determinados cenários estão em direções opostas às apontadas pelo senso comum.[/tweet] Não há bala de prata!
Em tempos de Black Friday é comum encontrar comentários sobre o “absurdo” de sites caírem (Por que não usam a “nuvem”?). Afinal, superficialmente, o que pode haver de tão complexo em mostrar “páginas de produto”, consolidar desejos de compra em um “carrinho” e fechar um pedido, não é mesmo?
O que é ignorado pela maioria dos “especialistas” que apontam a nuvem como “caminho simples” é que a restrição raramente está no dimensionamento do poder computacional, mas, sim, em mecanismos intrincados que adotam lógicas difíceis de escalar, como, por exemplo, em contextos de integração (Legado [em mainframe], OMS e Marketplace).
Em uma Black Friday, não há mudança apenas na escala, mas também no padrão de uso das aplicações. Políticas de caching e fluxos de dados são diferentes e, invariavelmente, fazem emergir estados distintos daqueles encontrados no dia-a-dia, o que dificulta a manutenção da estabilidade.
[tweet]Apontar apenas a “nuvem” como solução para os problemas de performance e de escalabilidade em eventos como a Black Friday, é atestado de “falta de cicatrizes”[/tweet]
Os três aspectos que mais impactam a capacidade de um software ter boa performance e escalar são:
- adequação do hardware dedicado;
- maturidade, estabilidade e prontidão do software de apoio e componentes de terceiros empregados
- projeto e implementação do software.
Esses três elementos devem ser analisados como interdependentes, identificando e subordinando as decisões ao elemento que se caracterizar como gargalo, conforme prescrito na teoria das restrições.
Quanto mais complexo for o software, mais difícil será garantir boa performance e capacidade para escalar.
Não é possível discutir escalabilidade sem discutir performance. Afinal, dificilmente fará sentido escalar uma aplicação que não apresente performance satisfatória. Entretanto, é razoável que falemos sobre performance em sistemas sem a pretensão de melhorar sua escalabilidade.
As vezes, aplicações com ótima performance tem restrições de escalabilidade por limitarem o incremento de poder computacional em níveis inferiores aos que seriam necessários para suportar a carga. Analogamente, decisões para remover limites de escalabilidade causam prejuízos a performance.
[tweet]Quando falamos em performance e escalabilidade, temos necessidades infinitas mas recursos limitados.[/tweet] Dificilmente uma solução será performática e escalável no longo prazo se não for projetada com estes dois atributos sendo enfaticamente levados em consideração.