URL: https://linuxfr.org/news/architecture-logicielle-de-la-nouvelle-version-de-linuxfrorg Title: Architecture logicielle de la nouvelle version de LinuxFr.org Authors: Bruno Michel Benoît Sibaud Date: 2011年02月23日T16:59:25+01:00 Tags: linuxfr, rails, redis, pubsub, markdown, avatar et templeet Score: 90 La nouvelle version de LinuxFr.org est en ligne depuis quelques jours. Vous nous remontez régulièrement des bugs et des propositions d'améliorations dans le suivi. Je vous encourage à continuer et à commenter / voter sur les entrées qui vous intéressent. Voici quelques entrées sur lesquelles j'aimerais particulièrement avoir vos retours : * Pour ou contre [le respect de la syntaxe Markdown](http://linuxfr.org/suivi/retour-%C3%A0-la-ligne-ne-fonctionne-plus) pour les retours à la ligne ? * Quels services devrait-on prendre en charge pour [les avatars](http://linuxfr.org/suivi/int%C3%A9gration-avec-un-service-non-libre) ? Certains d'entre vous utilisent-ils [pavatar](http://www.pavatar.com/) ? * Que pensez-vous des [polices utilisées](http://linuxfr.org/suivi/police-helvetica-pas-bon-choix) ? Je pense que vous êtes également intéressés par l'architecture logicielle de cette nouvelle version. Vous pourrez donc trouver quelques explications à son sujet en seconde partie et n'hésitez pas à poser des questions dans les commentaires. ---- [Proposer une entrée dans le suivi (bug ou amélioration)](http://linuxfr.org/suivi/nouveau) [Consulter les entrées du suivi](http://linuxfr.org/suivi) [DLFP : La nouvelle version de LinuxFr.org](http://linuxfr.org/news/nouvelle-version-de-linuxfrorg--2) ---- Nous disposons d'un seul serveur avec 4 CPUs et 8 Go de RAM. Sur celui-ci, nous faisons tourner plusieurs [vservers](http://linux-vserver.org), tous sous [Debian](http://www.debian.org/) : * **prod** qui héberge le site web public * **main** pour tout ce qui concerne les mails et les services associés (listes de discussions, anti-spam, etc.) * **alpha** qui servait pour la version alpha (et qui d'ailleurs, la fait toujours tourner) * **web** qui hébergeait la version templeet de LinuxFr.org * et d'autres qui ne sont plus très utilisés. Sur prod, les requêtes [[HTTP]] entrantes sont traitées par [nginx](http://wiki.nginx.org/Main). Il sert directement les fichiers statiques mais ne fait que proxifier les requêtes vers les pages dynamiques. Celles-ci sont prises en charge par le serveur applicatif [Unicorn](http://unicorn.bogomips.org/). Unicorn fait tourner l'application principale, développée avec le framework [Ruby on Rails](http://rubyonrails.org/). Pour ceux qui en doutaient, Ruby on Rails est parfaitement capable de tenir la charge que représente le trafic de LinuxFr.org. Les [statistiques du serveur](http://linuxfr.org/images/load/load-week.png) montrent que le serveur ne travaille pas plus (et même un peu moins) que lorsque le site utilisait [templeet](https://web.archive.org/web/20110221132852/http://www.templeet.org/) (NdM: lien édité en 2021 pour pointer sur la version archive.org de l'époque), framework PHP pourtant réputé pour ses performances. Le code est versionné avec [git](http://git-scm.com/). Le dépôt principal se trouve actuellement sur [GitHub](https://github.com/) mais nous pensons ramener celui-ci sur notre serveur, le dépôt GitHub deviendrait alors un simple miroir. Les déploiements se font avec [capistrano](https://github.com/capistrano/capistrano/wiki) et [bundler](http://gembundler.com/) ce qui permet de gérer les versions des dépendances. Derrière, nous utilisons deux bases de données : [MySQL](http://dev.mysql.com/) et [Redis](http://redis.io/). Les données importantes (comptes utilisateur, dépêches et autres contenus, commentaires, etc.) sont stockés dans MySQL. Redis sert à plusieurs choses : * pour enregistrer des données transitoires (par exemple, on conserve pendant 24h l'adresse IP d'une personne ayant voté sur un sondage pour éviter qu'elle ne vote plusieurs fois) ; * du cache : des morceaux de certaines pages sont mis en cache pour ne pas avoir à les recalculer à chaque requête ; * du [pub/sub](http://en.wikipedia.org/wiki/Publish/subscribe). Ce pub/sub sert à notifier des scripts que certains événements ont eu lieu. Pour le moment, il n'y a qu'un seul script : [board](https://github.com/nono/Board-LinuxFr.org). C'est un daemon en Ruby qui fonctionne avec la bibliothèque [EventMachine](http://rubyeventmachine.com/). Il sert sur la tribune et l'espace de rédaction de dépêches à pousser les derniers changements aux utilisateurs qui affichent la page en question. Par exemple, si vous allez sur [la tribune](http://linuxfr.org/board), votre navigateur va initier une connexion HTTP vers Board. Dès que quelqu'un parlera sur cette tribune, l'application principale l'indiquera sur le pub/sub de redis, Board en est ainsi notifié et peut vous envoyer ce message en réponse de la requête HTTP. Puisque nous avons évoqué le javascript, sachez que nous utilisons [jquery](http://jquery.com/) avec quelques greffons, [IE9.js](http://code.google.com/p/ie7-js/), une bibliothèque qui essaye de combler certaines déficiences d'Internet Explorer, et [markItUp](http://markitup.jaysalvat.com/home/) pour les éditeurs de texte enrichis. Tout le javascript est minifié avec [jammit](http://documentcloud.github.com/jammit/) pour optimiser le temps de chargement des pages. Enfin, il reste la glue, tous ces petits scripts qui tournent à gauche à droite pour faire diverses tâches. Par exemple, nous avons une crontab qui lance chaque nuit un script pour mettre à jour le [karma](//linuxfr.org/aide#aide-karma) des utilisateurs et renouveler le stock des avis. Cela inclut également tous les scripts d'administration système comme ceux pour mettre à jour les graphes de charge.