Blog du programmeur : que se passe-t-il sous le capot de gamer.ru
Petit aperçu historique
Le site gamer.ru subit déjà sa troisième (voire même quatrième) réécriture complète de son code. À l'origine, le projet a été écrit en Ruby-on-Rails dans les lointains années 2000. L'architecture était monolithique, donc chaque requête utilisateur entraînait un énorme nombre de requêtes supplémentaires à la base de données et le chargement de toutes les bibliothèques possibles. Pour assurer le bon fonctionnement de la ressource avec 100 000 visiteurs par jour, il a fallu mobiliser pas moins de cinq serveurs puissants, utiliser des memcaches, Redis et répliquer les bases de données sur plusieurs serveurs. Cela a permis de tenir tant bien que mal jusqu'en 2018, jusqu'à ce que l'entreprise connaisse des problèmes financiers et que l'équipe de développeurs se disperse.
Vers 2020, le site a perdu son certificat SSL. Il s'est avéré impossible de le mettre à jour car l'ancienne version de Ruby-on-Rails dépendait d'une ancienne version d'openssl, tandis que les nouveaux certificats nécessitaient une version plus récente. Personne ne s'inquiétait vraiment - le site continuait à fonctionner tant bien que mal. Entre 2015 et 2025, l'affluence a progressivement chuté de 100 000 à 1 000 visiteurs par jour. De nombreux messages de spam, y compris de contenu peu approprié, ont commencé à apparaître dans des blogs cachés et des commentaires. Yandex a complètement perdu tout intérêt pour nous, et dans la Search Console, il y avait un océan rouge d'erreurs critiques.
Ce que nous avons fait pour tout corriger
Le site avait besoin d'une optimisation sérieuse, car l'ancienne architecture ne correspondait plus à la réalité. Dans la base, environ 100 000 publications et 1,6 million de commentaires s'étaient accumulés, qu'il fallait soigneusement transférer vers le nouveau moteur. Nous avons décidé de passer à une architecture microservices tant pour le backend que pour le frontend, en utilisant des technologies modernes, y compris les fameux HTMLElement.
Le projet a été entièrement réécrit à partir de zéro en NodeJS sans utiliser de bibliothèques tierces, ce qui nous garantit une tranquillité d'esprit pour les 10 à 20 prochaines années. Maintenant, nous n'avons plus à craindre qu'une mise à jour d'une bibliothèque tendance comme ExpressJS ou React casse tout le site et nécessite un autre important refactoring. Même l'éditeur visuel des publications a dû être écrit par nos soins, car nous n'avons trouvé rien de prêt qui correspondait à nos modestes demandes. Maintenant, le moteur génère des pages HTML pour les anciens appareils et les moteurs de recherche, et fournit le contenu aux utilisateurs via AJAX.
À ce jour, le site gère avec succès une charge moyenne d'environ 150 requêtes par seconde, dont la majeure partie du trafic est constituée de robots d'indexation et d'autres crawlers. Les robots semrush et openai se comportent particulièrement activement, agissant comme s'ils essayaient de télécharger tout le site en une journée. Si Yandex nous indexe lentement, à raison de 1 à 2 requêtes par seconde, ces compagnons peuvent parfaitement demander 50.
Cependant, le moteur est devenu si optimisé que tout cet armée de bots est facilement gérée par une seule machine virtuelle peu coûteuse, coûtant environ 500 roubles par mois.
Bien entendu, de temps en temps, le site nous rappelle à lui avec des erreurs 502 et 504, qui sont progressivement identifiées et corrigées. Parfois, il s'avère que quelqu'un a oublié d'ajouter un index à la base de données, parfois une requête trop complexe doit être répartie en plusieurs requêtes simples, et parfois il y a tout simplement plus d'espace sur le serveur. Mais nous ne renonçons pas - le travail continue, et le processus, comme on dit, est « sous contrôle ».