Escolhendo entre escalabilidade horizontal e escalabilidade vertical

Ter, Set 21, 2010

Arquitetura

Aqui no Escalabilidade falamos bastante de sistemas distribuídos por sua importância nos problemas de escalabilidade e processamento de dados em larga escala. É importante lembrar que escalar um sistema não necessariamente envolve criar um sistema distribuído horizontalmente entre múltiplas maquinas. Mas quando devemos escalar horizontalmente e quando devemos escalar verticalmente ? Primeiramente vamos a algumas definições:


Escalabilidade Vertical (scale up), significa adicionar recursos em um único nó do sistema (mais memória ou um disco rígido mais rápido).  Ou seja fazemos um upgrade no hardware do nosso servidor para atender a demanda crescente de processamento e armazenamento.

Escalabilidade Horizontal (scale out), significa adicionar mais nós ao sistema, tais como adicionar um novo servidor e um sistema de software que permita a distribuição do trabalho entre múltiplas máquinas.


scale up Escolhendo entre escalabilidade horizontal e escalabilidade vertical

Na escalabilidade vertical aumentamos o poder do nosso hardware para aumentar nossa capacidade de lidar um número maior de requisições ou processar uma quantidade maior de informações. Quais as vantagens desta abordagem ?

* Mantemos o mesmo código e configurações do sistema

* Custo de desenvolvimento praticamente zero.

Eu recomendo fortemente que primeiro você tente escalar seu sistema verticalmente. Em muitos casos aumentar para uma máquina maior resolve o seu problema perfeitamente.  Mesmo em sistemas de Cloud Computing como o Amazon EC2 é possível escolher maquinas mais poderosas. Então a dica é que enquanto o seu custo não for proibitivo continue jogando hardware no problema, na maioria dos casos vai ser mais barato que mobilizar o seu time para escrever novamente sua aplicação ou adapta-la para um ambiente distribuído.

Se o seu sistema continua crescendo o preço de continuar fazendo upgrade no seu hardware vai se tornar cada vez maior o que na maioria dos casos vai te obrigar a procurar uma solução distribuída. Sendo assim, deveríamos começar nosso sistema como um sistema que facilmente poderia ser escalado horizontalmente quando necessário certo ? O problema desta abordagem é que muitas vezes não sabemos inicialmente qual vai ser uso real de uma aplicação que vai levar a esta necessidade. A maioria dos projetos muda muito ao longo da sua vida e não temos muita informação no momento inicial de quais serão as necessidades reais no futuro.

Concluindo: Você só vai saber realmente qual a necessidade de escalar seu projeto a medida que ele for crescendo. Por isto cuidado ao otimizar prematuramente seu sistema, pode ser um tiro no pé.

, , , , ,

Por:

Que escreveu 39 posts em Escalabilidade.


Fale com o autor

  • http://herberthamaral.com/ Herberth Amaral

    Excelente post. Esclarece muita coisa.

    Tks!

  • Luís F.

    Ótimo post e didática. Caiu como uma luva enquanto eu lia sobre NoSQL no Wikipédia.

    http://pt.wikipedia.org/wiki/NoSQL

  • Danilo

    idem ao Luis F.