Haben Sie Lieferung bestellt? So liefert Crossroads 6.000 Bestellungen pro Tag

Die Leute lieben die Lieferung. Gegen eine geringe Gebühr können Sie die richtigen Produkte kaufen, ohne Ihr Zuhause zu verlassen: Lebensmittel aus Ihrem Lieblingsrestaurant, übergroße Möbel, ein Buch, das Sie schon lange lesen wollten, und so weiter. Und die Zunahme der Serviceleistungen für die schnelle Lieferung von allem auf der Welt bestätigt diese These nur. Ja, und für Läden ist das ein Plus - er hat sich mit jeder Lieferung von Waren an die Tür zusammengetan und seinen Scheck erhöht.

Wir bei "Crossroads" haben unsere eigene Lieferung. Für eine Person von außen sieht der Prozess der Lieferung von einem Geschäft zu einem Haus ungefähr so ​​aus:

  1. Ich habe etwas auf der Website ausgewählt und es in den Warenkorb gelegt.
  2. Ich habe die Adresse eingegeben und die Bestellung bezahlt.
  3. Der Laden gab die Bestellung schnell an den Kurier.
  4. Der Kurier hat die Bestellung geliefert.

Tatsächlich ist alles etwas komplizierter. Mein Name ist Vitaliy, ich bin der Leiter der Entwicklungsabteilung und heute werde ich Ihnen sagen, wie alles bei uns funktioniert. Und worauf.



Zwei Anwendungen sind für die Stabilität des Prozesses verantwortlich - eine Showcase- und eine mobile Benutzeranwendung. Bei der Ladenfront ist alles klassisch - der Käufer besucht die Website, verbringt einige Zeit damit, Produkte auszuwählen, den Korb zu füllen und die Produktkarten zu untersuchen. Der letzte Schritt besteht darin, eine Bestellung aufzugeben. Danach wird der Auftrag zur weiteren Bearbeitung an das Backoffice übergeben.

Im Allgemeinen ist ein Backoffice für einen Online-Shop ein System, in dem viele Aktionen mit Waren ausgeführt werden: Wir schreiben die Teilnahme von Waren an bestimmten Werbeaktionen vor, binden Banner an diese, markieren Markenzonen und vieles mehr. Selbstverständlich werden hier Bestellungen bearbeitet. Wenn der Käufer den Bestellvorgang abschließt und die Bestellung im Backoffice eintrifft, muss dies bestätigt werden. Dies geschieht automatisch, wenn wir diesen Käufer bereits kennen, oder wenn der Bediener im manuellen Modus nach dem üblichen Schema "Hallo, haben Sie hier etwas bestellt, bestätigen Sie, sind die Daten korrekt?" Und so weiter. Und hier endet bereits die Teilnahme des Backoffices an der Erstellung der Lieferung, die Bestellung wird bestätigt, der Status wechselt von „Verarbeitet“ auf „In Bearbeitung“. Eine Bestellung in WMS (bei der es sich um reservierte, abgeholte, bestellte Waren handelt, die nicht verfügbar sind und die beim Lieferanten auf Bestellung angefertigt werden) und gleichzeitig von einem Logistiker weitergeleitet werden können. WMS und Logistik sind im Großen und Ganzen unabhängige Systeme, die parallel mit Aufträgen arbeiten.

Inzwischen auf Lager


WMS-System ist eine Kombination unserer Software, Lager, Mitarbeiter dieser Lager und Geräte, die das Leben dieser Mitarbeiter erheblich vereinfachen. Über ein kleines Terminal, das am Handgelenk eines Mitarbeiters angebracht ist, können Sie schnell eine Bestellung in der gewünschten Reihenfolge zusammenstellen.



Konsistenz ist wichtig, da wir unsere Kunden in speziellen Crossroads-Boxen beliefern. Und mit einer Schachtel etwas - es ist rechteckig. Wie die meisten Boxen.

Daher ist es notwendig, zwei Bedingungen gleichzeitig zu beachten - und die Schachtel selbst so weit wie möglich zu füllen, damit der Kunde nicht zwei Schachteln erhält, die nur zur Hälfte gefüllt sind (es ist sowohl unwirtschaftlich als auch umweltfreundlich und im Allgemeinen seltsam), und die Schachtel nach dem Prinzip „von schwer nach leicht“ zu füllen ". Das System berücksichtigt die Größe des Produkts und seiner Verpackung. Wenn Sie dies und die Boxparameter kennen, ist es möglich, Aufträge so zu bilden, dass die Box maximal gefüllt ist. Auf diese Weise können Sie auch Situationen loswerden, in denen das Auto des Kuriers scheinbar alle zu 100% mit Kartons beladenen, aber zur Hälfte leeren Teile ersetzt hat.

Und das System schreibt für den Lagerarbeiter in welcher Reihenfolge die Bestellung abgeholt werden soll. Wenige Leute wollen eine Schachtel, in der ein guter Lagermitarbeiter drei Dutzend Eier auf den Boden legt und zum Beispiel vorsichtig 10 Päckchen Milch und ein paar Kilogramm Gemüse darauf legt. Mit Milch wird sicher alles in Ordnung sein, was man nicht über Eier sagen kann. Alle Arten von zerbrechlichen Keksen sind auch immer oben.



Außerdem müssen Sie die Regeln der Nachbarschaft von Waren befolgen. Angenommen, es ist ziemlich traurig für Sie, wenn Sie 2 Sorten Äpfel, Brötchen und Fisch bestellt haben, und all diese Sachen stanken nicht nach Fisch, sondern nach Reinigungsmittel im Allgemeinen, weil alles in einer Schachtel angekommen ist. Daher Lebensmittel - getrennt, Haushaltschemikalien - getrennt. Die Nachbarschaft der Waren wird übrigens von SanPiN-Standards bestimmt. Und wir beobachten sie. Aus menschlicher Sicht ist dies ein logisches und einzig wahres Modell. Aus Sicht des Lagers sind dies zusätzliche Variablen beim Aufbau der Lagerarbeiterroute.

Das System berücksichtigt alles und erstellt eine Route, über die der Mitarbeiter die Bestellung in der gewünschten Reihenfolge sammelt - das Terminal führt ihn zum richtigen Regal. Wenn Sie übertreiben, sieht die Arbeit des Client-Teils der Anwendung so aus: „Guy, gehen Sie zu B4, nehmen Sie 5 Päckchen Mehl mit und legen Sie sie auf den Boden der Schachtel. Dann von A2 schnappen Sie sich die Milch. Nein, nicht dieser, da liegt in dieser Zelle. “



Sobald sie einen Antrag für Lagerarbeiter gestellt hatten, musste ein Kurierantrag gestellt werden. Es hilft nicht nur, Routen zu erstellen, sondern auch dabei, Schecks schnell auszudrucken und neue Auftragsstände zu notieren. Nun, Metriken, wo gibt es keine Metriken - wir sehen, wo sich ein bestimmter Kurier befindet, er passt normalerweise in den Zeitplan oder nicht, er druckte einen Scheck aus, wenn er die Bestellung an den Käufer übertrug oder nicht, und so weiter.



Übrigens, warum drucken wir nicht gleich Schecks aus? Wenn wir unsere Kartons zum Kunden bringen, kann er jedes Produkt aus irgendeinem Grund ablehnen. Zum Beispiel konnte er sich Eis kaufen, oder er kochte sofort zwei Liter Milch und entschied, dass Fisch und eingelegte Gurken für heute Abend nur eine Idee waren. Im Allgemeinen kann es viele Gründe geben, eine Position abzulehnen, einschließlich einer „Meinungsänderung“. Aus diesem Grund löscht der Kurier die vom Kunden abgelehnten Positionen und druckt den endgültigen Scheck aus.

Unter der Haube


Wir schreiben unsere Anwendungen auf Swift und Kotlin (iOS bzw. Android). In diesem Fall dreht sich das gesamte Backend in PHP, wir haben uns entschieden, die Datenbank auf Postgres zu erstellen, für den Broker haben wir Rabbit mq.

Ja, es ist klar, dass im Jahr 2019 jeder zuerst alles nach dem Prinzip des Mobilfunks macht, aber irgendwie hat sich herausgestellt, dass die Website dennoch näher und teurer ist. Er arbeitet bei Lavarel. In Richtung Microservices sind wir auch gerade dabei, uns zu bewegen, und im Moment sind sowohl die Site als auch die Anwendung ein so starker Monolith, der darauf wartet, dass er bereits für Microservices entfernt wird.

Das erwähnte Postgres zeigt sich übrigens von Zeit zu Zeit als Engpass, also werden wir etwas ändern. Wir setzen aktiv Balancer ein, da die Belastung der Systeme sehr unterschiedliche Werte annehmen kann.

All diese Dinge befinden sich bequem auf den Servern in dieser Form:
16 Applikationsserver mit PHP-FPM und Postgres, Postgres hat 1 Master und 4 Slaves. Wie Sie sehen, keine Fahrräder. Das gesamte Backoffice ist vollständig in die internen Systeme integriert - WMS, Lager, Logistik, Buchhaltung und Marketing.

Wir haben die mobile Anwendung und Website im Jahr 2017 gestartet. Die durchschnittliche Auslastung des Systems liegt heute bei 6.000 Bestellungen pro Tag. Einerseits ist es nicht sehr wichtig, andererseits ist es immer noch erwähnenswert, dass dies nicht gleichmäßig über 24 Stunden verteilt ist. Die Leute bestellen kein Essen rund um die Uhr. Es gibt auch ein Strumpfband für normale Aktivitäten während der Arbeitszeit. PHP-Abfragen selbst (einschließlich der API) sind in 5 Minuten ungefähr 70.000.

Bestellpfad


Sobald die Bestellung im Lager erfolgreich zusammengestellt wurde und bereit für eine Reise ist, wird sie weitergeleitet. Jetzt haben wir begonnen, Yandex.Routing zu verwenden - ein gutes Produkt, mit dem wir unter Berücksichtigung der Verkehrssituationen - Stau, Wetter, Böden, Barrieren und andere Freuden - schnell die optimale Route für die Fahrer erstellen können. Dies hilft uns, Kraftstoff zu sparen, damit Kuriere nicht die Stadt umrunden. Der Fahrer hat eine klare Route, eine Liste der Reihenfolge, in der Bestellungen transportiert werden sollen, die Bestellungen selbst werden so im Auto abgelegt, dass sie in der gleichen Reihenfolge geliefert werden.



Wir haben den Antrag für Kuriere für Android, wie ich bereits schrieb, auf Kotlin gestellt. Hier wird das Routing genäht, die Möglichkeit, mit dem Kunden zu kommunizieren (wir verbergen die Kundennummer, der Fahrer hat nur die Schaltfläche "Anrufen"), die Möglichkeit, die Bestellung zu bearbeiten und etwas zu entfernen, den Scheck auszudrucken und auch die Bestellung zu bezahlen.



Unabhängig von der Telemetrie: Die Anwendung berücksichtigt alles: die Reisezeit, die Ankunftszeit beim Kunden und die Abfahrtszeit. Dies trägt erheblich dazu bei, viele analytische Berichte zu erstellen und die Logistik zu verfolgen. Zum Beispiel bewegt sich der Kurier für einige Zeit nicht, aber im Allgemeinen sollte er - sie kontaktieren ihn und geben an, ob alles in Ordnung ist. Die Verbindung mit der Logistik ist in dieser Hinsicht sehr wichtig, da es Situationen gibt, in denen der Kurier beispielsweise um 15.00 Uhr an einer Adresse und um 15.30 Uhr an einer anderen sein sollte. Aber bei der ersten Adresse gab es ein Problem aufgrund der Zugangskontrolle auf dem Hof, einer Schranke oder einem Tor. Ich musste zusätzliche 10 Minuten aufwenden, um den Kunden zu kontaktieren, damit der Kunde die Sicherheitsabteilung kontaktierte und so weiter. Sie wissen, wie es passiert.



Aus Sicht des Kunden ist dies jedoch um 15.30 Uhr nie sein Problem. Er wartet zum angegebenen Zeitpunkt auf die Bestellung. Daher kontaktiert der Fahrer die Logistiker, überwacht genau seine Telemetrie und kontaktiert selbst den nächsten Kunden, wobei er das Zeitintervall für die Lieferung aufgrund einer Störung an der Barriere angibt. Natürlich ist es in jedem Fall traurig, wenn der Kurier zu spät kommt. Aber wenn er zu spät ist und nicht davor warnt, ist es noch schlimmer.

Wenn es grundlegend ist, arbeiten wir im Allgemeinen so. Sie interessieren sich vielleicht mehr für die Funktionsweise des Lagers und des WMS oder für Anwendungen für den Fahrer oder die Lagerarbeiter oder für das Routing. Schreiben Sie einfach in den Kommentaren darüber, und ich werde einen separaten Beitrag verfassen.

Danke fürs Lesen.

Source: https://habr.com/ru/post/de484220/


All Articles