Wenn Sie unsere Geschäfte öfter als einmal im Jahr für Sportartikel oder Kleidung besuchen, haben Sie höchstwahrscheinlich unsere Clubkarte (blau, silber oder gold). Mein Name ist Maxim, ich bin der stellvertretende Direktor der Abteilung für Softwareentwicklung, -implementierung und -wartung. In diesem Beitrag werden wir mit Kollegen über die Einrichtung des Sportmaster-Clubprogramms sprechen, über die Sammlung von Rechen, die wir dabei gesammelt haben, und darüber, wie sich unser Clubprogramm von den üblichen Rabattkarten anderer unterscheidet Handelsnetzwerke.

Dann
Das Jahr 2004 war auf dem Hof. Was passierte, war das Clubprogramm von Sportmaster und jeweils 27 Rubel. Was nicht war - normales Internet vor Ort und stabile Kommunikationskanäle in Geschäften.
In diesen Jahren haben wir selbst ein Treue-System geschrieben, mit dem normalerweise die Bonuspunkte jedes Benutzers erfasst werden können. Da wir damals im Gegensatz zu den Datenverarbeitungsbetrieben bereits viele Geschäfte hatten, befand sich unsere gesamte Bonusdatenbank in einer Datei, die einfach an die Geschäfte gesendet und vor Ort gewartet wurde, und die Änderungen für diesen Tag wurden zurückgegeben. Dies war übrigens der Hauptgrund dafür, dass Boni nur am Tag nach dem Kauf ausgegeben werden können und nicht die Anforderungen des Unternehmens und die Bereitstellung von Kundenretouren - während des Tages hatte all dies einfach keine Zeit, um ordnungsgemäß aktualisiert und nachgezählt zu werden.
Mit anderen Worten, zu diesem Zeitpunkt könnten die Boni anfangen zu arbeiten und im Allgemeinen am fünften Tag - bis diese Tabelle mit den neu berechneten Boni alle Geschäfte erreicht.
Die Karten selbst funktionierten ganz einfach - jede Karte sammelte einfach eine bestimmte Anzahl von Boni, die der Besitzer freudig und mit Gefühl ausgeben konnte. Das heißt, für die Basis sah es einfach aus, grob gesagt, eine Karte - eine Ziffer. Mit Goldkarten war es etwas komplizierter - neben der Anzahl mit Boni gab es auch Servicepunkte. Zu diesem Zeitpunkt haben Sie ein Fahrrad gekauft und nach sechs Monaten wollten Sie die Kette festziehen, die Bremsen überprüfen, die Glocke begann Ihre Seele zu wärmen und Passanten usw. abzuschrecken (oder Schlittschuhe für die neue Saison zu schärfen und zum Beispiel das Snowboard zu reparieren).
Gleichzeitig wurden die Boni mit der Kraft einer auf natürlicher Intelligenz basierenden Lösung berechnet. Wir hatten einen speziellen Mitarbeiter, der eine Auswahl schrieb und eine Auswahl traf, dann Boni in eine spezielle Platte einfügte und das System diese Platte hochzog. Und ja, wenn diese Person plötzlich beschloss, ein wenig zu jubeln oder was auch immer - einige Kunden könnten in diesen schwierigen Tagen ohne Boni bleiben.
Natürlich war diese Situation für Unternehmen ziemlich teuer, und tatsächlich war sie gefährlich und unvorhersehbar, und das Unternehmen wollte das System auf normale (automatische) Schienen übertragen.
Zuerst haben wir uns entschlossen, den Markt zu studieren. Wir haben festgestellt, dass es mehrere hervorragende Systeme mit großartigen Funktionen und Preisschildern gibt, die diesen Funktionen überlegen sind. Darüber hinaus sollte mit einem solchen Lizenzierungssystem, nach dem es Bestechungsgelder nicht nur für die Nutzung von Kapazitäten oder für die Software selbst, sondern für jeden aktiven Benutzer in einem solchen Bonussystem sammeln sollte. Was konnte nur die Autoren des Systems freuen. Aber unser Geschäft war traurig.
Das zweite Problem war auch die Tatsache, dass mit dem Wachstum des Kundenstamms und der Anzahl der Filialen eine Situation entstand, in der eine immer kräftigere Basis an immer mehr Filialen gesendet werden musste. Und eines schönen Tages hörte diese Basis einfach auf, durch vorhandene Kommunikationskanäle zu kriechen. Es wurde auch in allen Geschäften in kurzer Zeit mit einem großen Knarren überprüft.
Die Basen hatten keine Zeit zum Einkaufen, manchmal vergaßen die Geschäfte, sie zu aktualisieren, und sie bekamen offenen Brei - im Geschäft Eine Person kaufte etwas Nützliches und erhielt einen Bonus, und Geschäft B weiß nach ein paar Tagen immer noch nicht, dass eine Person dies könnte und Boni von einem Neukauf abziehen.
Und dann fand Alexander Afanasyev
(jetzt IT-Direktor eines anderen Unternehmens) heraus, wie man das alles selbst macht, ohne Software von Drittanbietern zu kaufen. Ich habe von der Firma eine Reihe von Anforderungen für dieses System gesammelt und neue Möglichkeiten registriert. Anfangs sind es nur angenehme Funktionen - jetzt sind Boni nicht nur eine Zahl, sondern ein ganz komplexes System. Sie können einer Person zum Geburtstag Boni geben, Sie können einen Bonus separat nur für Skier und verwandte Produkte geben, Sie können Boni nur für Produkte der Marke Columbia und zu bestimmten Zeiten anbieten - und das alles, kombinieren, kombinieren, kombinieren.
Glücklicherweise hat die Entwicklung des Netzwerks den Punkt erreicht, an dem das Internet bereits fast überall aufgetaucht ist, und es war möglich, die Lösung online zu bringen. Das heißt, das Arbeitsschema ist so geworden - es gibt ein Geschäft mit einem stabilen Netzwerkkanal, es geht für den Rest über das Netzwerk zur Basis (und jetzt ist die Basis am frischesten und leckersten), nimmt den Rest der Boni von der Basis und arbeitet bereits damit. Und das alles, während der Käufer gerne mit einem freundlichen Verkäufer kommuniziert.
Das dritte Problem war die Durchführung von Bonusverbrennungsvorgängen. Wir haben das Gleiche - Sie können das ganze Jahr über leidenschaftlich Punkte sammeln, aber am 1. März brennen sie immer tückisch aus, wenn Sie es nicht geschafft haben, sie auszugeben.
Die erste Version des Systems (CARDS genannt) könnte sie normalerweise berücksichtigen, aber als es in den Modus der Bonusverbrennungsanlage wechselte, begannen Probleme. Brennende Boni sind schließlich ein vollständiger Durchgang durch die gesamte Basis mit Änderungen. Aufgrund der Größe der Basis kann dies 3-4 Tage dauern. Dabei wurde sie furchtbar langsamer und stumm, weshalb manchmal die Boni unterbrochen wurden, und es stellte sich heraus, dass in einem Geschäft Genosse Petrow, der für neue Tischtennisbälle gekommen war, immer noch Boni hatte, und Sidorov, der sich dafür entschieden hatte leider kein neuer toller.
Neue Version des Systems
Wir haben irgendwo in 3-4 Tagen einen Prototyp hergestellt und ihn dann einige Tage bei Live-Checks getestet. Es stellte sich heraus, dass das System für sich selbst ziemlich funktionsfähig ist und Sie damit verschiedene Bonusbedingungen und Kommunikationstexte generieren können.
Übrigens über Kommunikation - von Anfang an haben wir es so gemacht, dass das Loyalitätssystem selbst zum richtigen Zeitpunkt die Kommunikationstexte mit Kunden formte, Bonuspunkte aus der Datenbank extrahierte und sie selbst an Kunden schickte. Wir hatten viele Kunden, daher haben wir zu dieser Zeit Drittanbieter zum Versenden von SMS verwendet.
Die Interaktion mit ihnen verlief ungefähr so:
- Der Anbieter verstand, dass er ein wichtiger Kunde war, und begann sich zu freuen
- Ein Großkunde in Form von uns gab an, ob der Anbieter solche Mailings tatsächlich bearbeiten würde
- Der Anbieter sagte, dass er natürlich meistern wird
- Der Anbieter erhielt die Aufgabe, in kurzer Zeit eine große Menge SMS zu versenden, und beschloss, sich zur Ruhe zu legen
Also über den Prototyp. Im Prinzip wurde beschlossen, das gesamte System stark zu überarbeiten, da es anfangs nur für Boni und nicht für Online-Arbeiten geschärft wurde und daher erwartungsgemäß nicht mehr mit der Rendite fertig wurde. Außerdem fiel es natürlich in Momenten hoher Belastung. Das heißt, zur köstlichsten Zeit für den Laden - Neujahr, 8. März, 23. Februar und andere angenehme Daten.
Das System fällt -> die Stimmung des Geschäfts fällt -> die Stimmung aller fällt.
Zusammen mit einem Kollegen haben wir das System nach folgendem Prinzip umgeschrieben.
Komponente 1. Vorverarbeitung, die den Filialen so schnell wie möglich die Antwort gibt.
Komponente 2. Verarbeitung, dieselbe magische Kiste, schwierige und geschickte Gutschrift von Boni auf Warenschecks.
Komponente 3. Marketing, all dies zusammen sammeln und Kommunikationstexte bilden.
Außerdem haben wir das Problem des Brennens von Boni gelöst. Das neue System hat sie einfach nicht verbrannt. Wenn Sie das System nicht zwingen, Boni zu verbrennen, haben Sie schließlich keine Probleme mit brennenden Boni.
In der neuen Version speichert das System einfach die Boni jedes Clients in der Datenbank, betrachtet sie jedoch zu einem bestimmten Zeitpunkt nicht mehr als aktiv. Das heißt, jetzt gibt es immer Boni, aber jeder mit seiner eigenen Aktivitätsperiode. Dies ermöglichte übrigens die Einführung genauerer und dringenderer Werbeaktionen und Kampagnen.
Das alte System hat tatsächlich nur Aufzeichnungen über Karten und Boni auf diesen Karten geführt. Das neue System priorisiert nicht eine Karte, sondern das Konto einer Person. Wir können es anhand der Telefonnummer identifizieren (dieses Ding funktioniert von Anfang an für uns, wir waren einer der ersten, die die Autorisierung anhand der Telefonnummer eingeführt haben).
Ein weiteres Merkmal des neuen Systems sind die sogenannten Produktboni, es funktioniert folgendermaßen:
- Jedes Produkt hat Attribute (Name, Produktkategorie, Größe, Farbe, Sport, andere, andere, andere).
- Das System kombiniert diese Attribute und bildet eine logische Bedingung für die Ansammlung von Boni.
- Wenn ein Scheck eintrifft, wird dieser Zustand immer geprüft.
Wir haben diesen Prototyp in der Geschäftsarbeit gezeigt. Das Geschäft gab den Startschuss.
Wir haben am 1. März mit dem Schreiben des Systems begonnen und es am 27. Oktober 2013 in Betrieb genommen (wir haben zusammen geschrieben, ja). Tatsächlich war der geplante Liefertermin der 1. September, aber die Hauptkontrahentin des Systems hatte keine Zeit - Einzelhandelsgeschäfte. Die Geschäfte hatten aus mehreren Gründen keine Zeit, und nicht jeder hat die Registrierkassensoftware aktualisiert (und die Aktualisierung der Registrierkassensoftware in einem ziemlich großen Netzwerk ist immer noch ein Problem). Deshalb haben sie es verschoben, auf sie gewartet und am 27. Oktober begonnen.
Systemideologie
Sie legten die Hauptidee fest - weder das Geschäft noch die Registrierkassensoftware arbeiten mehr mit der Logik der Boni. Das Geschäft sendet jetzt nur noch den Warenkorb des Kunden an das Center, das Center verarbeitet das Ganze und berechnet dem Geschäft die Boni.
Jetzt werden die Boni wie folgt verteilt:
- Zunächst werden die Boni für alle Waren gleichmäßig auf den Scheck verteilt. Dies ist nützlich für die Analyse und hilft bei der Rücksendung von Waren.
- Wir haben das Konzept der Prioritätsboni eingeführt. Boni sind Ware, es gibt Boni für Geburtstage, die eine kurze Gültigkeitsdauer haben, es gibt reguläre (die zähesten). Deshalb schreiben wir zunächst bestimmte Boni ab. Das heißt, eine Person kam zum Skifahren - wir werden in erster Linie die Boni abschreiben, die sie auf Skiern hat. Und es stellt sich heraus, dass er zum Skifahren gekommen ist, wir haben regelmäßige Boni abgeschrieben. Eine Woche später wird er für eine Jacke kommen, und wir werden ihm einen Mann geben, Sie haben nur Boni für das Skifahren. Möchtest du Ski fahren? Das Gleiche gilt für Einkäufe während der Geburtstagsperioden. Schreiben Sie sie zuerst ab und dann regelmäßig.
- Wir führen Backoffice-Operationen und die Front. Geschäfte, die mit Anfragen geliefert werden, haben keinen Einfluss auf die Arbeit und Leistung des Dienstes, der die Boni berechnet, und umgekehrt
Im Allgemeinen war es möglich, alle alten Probleme zu verstopfen und anstelle neuer Probleme neue Funktionen hinzuzufügen.
Anstelle von Rückstand hatten wir dieses Notizbuch von Alexander.


Starten einer neuen Version des Systems
Da sich das neue System nicht nur technisch, sondern auch ideologisch vom alten System unterschied, konnten wir es nicht teilweise, in die Hälfte der Geschäfte oder irgendwie rollen. Wir mussten nur den alten ausschalten und stattdessen den neuen einschalten.
Es klingt gut, aber tatsächlich gibt es ein paar Einschränkungen.
Erstens mussten wir aufgrund der großen Anzahl von Geschäften (1200+) alles in 3 Stunden erledigen. Während ein Geschäft in einer Zeitzone um Mitternacht schließt, hat ein anderes eine ganz andere Zeit, und dann gibt es auch ein Lebensmittelgeschäft. Um alle Daten aus dem alten System zu konvertieren, füttern Sie im Allgemeinen das neue und starten Sie auf drei Servern gleichzeitig - 3 Stunden.
Fallstricke waren wie folgt:
- Das System wurde sofort im gesamten Netzwerk abgeschnitten. Wenn überall alles gut ist, funktioniert alles im ganzen Netzwerk. Wenn etwas fällt, ja, fällt es im gesamten Netzwerk.
- Wenn Sie das neue System einschalten, muss es alle Daten enthalten, die sich zum Zeitpunkt der Schließung der Geschäfte und der Ausgabe des letzten Bonus im alten System befanden. Wir sind gleichzeitig in 4 Länder gestartet. Die Datenbank war mehr als ein Terabyte groß und speicherte Hunderte von Milliarden Datensätzen.
- Um 23.00 Uhr mussten wir das System ausschalten. Alles konvertieren. Gießen Sie in das neue System. Alles einschließen. In diesem Fall sollte alles funktionieren.
Wir haben lange trainiert, Skripte aufgehängt, um uns am meisten zu verwöhnen. Nach langen Tests und Versuchen, alles so schnell wie möglich zu erledigen, erzielten wir um 9 Uhr das beste Ergebnis.
Das war etwas anders als die geplante Zahl von 3 Stunden.
Dann beschlossen wir, zuerst die Vorverarbeitung durchzuführen, die die Überreste in uns behielt. Er hob den Hauptserver an und kontaktierte die Geschäfte. Gleichzeitig wusste er nicht, dass das ganze System noch nicht gestiegen war, und zu dieser Zeit rollten wir tapfer alles andere.
Ein solches Datenvolumen auf Standardmaschinen konnte jedoch nicht rechtzeitig durchgeführt werden.
Und hier sollte Oracle Exadata vermerkt werden. Die Jungs von Oracle haben eine spezielle Hardware entwickelt, die hervorragend mit ihrer eigenen Datenbank und sogar auf Flash-Laufwerken funktioniert. Im Allgemeinen wurde eine willensstarke Entscheidung getroffen, Exadata zu verwenden. Mit seiner Hilfe bei den Tests haben wir es geschafft, alles, was Sie brauchen, in 2 statt 9 Stunden zu erledigen, und festgestellt, dass wir es schaffen müssen.
Da wir akribische Leute sind, haben wir beim Einrichten und Arbeiten eine Reihe von Fehlern aufgespürt und den Oracle-Support mit einem gewissen Vorsprung gescheitert. Zum Beispiel gab es einen interessanten Fehler: Aufgrund eines Fehlers bei der internen Verarbeitung der Anforderung begann Oracle, TEMP intensiv zu nutzen. Wir bemerkten dies rechtzeitig und warfen ihm TEMP'ovyh-Akten zu. Es war sehr interessant, als er betrunken wurde. Aber da sich das Stück Eisen als sehr vernünftig und sachkundig herausstellte, benutzte sie 10 Minuten lang 3 EL TEMP mit Gefühl, erkannte, dass sie nicht mehr war und zog sich zurück. Ich musste Problemumgehungen finden.
Einerseits war es cool, dass wir alles in Bezug auf die Konvertierung in 2 Stunden gemacht haben. Auf der anderen Seite, während des gesamten Prozesses der sauberen Konvertierung, 2 Stunden, und wir planten auch:
- Laden Sie alle Daten von den Servern des alten Systems in exadata neu, da alles sehr schnell zählt.
- Konvertieren Sie Daten von alten Strukturen in neue.
- Gießen Sie all das konvertierte Gut in drei verschiedene Server.
Zur gleichen Zeit gab es in jeder Datenbank eine Reihe nützlicher Dienstinformationen, wie z. B. dieselben Indizes, die bei der Neuerstellung hilfreich sein konnten. Wir haben dies jedoch bewertet und beschlossen, alles bereits auf den Kampfservern erneut zu erstellen.
Vorbereitung
Wir haben uns mit Kraft und Kraft vorbereitet. Wir haben bei der Arbeit geschlafen. Wir haben uns nicht nur mit Skripten aufgehängt, sondern auch mit vielen Metriken.
Jeden Tag um 23.00 Uhr haben wir den Prozess gestartet und die Metriken überwacht. Wir haben die notwendigen Änderungen vorgenommen, deshalb haben wir alles so eingerichtet, dass überhaupt nichts schief gehen kann.
Natürlich ging am Starttag etwas schief.
Zu unserer Ehre war die Neigung nicht auf unserer Seite. Irgendwo blinzelte das Netzwerk dumm. Das heißt, Sie sitzen so für sich selbst, Sie richten alles so ein, dass die Mücke nicht nur ihre Nase untergräbt, sondern auch nicht einmal Zeit hat, darüber nachzudenken - und irgendwo zieht jemand einfach das falsche Kabel.
Wie auch immer, wir haben es geschafft, den ersten Server pünktlich zu starten. Die allgemeine Frist war 5 Uhr morgens. Zu diesem Zeitpunkt sollten alle Server fröhlich und fröhlich sein, da die ersten Geschäfte in Fernost um 10 Uhr ihrer Zeit öffnen.
Der letzte Server startete also um 11 Uhr morgens. Aber da wir das System so gebaut haben, dass alles isoliert war, hat alles gut funktioniert.
Jetzt
Derzeit arbeiten 14 Entwickler und 8 Analysten am Clubsystem. In Anbetracht all der Leckereien, mit denen wir rumgehangen haben, ist dies nicht mehr nur eine Karte, mit der Sie eine bestimmte Anzahl von Boni für Ausgaben in Geschäften erhalten.
Wir fingen an, Boni vollständig zu kombinieren. Das Hauptkriterium für eine erfolgreiche Kombination des Systems ist der maximale Nutzen für den Käufer. Es kann viele Dienstprogramme und Werbeaktionen geben, zum Beispiel:
- Der Benutzer hat eine gute Anzahl regulärer Boni gesammelt.
- plus jetzt den Zeitraum, in dem eine Aktion für eine bestimmte Marke ausgeführt wird;
- Plus jetzt Rabatte auch auf eine bestimmte Produktgruppe und Untergruppe;
- und es kann auch einen Rabatt in einer bestimmten Stadt oder in einem bestimmten Geschäft geben.
Wir haben einen Algorithmus geschrieben, der einen Scheck von einem Geschäft erhält, die Produktartikel im Scheck durchläuft, alle möglichen Werbeaktionen und Rabatte an einem bestimmten Datum und in einer bestimmten Stadt auf ihn anwendet und das Ergebnis liefert, das für den Benutzer am vorteilhaftesten ist. Dann gibt er alles in den Laden zurück. Und es gibt noch Entwicklungsrichtungen:
- Entwicklung eines Mechanismus zum Starten komplexer Multi-Way-Marketingkampagnen, einschließlich Mailing, Bereitstellung von Boni, Rabatten und Personalisierung von Angeboten für einen Kunden
- Verbindung neuer Kommunikationskanäle wie Instant Messenger, soziale Netzwerke usw.
Ein dankbarer Kunde kann sich in diesem Moment daran erinnern, dass er auch Socken kaufen wollte, und bittet darum, diese dem Scheck hinzuzufügen. Das Hinzufügen von Socken (oder was auch immer) erfordert natürlich eine vollständige Nachzählung.
Aber wir werden uns auch damit befassen. Und in einem der zukünftigen Beiträge werden wir Ihnen die Geschichte der Erstellung der Website des Sportmasters erzählen.