PlusPlus

Slack-Bewertungsbot, der 1 Mio. Aktionen pro Minute verarbeitet

von Redwerk neu aufgebaut und verbessert
×
Wohin sollen wir unsere Fallstudie zur Slack-Bot-Entwicklung schicken?
Bitte geben Sie Ihre Geschäfts-E-Mail ein ist keine Geschäfts-E-Mail

PlusPlus ist ein Business-Entertainment-Startup, das Funktionen zur Bewertung aller möglichen Dinge und Benutzer in Slack bietet.

Alle Kunden

Produktentwicklung

PlusPlus kam mit einem bereits in Python entwickelten Produkt zu uns, das einen Wechsel des Technologie-Stacks und Stabilitätsverbesserungen benötigte. Wir haben die Codebasis schnell verstanden und sofort mit der Entwicklung begonnen.

Mehr erfahren

Startups & Innovation

Ideen in Code umsetzen, testen und die Ergebnisse veröffentlichen, Projekte verbessern und pflegen – das ist unser Beitrag zum Glück sowohl von Startup-Unternehmern als auch von Benutzer-Communities.

Mehr erfahren

Herausforderung

PlusPlus ist ein Chatbot für Slack, der für Unterhaltung gedacht ist. Er ermöglicht es, Dinge, die Ihre Freunde in Slack sagen und tun, mit „Plus“, „Minus“ und Bewertungen zu versehen, indem man sich auf Objekte und Benutzer mit „@“ bezieht. Es gibt ein globales Leaderboard und jede Aktion beeinflusst die allgemeinen Ergebnisse.

Die Herausforderung für das Redwerk-Team bestand darin, den bestehenden Bot, der ursprünglich in Python entwickelt wurde, komplett neu zu schreiben und Ruby als Kerntechnologie zu verwenden. Wir mussten auch die Stabilität erhöhen, die Skalierbarkeit ermöglichen und die Gesamtleistung dieses hochbelasteten Projekts optimieren.

Lösung

Wir begannen mit dem wichtigsten Teil – der Code-Refaktorisierung und -Reparatur. Die alte Version des Bots war in Python geschrieben und wir mussten sie auf Ruby portieren, dabei alle zusätzlichen Änderungen berücksichtigen, bestehende Probleme beheben und neue Funktionen implementieren. Als die Infrastruktur geplant wurde, basierten wir unsere Annahmen zur Last auf den durchschnittlichen Statistiken der Nutzung des alten Python-Bots: ca. 500-700 Tausend Benutzeraktionen pro Minute. Wir erweiterten dieses Niveau auf ~1 Million Benutzeraktionen pro Minute, um eine gewisse Reservekapazität zu haben, und führten eine Reihe von Stresstests auf der Staging-Umgebung durch.

Hier trat eine weitere Herausforderung auf. Es stellte sich heraus, dass Slack das Testen auf 1 Nachricht pro Sekunde beschränkt und keine Funktionalität zur Prüfung hochbelasteter Projekte bietet. Die tatsächliche Live-Belastung von PlusPlus zeigte über 20-50 Millionen Aktionen pro Minute, und die bestehende Infrastruktur konnte dies nicht unterstützen. Um die neue Nachfrage zu decken, musste ein großer Teil der Anwendungslogik überarbeitet werden.

Optimierung der Benutzer- und Objektlogik

Das Entwicklungsteam von Redwerk musste sorgfältig alle Lücken und selbst die kleinsten Speicher- und CPU-Nutzungslücken definieren und optimieren. Die tatsächliche Projektlast sendete Millionen von Aktionen, die sowohl @Benutzernamen als auch @Dinge in einer einzigen Zeile enthielten. Objekte erforderten eine fortschrittlichere Logik als Benutzer, da sie geparst, dann überprüft werden mussten, ob sie in der Datenbank existieren, ein neuer Eintrag erstellt werden musste, falls nicht, dann die Bewertung aktualisiert, das Leaderboard und das globale Trending aktualisiert werden mussten. Mit Millionen solcher Aktionen, die meist in einer einzigen Nachricht vorkamen, wurde die Datenbank sehr schnell überlastet, ebenso wie der Speicher und die CPU.

Eine weitere hochbelastete Aufgabe war die Optimierung der Bewertungsaktualisierungen in den Leaderboards, da jede Aktion die Position in den globalen Leaderboards der Benutzer und Objekte beeinflussen musste. Die unglaublich hohe Anzahl an Elementen, die geparst, überprüft und aktualisiert werden mussten, stellte zusätzliche Herausforderungen für die Entwicklung dar.

Um all diese Aktionen zu optimieren, entwickelte unser Team eine Funktionalität, die mehrere CPU-Kerne auf jedem Server nutzt, zusammen mit einem speziellen Bot-Manager, der jeden Bot einem bestimmten Knoten (Server + CPU-Kern) zuweist – eine Art Aufgabe, die der Amazon-Load-Balancer nicht bewältigen konnte. Danach haben wir die Anforderungslogik neu aufgebaut, um die Anzahl der Anfragen zu reduzieren.

Wir sind auch von Ubuntu zu CentOS gewechselt. Ubuntu erlaubte uns nicht, zusätzliche Verbindungen zu einer Datenbank zu erstellen. CentOS bot hingegen eine stabilere Umgebung beim Arbeiten mit MongoDB und unterstützte die übermäßige Aktionslast. Es ermöglichte uns auch, den AWS-Server neu zu konfigurieren und die Kernel-Einstellungen des Betriebssystems auf den Knoten zu aktualisieren, um die Dateideskriptor- und Thread-Limits zu verbessern.

Ergebnis

Das Redwerk-Team konnte den PlusPlus-Bot vollständig neu schreiben. Jetzt funktioniert die Infrastruktur stabil und hat genügend Workarounds und Lösungen, um sie bei Bedarf am Leben zu erhalten und wiederherzustellen. Wir haben auch einen Mechanismus geschaffen, um das Skalieren zu vereinfachen und schnell neue Server hinzuzufügen.

Die Lösung wurde auch mit aktualisierter Übergabedokumentation und einer Schulungssitzung für Kunden bereitgestellt, um das erneuerte System zu handhaben und zu warten.

Add to Slack
Ergebnis

Benötigen Sie eine ordnungsgemäße Ausführung Ihrer Idee?

Kontaktieren Sie uns

Technologien

Ruby on Rails
Redis
AWS
PostgreSQLPostgreSQL
JavaScriptHTML5
SASS
MongoDB
1Mio.+Benutzer insgesamt
500k+aktive Kanäle
4Personen im Entwicklungsteam
5Monate bis zur Fertigstellung
19,889 Codezeilen

Redwerk Team Kommentare

Alex

Alex
Entwickler

Die Herausforderung für das Redwerk-Team bestand darin, den bestehenden Bot, der ursprünglich in Python entwickelt wurde, komplett neu zu schreiben und Ruby als Kerntechnologie zu verwenden. Wir mussten auch die Stabilität erhöhen, die Skalierbarkeit ermöglichen und die Gesamtleistung dieses hochbelasteten Projekts optimieren.

Media
Media
Media
Media

Verwandt im Blog

Typische Fehler bei der Arbeit mit einer Datenbank in Ruby on Rails

Typische Fehler bei der Arbeit mit einer Datenbank in Ruby on Rails

Wenn wir "Ruby" hören, assoziieren wir es häufig mit "Ruby on Rails". Rails ist ein sehr funktionales und beliebtes Framework, das weit verbreitet für den Aufbau von APIs und Webanwendungen genutzt wird. Rails besteht aus unabhängigen Gems und ActiveRecord ist eines davon. Dieses...

Beeindruckt?

Kontaktieren Sie uns

Andere Fallstudien

Adfectious

Adfectious

Rumänien

Entwickelte ein mobiles Werbesystem, inspiriert von Googles AdMob, das auf beliebten rumänischen Medien wie meteoromania.ro verwendet wird

Cleanagents

Cleanagents

Deutschland

Wir haben diese Android-App entwickelt, die selbständige Reinigungskräfte in Deutschland und Österreich unterstützt. Die App wurde schnell von Helping.de übernommen.

Akamai Closed Captioning Fix

Akamai Closed Captioning Fix

Vereinigte Staaten

Hilfe für WorldNow bei der Lösung des Problems verlorener Untertitel während des Live-Streamings, was das Fernseherlebnis für ein Millionenpublikum in den USA verbessert