Como faço um proxy HTTP front-end para executar a manutenção do aplicativo sem tempo de inatividade?

1

Nós temos uma aplicação web em Java (embora a linguagem não seja realmente relevante para esta questão), e é uma interface do Apache através de um proxy simples.

Existe uma maneira de enfileirar todas as solicitações HTTP dos clientes (para que sua conexão HTTP seja mantida e não descartada) enquanto encerramos o Java Application Server (ou qualquer outro contêiner ...) com nosso aplicativo. A manutenção demora < 60 segundos, por isso a ideia é apenas implantar uma nova versão do aplicativo e dizer "permitir o tráfego de volta ao aplicativo da web novamente", para que os clientes tenham um atraso, mas não uma queda de conexões as solicitações na fila não terão permissão para acessar nosso aplicativo.

Para ser mais claro, não estamos lidando com um site, mas na verdade são solicitações de API feitas via HTTP, e os clientes estão realmente usando bibliotecas de código que suportam o atraso especificado - assim os clientes saberão esperar (enquanto estamos fazendo a manutenção).

Você tem alguma ideia? Se necessário, podemos desenvolver um pequeno aplicativo para isso se não houver uma solução óbvia / pronta para uso, embora esse seja um problema muito comum experimentado basicamente por qualquer pessoa que forneça uma API HTTP aos seus clientes.

    
por bozo 21.02.2015 / 11:17

2 respostas

1

Como sobre o seguinte tipo de princípio? Digamos que seja mod_proxy, assegure que ProxyTimeout e ProxyPass connectiontimeout = (e provavelmente retry =) seja pelo menos o tempo de manutenção ou o tempo limite ocioso do cliente da API.

Em seguida, antes da manutenção, faça o firewall de todas as novas conexões no back-end, por exemplo, iptables -I INPUT -p tcp --syn --dport 8080 -j DROP . Após a manutenção, remova a regra com iptables -D .

Os MaxClients podem permanecer baixos, mas você pode querer aumentar ListenBackLog se o tempo limite da conexão TCP no cliente for curto.

    
por 21.02.2015 / 13:29
0

Basta iniciar a nova versão do aplicativo em sua própria instância (ou seja, em uma porta diferente) e atualizar a configuração do proxy reverso para redirecionar solicitações para a nova instância, o que pode ser feito sem tempo de inatividade. ( apachectl reload )

Em seguida, desative a versão antiga e a instância liberando os recursos.

    
por 21.02.2015 / 12:27