Blog do Programador: o que acontece por trás do gamer.ru

content auto translated from {from}

Um breve histórico

O site gamer.ru passou por uma terceira (e talvez até uma quarta) reescrita completa de código. O projeto foi inicialmente escrito em Ruby-on-Rails ainda nos longínquos anos 2000. A arquitetura era monolítica, então cada solicitação do usuário "puxava" uma enorme quantidade de solicitações adicionais ao banco de dados e carregava todas as bibliotecas possíveis. Para garantir o funcionamento do recurso com 100 mil visitantes por dia, foi necessário envolver cinco servidores potentes, usar memcache, Redis e replicar bancos de dados em vários servidores. Isso permitiu, de alguma forma, sobreviver até 2018, quando a empresa começou a enfrentar problemas financeiros e a equipe de desenvolvedores se dispersou.

Cerca de 2020, o site perdeu o certificado SSL. Atualizá-lo se mostrou impossível, pois a versão antiga do Ruby-on-Rails dependia de uma versão antiga do openssl, enquanto os novos certificados exigiam uma versão mais recente. Ninguém se preocupou muito — o site continuou a funcionar, mesmo que mal. Entre 2015 e 2025, o tráfego caiu gradualmente de 100 mil para mil visitantes por dia. Nos blogs e comentários ocultos, começou a aparecer uma enorme quantidade de spam, incluindo conteúdo não muito apropriado. O Yandex perdeu completamente o interesse por nós, e no webmaster havia um painel vermelho cheio de erros críticos.

O que fizemos para corrigir tudo

O site precisava de uma otimização séria, pois a antiga arquitetura já não correspondia à realidade. No banco de dados, havia acumulado cerca de 100 mil posts e 1,6 milhões de comentários, que precisavam ser cuidadosamente transferidos para um novo motor. Decidimos mudar para uma arquitetura de microsserviços tanto no backend quanto no frontend, aproveitando tecnologias modernas, incluindo os modernos HTMLElement's.

O projeto foi completamente reescrito do zero em NodeJS sem o uso de bibliotecas de terceiros, o que nos garante uma vida tranquila nos próximos 10 a 20 anos. Agora, não precisamos temer que a atualização de alguma biblioteca moderna como ExpressJS ou React quebre todo o site e exija uma nova reestruturação em grande escala. Até mesmo o editor visual de posts precisou ser escrito por nós mesmos, já que não encontramos nada pronto que atendesse às nossas modestas demandas. Agora, o motor renderiza páginas HTML para dispositivos antigos e mecanismos de busca, enquanto entrega o conteúdo para os usuários via AJAX.

Hoje, o site suporta com sucesso uma carga média de aproximadamente 150 solicitações por segundo, sendo que a maioria do tráfego é composta por bots de pesquisa e outros crawlers. Especialmente ativos são os bots semrush e openai, que se comportam como se tentassem baixar todo o site em um dia. Se o Yandex nos indexa lentamente, a uma taxa de 1-2 solicitações por segundo, esses sujeitos podem solicitar até 50.

No entanto, o motor foi tão otimizado que todo esse exército de bots é facilmente atendido por uma única máquina virtual barata, custando cerca de 500 rublos por mês.

Claro, periodicamente o site nos lembra de sua presença com erros 502 e 504, que estão sendo progressivamente identificados e corrigidos. Às vezes, descobre-se que alguém esqueceu de adicionar um índice ao banco de dados, outras vezes uma consulta muito complexa precisa ser dividida em várias simples, ou até mesmo falta espaço no servidor. Mas não desistimos — o trabalho continua, e o processo, como dizem, está "sob controle".