loader

Java Escalável e com Alta Disponibilidade na Nuvem

Monolithic X Microservices - Comparação

Abaixo será apresentado a diferença entre os modelos monolithic e de microservices:
  • Downtimes/Oscilações no Deploy
  • Downtimes/Oscilações ao reiniciar serviço
  • Alto risco de falhas ou sobrecarga na VM
  • Dificuldade para escalar
  • Modular e Flexível
  • Deploy e atualizações independentes
  • Mais fácil para escalar e manter

Diagrama

Esse diagrama foi criado pensando em um modelo de aplicacao que utiliza microservices e abaixo será apresentado
  1. O usuário vai fazer uma requisição de um domínio no seu navegador, o servidor DNS vai fazer uma ligação entre um domínio e um número de IP e com isso o usuário chega a nossa infraestrutura.
  2. O usuário vai fazer uma requisição de um domínio no seu navegador, o servidor DNS vai fazer uma ligação entre um domínio e um número de IP e com isso o usuário chega aos containers de nossa infraestrutura.
  3. Os nossos containers estao separados em, load balancer, aplicação e banco de dados

Escalabilidade vertical e horizontal

Escalabilidade vertical é simplesmente aumentar os recursos do hardware de um servidor, como CPU e memória, ou melhorar o desempenho do disco, alterando-o para um mais rápido.
Escalabilidade horizontal é adicionar mais instancias de um mesmo servidor a um ambiente, como adicionar um outro nó de um servidor de aplicação para o mesmo sistema.

Escalabilidade vertical

Abaixo será apresentado as vantagens e as desvantagens da escalabilidade vertical:
Vantagens
  • Fácil de configurar e publicar
  • Sem necessidade de alterações no código para escalar
  • Sem necessidade de sincronização de dados
  • Pouca complexidade
  • Menores custos
  • Ambientes com muita memória não disponíveis em alguns provedores
  • Facilidade para aumentar a performance
  • Sem problemas com a rede ou latência
Desvantagens
  • Sem alta disponibilidade - risco significativo de downtime se falhar o servidor ou exceder os limites
  • Dificuldade de fazer deploy sem downtime
  • Dificuldade para migrar a outro servidor físico ou infraestrutura maior, e o live migration depende da tecnologia de virtualização escolhida É a capacidade de aumentar e diminuir os recursos disponíveis do seu ambiente, de maneira rápida e flexível. Prós Contras

Escalabilidade vertical/horizontal na saveincloud

A nossa principal vantagem para outras plataformas de hospedagem, é a possibilidade configurar a alocação de recurso para os ambientes sem precisar que a aplicação tenha downtime, Abaixo será apresentados alguns beneficios da escalabilidade horizontal e vertical:
Escalabilidade Vertial
  • Resolver o problema de alocação de recursos sem necessidade de deinir exatamente quando vai utilizar
  • RAM e CPU disponiveis de acordo ao uso e limites estabelecidos na configuração do container
  • O consumo é monitorado e cobrao em tempo real baseado no uso
  • Capacidade de ajustar os limites maximos sem necessidade de migração
Escalabilidade horizontal
  • Solução dos problemas de alta disponibilidade: facil de configurar um ambieente pronto para produção
  • Opção de auto-cluster disponivel, diminuindo a complexibilidae
  • Escalabilidade Automatica
  • Disponivel Escalabilidade Stateful ou stateless.
  • Inteligencia na distribuição dos ambientes (Anti-affinity)
  • Flexibilidade na gestão com opções de UI, API y JPS
  • Limites vs Uso real em uma VM

    Nas outras plataformas de hospedagem normalmente é contratado um limite de recursos para uma VM, esses recursos dificilmente são totalmente utilizados.

    Já na nossa plataforma, é possível determinar um limite escalonáveis e reservados de recursos, os reservados seriam uma base mínima e os escalonáveis seriam quais são os limites de recursos que podem ser alcançados, desta forma será cobrado apenas o que foi usado.

    Elasticidade em um Cloud baseado em Containers

    A elasticidade dos containers em nossa plataforma ocorre de forma simples, cada host representa a nossa maquina física onde esta alocada os nossos containers com as suas aplicações, caso alguma aplicação precise de mais recursos será disponibilizado conforme na imagem abaixo:

    Elasticidade vertical automática

    Cada container hospedado com a SaveinCloud é dividido em unidades de cloudlets, a cada cloudlet equivale a 128MiB de RAM e 400Hz de CPU, é possível configurar um limite de escala máxima para cada container, onde os recursos ficam disponíveis sempre que necessário, no exemplo abaixo foi configurado 1 cloudlet reservado, ou seja sempre será cobrado por este cloudlet e 32 cloudlets escaláveis, que são recursos que podem ser utilizados.

    Pagar pelo contratado VS Pagar pelo uso

    Na SaveinCloud usamos o modelo paga somente pelo que foi utilizado assim ao usar a escalabilidade vertical automática na nossa plataforma, voce conseguira uma economia significativa dos custos do cloud, baseados no uso real.
    Na imagem acima é possível verificar os recursos alocados pelo modelo pague pelo que contratou que não são utilizados e a perca de dinheiro em relação ao nosso modelo.

    Escalabilidade Horizontal de containers java

    No nosso painel é possível verificar o nosso recurso de escalabilidade horizontal, clicando na opção sinalizada em vermelho na imagem abaixo é possível aumentar ou diminuir o numero de containers.
    Todos os containers serão cridos com o mesmo numero de cloudlets reservados e escalonáveis, os recursos serao multiplicados pelo numero de containers.

    Containers com escalabilidade horizontal

    Na escalabilidade horizontal será criado os containers em hardwares físicos diferentes replicando os recursos e os dados, com isso garante ainda mais disponibilidade a aplicação

    Stateless (Criação de um novo) vs Stateful (Clone)

    O Stateless mode cria um cantainer vazio baseado no templete padrão do servidor de aplicação, é mais rapido que o Statefull e mais facil de paralelizar a escalabilidade, já o Stateful mode cria um novo containers fazendo uma clonagem a partir do master, normalmente leva mais tempo que o Stateless, mas os dados são replicados automaticamente.

    Regras de anti-affinity

    Todos os containers adicionados em um ambiente Cluster são criados em diferentes servidores fisicos, tendo uma avançada alta disponibilidade e pronteção contra falhas

    Escalabilidade horizontal automatica de containers java

    A opção escalabilidade horizontal automática pode ser acessada clicando na opção de configurações do ambiente, nessa opção é possível configurar uma regra que permita adicionar novos containers e remove-los 

    Opção auto-clustering de containers java

    A funcionalidade Auto-Clustering mode está disponivel para diferentes servidores de aplicações. Os containers já vem pré configurados com replicação de sessão e load balacer garantindo um ambiente com performance e alta disponibilidade
    Para ativar a opção auto-clustering, clique em Novo Ambiente na parte superior do painel, escolha o servidor de aplicação java desejado e na opção Auto-Clustering coloque on, como na imagem acima.

    Superando o desperdício de memoria Java

    A jelastic inicialmente foi criada para o mercado de java, sendo a primeira linguagem a ser disponível na plataforma, sendo assim reconhecida pela comunidade mundial de java pois consegue um solucionar um dos maiores problemas de desperdício de memoria no java.
    • Requerimentos de uso de memória

    O gráfico acima é referente a uma pesquisa feita em um evento no Jakarta EE em 2018, onde foi perguntado quais seriam os pontos a melhorar se tratando de cloud java, mais de 40% dos entrevistados responderam que seria o requerimentos de uso de memória.

    Entendendo o JVM Footprint

    A JVM tem duas funções primárias, que são, permitir que uma aplicação Java funcione em qualquer dispositivo ou sistema operacional, e controlar e otimizar o uso de memória pelas aplicações.

    O Java foi lançado em 1995, e até então além de escrever as aplicações você ainda tinha que controlar a memoria, um dos maiores problemas seria o uso do jvm heap nas maiorias da vms seria necessário reiniciar o java para limpar a memoria.
    Pensando nesse problema, a jelastic criou o jvm footprint, um agente responsável por gerenciar o jvm heap, limpando esses dados na memoria sem precisar reiniciar o java, assim o usuario nao sofrera nenhum downtime
    A jelastic foi reconhecida mundialmente pela oracle em 2018, para saber mais sobre o premio leia este artigo.

    Solução para Java < 12: Execução de serviço GC a todo momento

    Para versões anteriores ao java 12, recomendamos instalar o java Memory Agent, isso pode ser feito através clicando em marketplace na parte superior do painel, para as versoes superiores do java, este agente já vem instalado por padrão.

    Exemplo do resultado do ADD-ON

    O container da imagem está limitado com 8G, max heap limit(Xmx) 6.5G, e o consumo de memoria depois da entrada chega aos 3G.
    Depois de instalar o jelastic Agent GC, o consumo de memoria trabalha com um nível mínimo. Sem o agent, o consumo chega nos 3G sem necessidade. Se o uso da aplicação é mais intenso, os numeros sao ainda piores.

    Deixe uma resposta

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

    Open chat