Tarantool: Analysten-Look

Hallo alle zusammen! Ich heiße Andrey Kapustin. Ich arbeite als Systemanalytiker bei der Mail.ru Group. Unsere Produkte bilden ein einziges Ökosystem für den Benutzer, in dem Daten viele unabhängige Infrastrukturen generieren: Bestelldienste für Taxis und Lebensmittel, Postdienste, soziale Netzwerke. Je schneller und genauer wir heute die Bedürfnisse des Kunden vorhersagen können, desto schneller und genauer können wir ihm unsere Produkte anbieten.

Viele Systemanalysten und Ingenieure stellen jetzt Fragen:

  1. Wie entwerfe ich eine Trigger-Plattform-Architektur für Echtzeit-Marketing?
  2. Wie organisiere ich eine Datenstruktur, die die Anforderungen einer Marketingstrategie für die Interaktion mit Kunden erfüllt?
  3. Wie kann ein stabiler Betrieb eines solchen Systems unter sehr hohen Belastungen sichergestellt werden?

Diese Systeme basieren auf der Verarbeitung und Analyse von Big Data unter hoher Last. In diesen Bereichen haben wir umfangreiche Erfahrungen gesammelt. Als Beispiel für eine echte Geschichte erzähle ich Ihnen von unserem Ansatz zur Analyse und Entwicklung von Lösungen im Bereich Echtzeit-Marketing mit Tarantool.

Einmal kam ein großer Telekommunikationsbetreiber zu uns um Hilfe.

Die Aufgabe war folgende:

Wir haben mehr als 100 Millionen Abonnenten. Wir wissen viel über sie: aktuelle Bilanz, Verkehrsaufkommen, verbundene Dienste, Reisen, Lieblingsorte. Wir verwenden die Informationen so gut wir können: Wir sammeln tagsüber Daten und speichern riesige Mengen an Informationen im Repository (DataLake). Wir starten die Handler nachts, erstellen morgens Werbekampagnen und versenden Angebote.

Und wir wollen dasselbe in Echtzeit tun!

Warum? Denn je schneller der Telekommunikationsbetreiber die Informationen verarbeitet, desto mehr Geld kann er verdienen. Zum Beispiel bei Impulskäufen: Ein Benutzer geht zur Mittagszeit an einem Café vorbei, und dann kommt ein Rabatt auf sein Telefon, sodass er dieses bestimmte Café auswählt. Das heißt, Sie müssen "nur" das richtige Produkt zur richtigen Zeit anbieten und dabei helfen, auf bequeme Weise sofort auf das Angebot zu reagieren.



Was Sie zur Lösung eines Geschäftsproblems benötigen:

  • Sie können den Bedarf über das Kundenprofil ermitteln.
  • Bestimmen Sie den Moment - nach menschlichen Lebensereignissen.
  • Anregung des Feedbacks - Auswahl des optimalen Kommunikationskanals.

Dies wird als Echtzeit-Marketing bezeichnet. In Bezug auf den Telekommunikationssektor können relevante personalisierte Nachrichten zum richtigen Zeitpunkt an Abonnenten gesendet werden, um SOFORT auf ein Angebot reagieren zu können. Vorschläge können sowohl für die Zielgruppe als auch für einen bestimmten Benutzer erstellt werden, während die Anforderung in jedem Fall in Echtzeit verarbeitet werden sollte.

Aus technischer Sicht müssen wir folgende Probleme lösen:

  • Aktuelle Daten von mehr als 100 Millionen Abonnenten;
  • Echtzeit-Ereignisflussverarbeitung bei einer Last von 30.000 RPS;
  • Bildung und Weiterleitung gezielter Angebote an Abonnenten unter Erfüllung nicht funktionaler Anforderungen (Reaktionszeit, Verfügbarkeit usw.);
  • Nahtlose Verbindung neuer Quellen heterogener Daten durch Abonnenten.

"Echtzeit" bedeutet in diesem Fall, Informationen in 30 Sekunden zu verarbeiten. Es ist länger sinnlos, der Moment wird verpasst, der Kunde ist weg. Und das Traurigste ist, dass in einer solchen Situation nicht klar sein wird, warum (?) - haben wir das Falsche vorgeschlagen oder es nicht rechtzeitig geschafft?

Die Antwort auf diese Frage ist für die Produktentwicklung sehr wichtig:

  1. Marketingförderung Ihrer Produkte: Hypothesen testen, Umsatz steigern.
  2. Wir ziehen potenzielle Kunden an: Wir investieren in Werbung, wir erobern den Markt.
  3. Wir verbinden zusätzliche Dienstleistungen oder Dienstleistungen: Wir erweitern die Produktlinie.

Es ist leicht, in jeder Phase Fehler zu machen. Und der Preis für Fehler ist großartig. Wir müssen schnell und genau schlagen! Dazu müssen die Kundeninformationen vollständig und aktuell sein. In diesem Fall sind die Informationen das Geld wirklich wert!

Denn je mehr wir über unsere Kunden wissen, desto mehr werden wir verdienen. Dies bedeutet, dass das Hinzufügen jedes neuen Parameters zum Clientprofil die Genauigkeit des Targetings erhöht. Dies ist jedoch ein fortlaufender Prozess, weil:

  1. Der Kundenstamm wächst stetig.
  2. Das Leistungsspektrum erweitert sich.

Unter solchen Bedingungen ist es sehr effektiv, den Kundenstamm zu segmentieren. In diesem Fall wurde beschlossen, den Schichtungsmechanismus zu verwenden - die multivariate Klassifizierung von Abonnenten.

Einfach ausgedrückt, unterscheiden wir bestimmte Gruppen von Abonnenten (Schichten) durch Wertebereiche einer unbegrenzten Anzahl von Attributen. In diesem Fall sollte der Abonnent die Schicht sofort nach dem Übergang des Attributwerts in den entsprechenden Bereich automatisch ändern.

Die folgende Abbildung ist ein Beispiel für ein dreidimensionales Modell der Schichtung von Kindheit an. Ein Ball ist ein Abonnent.



Für jeden Kunden können wir berechnen, wie viel er ausgegeben hat, um ihn anzuziehen, wie viel er verdient hat und wie. Das heißt, wir wissen, wie viel Informationen kosten und wie viel wir verlieren, wenn wir sie nicht aktualisieren.

Sie zählten und entschieden - es ist notwendig zu aktualisieren! Und sofort treten Probleme auf: Es fehlt immer etwas. In jedem Projekt kommen neue Anforderungen vom Kunden, die TK, Architektur, einander und ... gesundem Menschenverstand widersprechen. Die Aufrechterhaltung der Datenintegrität und -relevanz wird von Tag zu Tag schwieriger. Neue Informationsquellen werden mit neuen Attributen angezeigt, deren Speicherort und Verarbeitung unklar sind.

Es sollte bedacht werden, dass die normalisiertenDaten, je mehr Einschränkungen, Verzeichnisse, checken sie ein. Jeder, der versucht hat, der Tabelle „unterwegs“ ein paar Felder hinzuzufügen, weiß, was für ein „Maler“ das ist: Es passt nicht in das aktuelle Datenmodell! Und wie kann der Kunde erklären, dass Sie, wenn Sie ein neues Feld hinzufügen, die Hälfte des Projektcodes neu schreiben müssen ?! Wir "kollabieren" oder "verwerfen" die "zusätzlichen" Analysen am Eingang und können daher keine relevanten Angebote erstellen.

Westliche Kollegen nennen diesen Effekt "Shit in - Shit out".

Infolgedessen nehmen Daten mehr Platz ein und sind schwieriger zu verarbeiten. Mit zunehmender Informationsmenge wird dies kritisch, da die Transaktionsverarbeitungsgeschwindigkeit abnimmt. Unser Ziel ist es, jede Anfrage nicht länger als eine Minute mit einer Last von 30.000 Anfragen pro Sekunde zu bearbeiten.

Fazit: Für Echtzeit-Marketing, NormalisierungNicht für mehr als 100 Millionen Abonnenten geeignet .

Wir haben eine Lösung in Form eines universellen Kundenprofils gefunden. Es liegt im Schlüsselwertspeicher, daher können wir die Datenstruktur nicht reparieren. Jede Spalte ist ein Schlüssel und ein Wert, der alles sein kann.

Wir haben eine Kombination aus:

  • Statische Attribute, die selten aktualisiert werden (Name, Reisepass, Adresse). Obligatorischer Block mit ID.
  • Und ein dynamischer Schwanz beliebiger Länge - häufig aktualisierte Daten, die von der Quelle abhängen. Mehrere unabhängige Blöcke für jede Quelle.

Dieser Ansatz wird Denormalisierung genannt. Wie bequem ist es?

  1. Der "Schwanz" kann nicht validiert werden.
  2. Wir speichern die "Rohdaten" unverändert.
  3. Wir speichern alle eingehenden Informationen, wir verlieren nichts.
  4. ID , .
  5. ( 2-3 ), .
  6. : .


Jetzt müssen Sie ein Tool für die Implementierung auswählen. Dies erfolgt normalerweise durch den Architekten gemäß den Anforderungen, die der Analyst zusammengestellt hat. Es ist sehr wichtig, die NFT herauszufinden - die erwartete Datenmenge und das Lastniveau. Es hängt davon ab, welche Methoden zur Datenspeicherung und -verarbeitung wir verwenden werden.

Die Überschrift dieses Kapitels weist darauf hin, dass unser Service viele Daten verarbeiten wird. Und viel - wie viel? Lass es uns herausfinden.

Daten können als groß angesehen werden, wenn die Beziehung für sie mit bloßem Auge nicht sichtbar ist.

Wir verarbeiten mehr als 100 Millionen verschiedene Kundenprofile, die unstrukturierte Informationen enthalten, häufig aktualisiert und verwendet werden - das sind echte Big Data.

Sie müssen aktuelle Kundenprofile zwischenspeichern. Ohne das Speichern heißer Daten im RAM kann keine Echtzeitverarbeitung erreicht werden.

Hohe Belastung


Nun werden wir uns mit der Lastintensität befassen, dh mit der Anzahl der Anfragen. Der Begriff "hohe Last" wird verwendet, um Situationen zu beschreiben, in denen das Gerät der Last nicht mehr standhält.

Wir verarbeiten verschiedene Arten von Ereignissen, die kontinuierlich mit einer Intensität von 10 bis 30.000 Anfragen pro Sekunde auftreten. In diesem Fall wird eine komplexe Geschäftslogik verwendet, und die Reaktionsgeschwindigkeit ist kritisch. Offensichtlich entwerfen wir einen hoch ausgelasteten Dienst, der je nach sofortiger Auslastung dynamisch skaliert werden sollte.

Tarantool als Beschleuniger


Wir von der Mail.ru Group verwenden Tarantool, um solche Probleme zu lösen. Auf Habré wurde viel darüber gesagt, wie es "unter der Haube" aufgebaut ist. Ich werde mich nicht wiederholen. Ich erinnere mich nur an die wichtigsten Punkte:

Tarantool ist ein In-Memory-DBMS und ein Anwendungsserver in einer Flasche.

Wenn Sie mit einer großen Datenmenge arbeiten, empfiehlt es sich, diese auf zwei Arten zu verwenden:

  1. Als Datenpräsentation zum Zwischenspeichern von Informationen im RAM, um den Zugriff zu beschleunigen.
  2. Als Anwendungsserver zur Datenverarbeitung nach festgelegten Regeln.

Das heißt, die Geschäftslogik wird neben den Daten gespeichert, was für hoch ausgelastete Dienste von entscheidender Bedeutung ist. In unserem Projekt haben wir Tarantool als „intelligente“ Datenspeicherfront mit integrierter Geschäftslogik verwendet, nach der der eingehende Strom von Ereignissen und Informationen im laufenden Betrieb verarbeitet wird.

Warum Tarantool für RTM wirksam ist:

  1. Hot Data Caching. Das Client-Profil wird im Speicher zwischengespeichert, sodass es immer auf dem neuesten Stand ist.
  2. Komplexes Echtzeit-Computing. Persönliche Angebote an Kunden werden für jede Veranstaltung in Echtzeit erstellt.
  3. Fehlertolerante und skalierbare Lösung:

In unserem Projekt gibt es zwei offensichtliche Risiken:

  1. , . — Tarantool c , .
  2. , . , . , . , . d.h. Verteilen Sie 100 Millionen Datensätze der Clientprofiltabelle auf mehrere Shards, um die Abfrageverarbeitung zu parallelisieren und so die Belastung des Datensatzes zu verringern. Das einfachste Beispiel besteht darin, die Kundenprofiltabelle durch den Bereich der ID-Werte zu teilen. Um dieses Problem zu lösen, bietet Tarantool horizontale Skalierungswerkzeuge. Weitere Informationen finden Sie beispielsweise im Artikel „ Tarantool-Kassette: Sharding des Lua-Backends in drei Zeilen “.

Fazit


Tarantool ersetzt weder Oracle noch andere Analyse-Repositorys. Gleichzeitig ist es effektiv, um eine große Datenmenge in Echtzeit zu verarbeiten. Wir haben die Aufgabe des Kunden innerhalb der vereinbarten Bedingungen und des Projektbudgets erfolgreich gelöst. Ich empfehle daher, mit diesem Tool zu experimentieren, wenn Sie hoch ausgelastete Services erstellen.

All Articles