Olá pessoal, espero que este relato encontre vocês bem. Sou desenvolvedor de software e, apesar de ainda ter pouca experiência de mercado, acabei tendo uma ideia para um projeto. Trata-se de um site de pesquisa eleitoral e, antes de você sair do post, peço que termine de ler, pois preciso da opinião sincera de vocês sobre o que teriam feito diferente.

A ideia

Como é ano eleitoral, presenciei muitas discussões entre colegas, amigos e familiares sobre quem estaria à frente nas pesquisas eleitorais. Muitas vezes, mencionavam pesquisas que nunca eram divulgadas. Foi então que pensei: por que não criar um site “simples” onde aparecessem as fotos dos candidatos e, ao clicar, o usuário fosse redirecionado para um gráfico mostrando a quantidade de votos de cada candidato? Sem pesquisar sobre legislações e outras questões, rabisquei o fluxo inicial de como eu queria que fosse no Excalidraw.

Simples e sem custo

Eu sempre tive em mente que não queria gastar dinheiro, nem para comprar domínio, nem para hospedar de forma segura, entre outros. Eu queria algo de qualidade e gratuito. Apesar de ser trabalhoso no início, no fim, consegui!

Tecnologias

Eu tenho conhecimento em algumas linguagens de programação, como Golang, Kotlin, JavaScript, Java e C. Embora não seja mestre em nenhuma delas, já trabalhei em projetos reais com todas. Como estou me especializando em Golang, escolhi essa linguagem, pois queria algo leve, com baixo custo de processamento, memória e que respondesse bem a muitas requisições. Foi a escolha ideal.

Leia também:  Olhar do Amanhã: que mundo vamos deixar para os nossos filhos?

Decidi manter o projeto simples, sem frameworks de frontend, apenas HTML, CSS e um pouco de JavaScript para funcionalidades específicas. No backend, para facilitar minha vida, usei o Echo em Golang.

Comecei a codar

Iniciei o desenvolvimento sem pensar muito em onde hospedar. Quando terminei as três telas principais — login, votação e resultado —, lembrei que precisaria hospedar o site. Decidi usar meus créditos gratuitos do Google Cloud. Como a aplicação era em Golang, bastou subir uma VM, instalar o Golang, rodar o projeto e compartilhar o link do IP com quem quisesse acessar.

Primeiro problema

Descobri que não podia usar recursos como pedir a localização do usuário porque precisava de um certificado SSL para usar HTTPS. Tentei contornar isso gerando meu próprio certificado, mas o navegador alertava que o site não era seguro. Mesmo assim, muitas pessoas acessaram e, surpreendentemente, os usuários não se importavam muito.

Segundo problema

Eu estava usando um banco de dados simples, o SQLite3. Como não planejei escalar o projeto, não me preocupei com o banco de dados — poderia ter salvo tudo em arquivos de texto se fosse mais fácil. Mas, com o aumento do uso, o sistema começou a travar, e eu não entendia o porquê. Recebi vários e-mails relatando que não conseguiam acessar o site, além de reclamações sobre segurança. Cansado da situação e sem estar recebendo nada, desliguei o sistema.

Leia também:  Galaxy S24 tem oferta histórica por menos da metade do preço do S25

Terceiro problema

As reclamações continuaram, então resolvi desligar tudo. O esforço não estava valendo a dor de cabeça.

Solução milagrosa

Foi quando descobri a plataforma Render.com, que tem um plano gratuito com algumas limitações que consegui contornar com soluções de programação. Ela faz o deploy automático de aplicações Go direto do GitHub e oferece subdomínios gratuitos com certificado SSL. Com isso, mesmo que minha aplicação rodasse na porta 80, os usuários acessavam através de HTTPS.

Limitações

O plano gratuito pausava a VM após 15 a 30 minutos de inatividade, e a primeira requisição levava cerca de 50 segundos a 1 minuto para reativar a VM. Além disso, o limite era de 50 acessos por segundo, e não havia acesso SSH à VM.

Resolvendo limitações

Para manter a VM ativa, criei um script em Golang que fazia uma requisição ao meu site a cada 15 minutos. Isso resolveu as queixas de demora no carregamento. Como o banco de dados ficava na memória e era recriado a cada reinicialização, desenvolvi uma tela de login de administrador (eu mesmo), onde podia baixar o arquivo do banco de dados antes de reiniciar a VM.

Para dividir o tráfego entre duas VMs, implementei um balanceamento de carga na página inicial. O usuário acessava o domínio principal, mas, ao clicar em login, era redirecionado para uma das duas VMs com o restante do sistema. Para o banco de dados, usei uma instância gratuita de PostgreSQL, o que exigiu apenas pequenas mudanças no código. Assim, ambas as VMs compartilhavam o mesmo banco.

Leia também:  Como resgatar códigos no Free Fire

Reflexões

Com a aplicação em funcionamento, notei que o site tinha picos de até 500 requisições por segundo, e o tempo de resposta durante esses picos variava entre 2 e 5 segundos. A solução resolveu a maioria dos problemas, mas, como estamos em período eleitoral, decidi não manter o site no ar por muito tempo — deixei-o ativo por apenas 4 dias, durante os quais tive até 1400 acessos simultâneos.

Esse projeto me ensinou muito. Embora hoje eu consiga planejar sistemas mais seguros e eficientes, na época, optei por resolver os problemas conforme eles surgiam. Acho que é isso que a faculdade nos ensina: a reconhecer que poderíamos ter feito melhor. Gostaria de saber que decisões de projeto vocês teriam tomado de forma diferente.

Infelizmente, por questões legais, não posso divulgar os dados coletados, mas deixarei o repositório no GitHub.

GitHub do projeto: https://github.com/hanufu/votei

https://hostinger.com.br?REFERRALCODE=1SEBASTIANA25
Oi! � Estou te dando 84% de desconto para comprar sua maquininha Point Mini NFC 2. Aproveite esse desconto e garanta taxas promocionais a partir de 0,84% no crédito à vista e 9,89% no crédito parcelado em 12x.
Computers & Accessories
Amazon Prime
Aproveite frete GRÁTIS e rápido, descontos exclusivos, filmes, séries, músicas e muito mais. Com o plano anual, você parcela em até 12x de R$ 13,90/mês sem juros (R$ 166,80/ano).
https://amzn.to/40iJj8P

Publicado

em

Tags:

Comentários

Deixe um comentário

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