Вы находитесь на странице: 1из 6

Entendendo o que escalabilidade

22 de setembro de 2015 1 Nicolas Takashi


Fala galera tudo bem?

O assunto de hoje vai ser algo mais terico onde no vamos ver nenhuma linha de cdigo,
porm um assunto bem interessante e que sempre causa dvidas em alguns
desenvolvedores, vamos entender o que escalabilidade tanto horizontal quanto
vertical, principais conceitos e boas prticas sobre esse assunto.

O que escalabilidade?
Escalabilidade a capacidade que um sistema tem de processos para trabalhar com uma
quantidade elevada de processos ou o potencial para elevar a largura de processamento a
fim de acomodar tranquilamente o crescimento de tarefas.

Basicamente refere-se capacidade de um sistema aumentar a sua produo total sob o


aumento de carga quando os recursos de hardware so adicionados.

Sem sombra de dvidas escalabilidade deve ser pensada em tempo de designe da


aplicao, por que isso no uma caracterstica que podemos adicionar em nossa
aplicao mais tarde, as decises que tomamos durante a codificao, fases iniciais,
grande parte disso dita a escalabilidade da nossa aplicao.

Escalabilidade de aplicaes requer um balano entre o relacionamento de parceria de


dois domnios distintos. Por exemplo, a construo de uma farm com servidores de load-
alance no vai beneficiar uma aplicao que foi desenhada para ser executada em uma
nica maquina.

Quando abordamos o assunto de escalabilidade vamos alm das aplicaes tradicionais


cliente-server e comeamos a pensar em aplicaes distribudas. Aplicaes distribudas
so desenhas com N camadas de aplicaes que prope o desenho de uma arquitetura
escalvel que compartilha recursos, tais como componentes de negcios e base de dados.

Escalabilidade vertical (Scalling-up)


Scalling-Up ou escalabilidade vertical so termos geralmente utilizados para
alcanarmos uma maior performance da nossa aplicao utilizando o melhor e mais rpido
hardware. Isso inclui a adio de mais recursos para o nosso servidor, tais como:

Memria
Processador
Disco

A escalabilidade vertical tambm nos permite utilizar a tecnologia de softwares de


virtualizao, uma vez que esse software fornece mais recursos para os mdulos
hospedados no SO (Sistema Operacional), esse recurso tambm pode ser chamado de
ampliao, como a expanso de processos. A escalabilidade do aplicativo refere-se ao
melhor desempenho das aplicaes em execuo em uma verso ampliada do sistema
abaixo temos uma imagem que ilustra a escalabilidade vertical.
Escalabilidade vertical (Scalling-up)

Escalabilidade horizontal (Scalling-out)


Scalling-out ou Escalabilidade horizontal significa adicionar mais recursos para um
conjunto de servidores, com a queda dos preos de computadores e o crescimento
contnuo de potncia de processamento, as aplicaes de alto desempenho, tais como:

Anlise de dados
Anlise biotecnolgicas

Adotaram sistemas de commodities para tarefas que antigamente teriam a necessidade de


possuir supercomputadores, ao dedicar vrias mquinas para uma tarefa comum, a
tolerncia a falhas da aplicao aumenta. Do ponto de vista administrativo a escalabilidade
vertical apresenta um desafio maior de gesto, devido ao aumento do nmero de
mquinas.

Desenvolvedores e administradores da infraestrutura utilizam diversas tcnicas de load-


balance para escalar horizontalmente. O load-balance permite que uma aplicao escale
em um cluster de servidores, fornecendo uma certa facilidade para adicionar mais
servidores replicados, tambm fornece a redundncia dando os recursos de failover local,
cada servidor adicional proporciona um aumento praticamente linear em termos de
escalabilidade.

A ponto chave para escalar horizontalmente a transparncia da localizao do servidor,


se o cdigo da aplicao precisa saber qual servidor est executando uma determinada
tarefa, o nosso objetivo de transparncia de localizao no foi alcanado e o
dimensionamento ser difcil, a aplicao deve ser desenvolvida com o pensamento em
escalabilidade de um servidor para muitos, que no uma opo econmica, abaixo
temos uma imagem que ilustra a escalabilidade horizontal.

Escalabilidade horizontal (Scalling-out)

Desenhando aplicaes para escalabilidade


Como j vimos nos tpicos acima o design da aplicao dita muito o quo escalvel a
aplicao vai ser, um bom design fundamental para escalar sua aplicao e em nenhum
outro momento do ciclo de vida da aplicao podemos tomar uma deciso que impacte na
escalabilidade da aplicao, por isso devemos ter muito cuidado ao desenhar as nossas
aplicaes.
Pirmide da escalabilidade

Pirmide da escalabilidade

Como podemos ver na imagem que ilustra a pirmide da escalabilidade, o hardware tuning
e o product tuning so uma pequena fatia nessa equao. A base da nossa aplicao o
design e a codificao, essa pirmide nos mostra que com um design inteligente podemos
adicionar mais escalabilidade para uma aplicao.

Quando estamos desenhando uma aplicao pensando na escalabilidade o objetivo


principal garantir o gerenciamento de recursos eficiente, com esse tipo de design no
existe limites para qualquer camada ou componente de aplicao onde devemos
considerar a escalabilidade em todos os nveis desde a interface com o usurio at a base
de dados.

Os 5 mandamentos do designe para escalabilidade

Devemos levar em considerao esses 5 mandamentos, quando estamos desenhando


uma aplicao escalvel

No espere (Do not wait)


Um processo nunca deve aguardar mais tempo que o necessrio, cada pedao de tempo
que um processo utiliza um recurso, a mesmo pedao de tempo que um outro processo
est aguardando para ser executado, devemos separar os nossos processos em duas
categorias sncrona e assncrona.

Existem certos momentos onde a nossa aplicao deve executar processos de forma
sncrona, por exemplo: Executamos um determinado mtodo, onde precisamos aguardar o
seu resultado para saber se a sua ao foi bem executada ou no. Assim todas as
operaes que esto relacionadas ao processo do exemplo dependem do resultado do
mesmo.

Uma forma de conseguirmos escalar nossa aplicao atravs de operaes assncronas,


quando estamos manipulando operaes assncronas de longa durao, elas so
adicionadas para uma fila para serem concludas mais tarde por um processo separado.

No lute por recursos (Do not fight for resources)


A conteno de recursos a principal causa dos problemas de escalabilidade,
independente do design, toda aplicao tem uma quantidade finita de recursos. Alm de
realizar o aceleramento das tarefas de longa durao, ns podemos tomar outras medidas
para evitar a conteno de recursos.

Quando estamos executando operaes de envolvem a utilizao de recursos escassos e


que esto sujeitos a conteno, devemos utilizar esses recursos o mais tarde possvel e
em seguida, liberar esses recursos o mais rpido possvel. Quanto menor a quantidade de
tempo que um processo fica utilizando esse tipo de recurso escasso, mais cedo esse
recurso estar disponvel para outro processo utiliza-lo.

Projete para a comutabilidade (Design for


Commutability)
Quando desenhamos a nossa aplicao para comutabilidade sem sombra de dvidas a
maneira mais negligente para diminuir a conteno de recursos, por exemplo: Quando
temos duas operaes podemos chama-las de comutativa, quando elas podem ser
aplicadas em qualquer ordem e ainda sim ter o mesmo resultado final.

Projete para a intercambialidade (Degin for


interchangeability)
Sempre que generalizamos um recurso estamos tornando o recurso intercambivel, e toda
vez que adicionamos um estado detalhado de um recurso, estamos tornando esse recurso
menos intercambivel.

Existem grupamentos de recursos que conseguem tirar proveito dos recursos


intercambiveis, tais como:

COM+
ODBC

Exigir componentes para manter o estado entre chamadas de mtodos destri toda a
permutabilidade e a escalabilidade impactada de forma negativa. Cada chamada de
mtodo deve ser autossuficiente e armazenar o estado fora do componente.
Recursos de partio e atividades (Partition
resources and activities)
Devemos particionar os recursos e as atividades, minimizando essas relaes entre esses
dois itens ns minimizamos o risco de criarmos gargalos.

Quando realizamos o particionamento das atividades aliviamos a carga que inserimos


sobre um determinado recurso de alto custo. Quando utilizamos SSL sensato utiliza-lo
somente para as pginas que realmente precisam de uma maior segurana.

Porm tome muito cuidado porque o particionamento nem sempre a melhor escolha, isso
pode tornar o sistema mais complexo, dividindo recursos que exigem dependncias pode
adicionar uma grande sobrecarga para uma operao.

Boas prticas de escalabilidade


Como todo assunto em desenvolvimento de software ns temos as boas e as ms prticas
quando estamos desenvolvendo uma aplicao pensando em escalabilidade, vou
comentar sobre 6 itens que considerado como boas prticas.

Boas prticas
Essas boas prticas no seguem uma ordem, porm so recomendadas quando estamos
tentando atingir o mximo de uma aplicao escalvel.

Use tecnologias de clustering


Considere camadas lgicas contra camadas fsicas
Isole mtodos transacionais
Elimine o estado da camada de negcios quando possvel
Leia o livro Designing for Scalability with Microsoft Windows DNA
Reveja as melhores prticas para performance

Referncias
MSDN
High Scalability
Google Cloud Plataform