Nous venons de publier une nouvelle image de conteneur qui sera utilisée lors de votre prochaine commande ./launcher rebuild app. Comme toujours, aucune modification de votre configuration n’est nécessaire si vous avez suivi notre installation standard officielle de Discourse. Cela dit, de nouvelles fonctionnalités devraient aider certaines installations.
Redis 6
Nous utilisons massivement Redis à de nombreux endroits dans Discourse, que ce soit pour le cache, Sidekiq, MessageBus, les verrous distribués ou la limitation du débit. Dans l’ensemble, cela a été un choix extrêmement fiable pour nous.
Cependant, dans certains cas de charge très spécifiques, Redis peut devenir un goulot d’étranglement. En raison de son architecture monothreadée, couplée à notre incapacité à utiliser plusieurs instances en raison de nos scripts LUA, il s’agissait d’un goulot d’étranglement difficile à contourner.
Heureusement, Redis 6 prend en charge l’utilisation d’un pool de threads pour les opérations d’E/S, et lors de nos tests, cela fonctionne très bien avec les clusters Discourse limités par Redis.
Ainsi, si vous exécutez sur une machine disposant de nombreux cœurs CPU et que vos métriques montrent que Redis peine à gérer la charge, vous pouvez désormais opter pour l’utilisation de threads pour les opérations d’écriture via la section des paramètres du fichier app.yml :
params:
redis_io_threads: "4" # 1 désactive cette option, n>1 utilise n-1 threads supplémentaires pour les écritures E/S
Image plus légère
Nous avions opté pour publier une image de conteneur volumineuse au début du projet afin de faciliter l’exécution de Discourse pour les personnes non techniques et de gérer toutes les dépendances nécessaires, le versionnement, les mises à niveau, etc.
Cela dit, nous avons récemment dépassé 1 Go pour l’image compressée, ce qui était un peu trop.
Afin de mitiger la taille croissante de l’image, nous avons déplacé le code source de Discourse à l’intérieur de l’image : d’une copie complète du code source vers un « clone léger » ne contenant que la version la plus récente du code.
Cette modification réduit la taille de l’image compressée de 25 %, ce qui se traduit par un besoin moindre en espace serveur et des reconstructions plus rapides lorsqu’une nouvelle image est publiée. Cela devrait également limiter la croissance de l’image au fil du temps.
Nous l’avons testé sur les environnements tests-passés/beta/stable, avec des reconstructions et des mises à jour web, et cela ne rompt aucun chemin standard. Cependant, les utilisateurs effectuant des manipulations git plus exotiques via les hooks app.yml devront peut-être adapter leurs personnalisations.