Alexandro Félix

"Conhecimento é poder." (Francis Bacon)

Cluster Horizontal e Cluster Vertical

leave a comment »

O que é um cluster vertical? E horizontal? Quais as diferenças entre eles? Onde se aplicam? Já ouvi vários questionamentos como este, e achei que poderia ser interessante passa pra vocês um pouco da minha experiência, e discutir este assunto para que possamos solidificar este assunto em nosso conhecimento.

Vamos analisar esta questão do ponto de vista do java, ou seja, analisando a disponibilidade das jvm’s em cluster verticais e horizontais.

Cluster Horizontal

Isto ocorre quando você tem uma jvm rodando em um servidor e adiciona mais um servidor, rodando uma jvm para que as requisições sejam distribuídas entre as mesmas. Fazendo isto, você terá algo como a figura abaixo:

Cluster Horizontal

Na ilustrção acima, você pode ver que esta implementação utiliza apenas uma JVM em cada servidor, denotando então um cluster horizontal

Ok Alex, agora entendo o que é um cluster horizontal, mas quais são os benefícios de se implementar este tipo de cluster?

  • Fail over - Em caso de crash em uns dos servidores você terá mais um servidor para atender as requisições, seu ambiente ficará resiliente em caso de falha hardware.
  • Load balance - Você poderá configurar um load balance para distribuir as requisições entre as instâncias de JVM
  • Melhor performance - Com a distribuição de requisições, as mesmas encontrarão o servidor com mais recursos livres do que se estivessem sendo direcionadas para apenas 1 servidor, e desta maneira o servidor poderá atender de forma mais rápida.

E as desvantagens?

  • Maior impacto em caso de falha, ou restart: Caso você possua dois servidores com uma JVM em cada, a capacidade de processamento de sua aplicação será reduzida à 50% em caso de falha ou restart de uma JVM(app server) membro do cluster.
  • Utilização dos recursos do servidor não otimizada: Apenas um processo rodando em cada servidor, não consegue utilizar duas fontes de recursos de forma otimizada.
  • Custo

Cluster Vertical

Um cluster vertical consiste em ter mais de uma instância de JVM(app server) rodando em um servidor físico, a figura abaixo ilustra o caso:

Cluster Vertical

Observe acima que agora temos duas jvms rodando em 1 servidor, o que denota um cluster vertical.

Quais as vantagens de um cluster vertical?

  • Os recursos dos servidor são utilizados de maneira mais eficiente - Em ambientes de 32 bits, você ficará limitado a um valor em torno de 2 a 2,5 gigas por JVM. Caso seus servidor tenha 8 gigas de memória por exemplo, você poderá utilizar toda esta memória utilizando múltiplas jvms.
  • Melhor disponibilidade durante Garbage Collection - Na hora da execução do GC(dependendo da implementação escolhida), a jvm sofre um certo tempo de pausa. Quando o GC ocorrer em uma JVM, você ainda terá outra disponivel para atender a demanda gerada.
  • Custo

E as desvantagens?

  • Não há failover em caso de crash do servidor - Em caso de crash do servidor, você não terá failover e toda sua aplicação ficará indisponível até que o servidor seja restaurado.

Então qual seria o melhor modelo, vertical ou horizontal?

Bem, eu não diria que um seja melhor que o outro, isto vai depender das suas necessidades, de como você pretende utilizar o ambiente, das regras de negócio, relação custo x benefício, e outras variantes que podem fazer você decidir por um, ou outro.

Eu particularmente acredito que o melhor cenário seja um mix dos dois, ou seja, vários servidores físicos, rodando múltiplas jvms. Assim você teria todas as vantagens que os dois modelos oferecem, e praticamente eliminaria as desvantagens apontadas em cada implementação de cluster, seja ela vertical ou horizontal.

Com a implementação do que vou chamar de “Mix” você terá tanto um ambiente com alta disponibilidade, pois em caso de crash de um servidor, você ainda terá outro servidor com mais jvms para atender a demanda da aplicação, terá também um melhor aproveitamento dos recursos, tanto em relação a memória quanto em relação ao processador e aumentará e terá também um ambiente com alta performance. Será capaz de por exemplo em uma implementação com 4 jvms e 2 servidores físicos com duas jvms rodando em cada, reiniciar uma jvm e ter seu protencial de processamento reduzido para apenas 75% do total.

Bem pessoal, espero ter esclarecido um pouco e ter ajudado de alguma forma com as considerações acima.

Um abraço e até a próxima.

About these ads

Deixar uma resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

WordPress.com Logo

Está a comentar usando a sua conta WordPress.com Log Out / Modificar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Log Out / Modificar )

Facebook photo

Está a comentar usando a sua conta Facebook Log Out / Modificar )

Google+ photo

Está a comentar usando a sua conta Google+ Log Out / Modificar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.

%d bloggers like this: