PlusPlus

Bot Slack de notation traitant 1 million d'actions par minute

reconstruit et amélioré par Redwerk
×
Où souhaitez-vous que nous envoyions notre étude de cas sur le développement de bots Slack ?
Veuillez saisir votre adresse courriel professionnelle n'est pas un courriel professionnel

PlusPlus est une startup de divertissement d'entreprise qui fournit des fonctionnalités pour noter toutes sortes de choses et d'utilisateurs dans Slack.

Tous les clients

Développement de produit

PlusPlus est venu à nous avec un produit déjà développé en Python, qui nécessitait un changement de pile technologique et des améliorations de stabilité. Nous avons rapidement compris la base de code et avons commencé le développement dès le premier jour.

En savoir plus

Startups & Innovation

Transformer les idées en code, tester et publier les résultats, améliorer et maintenir les projets est notre contribution au bonheur des entrepreneurs de startups et des communautés d'utilisateurs.

En savoir plus

Défi

PlusPlus est un chatbot pour Slack conçu pour le divertissement. Il permet de plus, moins et noter les choses que vos amis disent et font sur Slack en s’adressant aux objets et aux utilisateurs avec ‘@’. Il dispose d’un classement mondial et chaque action affecte les résultats généraux.

Le défi pour l’équipe Redwerk était de réécrire complètement le bot existant, développé à l’origine en Python, en utilisant Ruby comme technologie principale. Nous avons également été chargés d’augmenter la stabilité, de permettre la mise à l’échelle et d’optimiser les performances globales de ce projet à forte charge.

Solution

Nous avons commencé par la partie la plus importante — la refactorisation et la correction du code. L’ancienne version du bot était écrite en Python et nous devions la porter vers Ruby, en tenant compte de tous les changements supplémentaires que cela pourrait impliquer, en corrigeant les problèmes existants et en implémentant de nouvelles fonctionnalités. Lors de la planification de l’infrastructure, nous avons basé nos hypothèses sur la charge moyenne d’utilisation de l’ancien bot Python : environ 500 à 700 000 actions utilisateur par minute. Nous avons étendu ce niveau jusqu’à environ 1 million d’actions utilisateur par minute afin d’avoir une capacité de réserve et avons effectué une série de tests de charge sur staging.

Et c’est là qu’un autre défi est apparu. Il s’est avéré que Slack limite les tests à 1 message par seconde et ne dispose pas de la fonctionnalité pour tester des projets à forte charge. La charge réelle en production de PlusPlus a montré plus de 20 à 50 millions d’actions par minute, et l’infrastructure existante ne pouvait pas la supporter. Pour répondre à cette nouvelle demande, une grande partie de la logique de l’application a dû être retravaillée.

Optimisation de la logique des utilisateurs et des objets

L’équipe de développement de Redwerk a dû définir et optimiser soigneusement toutes les lacunes, même les plus petites fuites de mémoire et d’utilisation du CPU. La charge réelle du projet envoyait des millions d’actions contenant à la fois des @usernames et des @things sur une seule ligne. Les objets nécessitaient une logique plus avancée que les utilisateurs, car il fallait les analyser, vérifier s’ils existaient dans la base de données, en créer une nouvelle entrée s’ils n’existaient pas, puis mettre à jour le score, le classement et les tendances globales. Avec des millions d’actions de ce type, dont la plupart se produisant au sein d’un seul message, cela surchargeait très rapidement la base de données, ainsi que la mémoire et le CPU.

Une autre tâche à forte charge consistait à optimiser les mises à jour de scores dans les classements, car chaque action devait influencer la position dans les classements globaux des utilisateurs et des objets. L’incroyable quantité d’éléments qui devaient être analysés, vérifiés et mis à jour, a créé des défis supplémentaires pour le développement.

Afin d’optimiser toutes ces actions, notre équipe a développé une fonctionnalité qui utilise plusieurs cœurs de CPU sur chaque serveur, ainsi qu’un Bot Manager spécifique, qui achemine chaque bot vers un nœud spécifique (Serveur + cœur CPU) — un type de tâche qu’un Amazon load balancer ne pouvait pas gérer. Après cela, nous avons reconstruit la logique des requêtes pour réduire le nombre de requêtes.

Nous sommes également passés d’Ubuntu à CentOS. Ubuntu ne nous permettait pas de créer des connexions supplémentaires à une base de données. CentOS, quant à lui, offrait un environnement plus stable lors du travail avec MongoDB et supportait la charge d’actions excessive. Il nous a également permis de reconfigurer les serveurs AWS et de mettre à jour les paramètres du noyau du système d’exploitation sur les nœuds pour améliorer les limites de descripteurs de fichiers et de threads.

Résultat

L’équipe Redwerk a réussi à réécrire complètement le bot PlusPlus. Son infrastructure fonctionne désormais de manière stable et dispose de suffisamment de solutions de contournement et de procédés pour le maintenir en ligne et le restaurer si nécessaire. Nous avons également créé un mécanisme pour simplifier la mise à l’échelle et ajouter rapidement de nouveaux serveurs.

La solution a également été accompagnée d’une documentation de transfert mise à jour et d’une session de formation pour les clients sur la manière de gérer et de maintenir le système renouvelé.

Résultat

Besoin d'une exécution soignée de votre idée ?

Contactez-nous

Technologies

Ruby on Rails
Redis
AWS
PostgreSQLPostgreSQL
JavaScript
HTML5
SASS
MongoDB
1m+utilisateurs au total
500k+canaux actifs
4personnes dans l'équipe de développement
5mois pour l'achèvement
19,889lignes de code

Commentaire de l'équipe Redwerk

Alex

Alex
Développeur

Le défi pour l'équipe Redwerk était de réécrire complètement le bot existant, développé à l'origine en Python, en utilisant Ruby comme technologie principale. Nous avons également été chargés d'augmenter la stabilité, de permettre la mise à l'échelle et d'optimiser les performances globales de ce projet à forte charge.

Media
Media
Media
Media

Articles similaires dans le blog

Erreurs courantes lors du travail avec une base de données en Ruby on Rails

Erreurs courantes lors du travail avec une base de données en Ruby on Rails

Lorsque nous entendons « Ruby », nous l'associons souvent à « Ruby on Rails ». Rails est un framework très fonctionnel et populaire, largement utilisé pour la création d'API et d'applications web. Rails est composé de gems indépendantes, et ActiveRecord en fait partie. Cette puis...

En savoir plus

Impressionné ?

Contactez-nous

Autres études de cas

Adfectious

Adfectious

Roumanie

Développement d'un système de publicité mobile inspiré de Google AdMob et utilisé sur des sites roumains populaires comme meteoromania.ro

Cleanagents

Cleanagents

Allemagne

Nous avons développé cette application Android qui prend en charge les nettoyeurs indépendants en Allemagne et en Autriche. L'application a été rapidement acquise par Helping.de.

MyJiraBot

MyJiraBot

Europe

Idéation, développement et lancement de ce bot Telegram pour Jira, utilisé par plus de 50 entreprises dans le monde