Executando verificação de segurança...
13

[DIca] Usar a versão free do render sem downtime

Depois de publicar a minha integração do Whatsapp com minhas redes sociais, um dos aprendizados que tive é que podemos utilizar o Render sem downtime no plano gratuito.

Para quem nâo conhece, o Render é uma plataforma que permite o deploy de vários serviços, porém, no plano gratuito, após um período de inatividade, o serviço é desligado. Com isso, quando há alguma request com ele inativo, pode ser que leve, pelo menos 50s para ter uma resposta.

A forma como achei para contornar isso foi basicamente criar um health check externo, que verifica a cada 10 minutos se o serviço está ativo. Na documentação do Render, não encontrei de forma explícita, qual é o tempo que ele considera de inativade, mas pelos testes que já fiz, entendo que se o seu serviço fica 15 minutos sem receber requisições ele é desligado, com o health check acabamos evitando isso.

No caso, todas as ferramentas sâo gratuitas, o render hospeda meu serviço e uso o BetterStack pra fazer os checks de disponibilidade, impedindo que ele seja desligado.

Um ponto importante nesse caso, é, que caso você tenha alguma política de CORS, precisa lembrar de autorizar o BetterStack a bater no endpoint que você deseja fazer o health check. Para fechar vale lembrar que você também tem a opção de fazer um script, que execute a cada período de tempo essa requisição ao seu serviço no Render, a questão é que o health check acaba sendo mais prático e inclusive útil para você acompanhar o status da aplicação.

Abaixo um tutorial simples de como criar um health check com do Render no BetterStack

1 - crie um endpoint com o método get e que retorne 200. Ter um body na response é opcional.

GET https://meu-app.render.com/health 

response body example >> { status: 'ok' }

2 - crie uma conta no BetterStack
3 - com a conta, selecione 'Uptime' no menu lateral e depois 'Monitors'
4 - clique em create monitor
5 - coloque o seu endpoint de health check no campo 'Url to monitor'. Depois você pode configurar o que deseja monitorar quando receba a resposta da url.
tela1

6 - na seção 'Advanced settings' vá até 'Check frequency' e selecione um valor entre 3 e 10 minutos. Nâo recomendo deixar 15 minutos, pois como citei anteriormente, entendo que caso tenha 15 minutos entre uma requisição e outra, o serviço já é desligado.
tela2

A ideia aqui não é entrar no tópico de monitoramento, mas o BetterStack no plano gratuito oferece ferramentas bem úteis para monitorar a aplicação, como alertas, logs e até mesmo uma página de status do serviço. Deixo até de exemplo a página que construi para o Whats4Social nesse momento e a dica de ferramenta que pode ser usada em seus projetos, sem custo.

3

Antes de qualquer comentário, vou deixar os parabéns pela iniciativa e por divulgar para aqueles que não conheciam a técnica.

Ano passado eu discuti sobre isso em alguma postagem aqui (não lembro qual foi) e lembro q existem clouds q limitam a quantidade de horas no mês em que vc pode usar. Salvo engano, quando o heroku era gratuito eles disponibilizavam 720 horas (24x30) free no mês e eu utilizava o uptimerobot (serviço de health check tbm) e nos meses de 31 dias eu ficava com um dia offline. Para contornar isso, eu abandonei o health check e implementei um script próprio para fazer o ping e como o uso na madrugada era quase zero, eu deixava ele "dormir" umas duas horas na madrugada pada sobrar saldo para o 31° dia do mês.

2

Um ponto importante, mas admito que consultando a doc do Render, não vi em nenhum momento limitação de horas por mês. Tanto que não é um ponto que aparece nos outros planos, vou observar caso possa ser um problema futuro.

3
1
1

Acabei de fazer o teste. O render hiberna depois de 15 minutos de inatividade. O heroku, quando tinha a versão free hibernava apenas após 30 minutos. Ainda não descobri o total de minutos mensal que podemos usar no Render. Se eu descobrir, volto aqui e aviso.

Um outro detalhe importante, o render apaga o banco de dados após três meses de uso na versão free.

1

Ótimo post cara, estou usando o Render faz duas semanas na minha aplicação e esse downtime é bem ruim e eu já tinha feito as contas que quando entrava no downtime e eu tentava entrar de volta era 2 minutos para carregar.
Acabei assinando o render starter de $7 hoje mas se eu tivesse visto seu post antes não teria assinado kkkkk mas tudo bem.

1

A melhor leitura que fiz desta manhã foi essa sua ideia, pois o render é bem legal mas sua hibernação detona mesmo. Obrigado.

1