Conheça o novo recurso de “Hot Swap” para atualização de projetos, do Magic xpi 4.13.5
A recém-lançada versão 4.13.5 do Magic xpi, entre outras novidades, traz um recurso especial para atualização de projetos em ambiente de alta disponibilidade: o HOT SWAP.
O objetivo é diminuir a quase zero o tempo de parada dos projetos, por conta de suas atualizações e upgrades.
Veja como funciona.
Inicialmente, vamos considerar um projeto de integração que está provendo um webService REST.
Vamos usar um exemplo simples, onde algumas informações são recebidas e o webService retorna um “+OK“:
Com este projeto em execução, qualquer cliente pode consumir este serviço, enviar dados e receber o devido retorno:
Agora, vamos considerar a necessidade de alteração de regra de negócio do projeto e sua atualização em ambiente de “produção“.
Mantendo a simplicidade do exemplo, vamos apenas alterar a resposta do webService, para “+OK (versão 2)“:
E após fazermos a compilação do projeto, temos a nova versão pronta para atualizar no ambiente de destino.
Agora, vem a novidade: a partir desta versão 4.13.5, o processo de “build” do projeto produz um novo atalho e uma nova pasta chamados “hotswap“:
o novo “atalho“:
%XPI_HOME%\Runtime\MgxpiCmdl.bat start-servers -startup-config-file "%PROJECTS_HOME%\<nome_projeto>\<nome_projeto>\hotswap\start.xml" -space-name "MAGIC_SPACE" -swap "true"
é uma versão alternativa do atalho “start“, onde é solicitado para iniciar este projeto em modo “swap“, como um novo nome e uma nova configuração de inicialização.
e a nova “pasta“:
é onde ficam versões alternativas dos arquivos:
IFS.ini START.xml
que permitem justamente esta inicialização em modo “swap“.
O que é o modo “swap” de execuçao dos projetos ?
Após a atualização da pasta do projeto no ambiente de destino, e sem realizar a “parada” do projeto que está em execução, podemos usar este atalho “hotswap” para proceder a atualização ‘a quente’ do projeto.
Nese momento, a nova versão entra em execução com outro nome:
<nome_projeto>_swap
E as duas versões ficam em execução ao mesmo tempo:
Porém, a versão “antiga” (<nome_projeto>) para automaticamente de executar novas integrações e atender novas demandas de triggers, processando apenas o que já estava pendente em sua fila (messages).
De forma transparente, todas os novos processos de integração passam a ser executados pela versão “nova” (<nome_projeto>_swap) do projeto:
e após algum tempo, quando a fila de mensagens da versão anterior é zerada, essa versão anterior é finalizada e nova versão fica soberana no grid, tendo o seu sufixo “_swap” removido:
Ou seja:
- A versão “nova” entra em execução, com o sufixo _swap no nome do projeto
- A versão “antiga” desconsidera as novas demandas de integração
- A versão “nova” assume as novas demandas de integração
- A versão “antiga” finaliza suas pendências
- A versão “antiga” sai de cena
- A versão “nova” segue executando, sem o sufixo _swap no nome do projeto
Pareceu simples?
É simples mesmo 😎
Fique ligado no Blog MagicBR, para mais dicas.
Para receber os artigos do Blog Magic Brasil em primeira mão no seu email, registre-se aqui