Technologie & Architektur

-

Gesamtarchitektur & Integration in Magento

Pacemaker ist ein vollständig in PHP implementiertes Magento-Modul und hat somit Zugriff auf alle Prozesse, die in Magento laufen und alle zur Verfügung stehenden Ressourcen. Die Anbindung an Drittsysteme erfolgt im Normalfall über Standardschnittstellen wie Webservices, CSV und XML Dateien. So lassen sich schnell und einfach zusätzliche Konnektoren zu anderen System umsetzen, wenn diese nicht bereits vorhanden sind.

Struktur & Komponenten

Pacemaker selbst verfügt über eine modulare Struktur, um Wartbarkeit und die Weiterentwicklung so einfach wie möglich zu gestalten. Die strikte Trennung von Zuständigkeiten stellt zusätzlich sicher, dass Änderungen nicht zu unerwünschten Nebenläufigkeiten führen und Schwierigkeiten bei Updates verursachen. Die zahlreichen Module lassen sich in die folgenden, übergeordneten Komponenten zusammenfassen:

Anpassbar- und Erweiterbarkeit

Alle Komponenten von Pacemaker sind so implementiert, dass sie schnell und einfach an die eigenen Gegebenheiten angepasst und bei Bedarf erweitert werden können. Das Zusammenspiel zwischen Process Pipeline und Import Framework erfolgt dabei über sogenannte Exekutoren, die z. B. aus dem Step einer Pipeline durch den Aufruf eines CLI Befehls den Import Prozess starten. Abhängigkeiten im Quellcode zwischen den beiden Frameworks wurden bewußt vermieden.

Hierbei wurde das Process Pipelines Framework als reine Magento Extension implementiert und kann somit über die Möglichkeiten die das Magento Framework bietet z. B. um neue Pipelines und Steps erweitert werden. Viele Anpassungen lassen sich jedoch bereits durch Anpassungen der den Pipelines zugrundeliegenden XML Dateien erledigen, was die Anforderungen hinsichtlich Programmierkenntnisse erheblich reduziert. Die bereits mit ausgelieferten Pipelines sind dabei eine sehr gute Ausgangsbasis für erste Schritte.

Im Falle des Import Frameworks wurde hingegen ein anderer Weg eingeschlagen. Da das Import Framework einen generischen und systemunabhängigen Ansatz verfolgt und somit auch für andere Systeme eingesetzt werden kann wurde hier das Symfony Framework als Basistechnologie verwendet. Das Import Framework verfolgt einen komplett deklarativen Ansatz und ermöglicht mittlerweile eine Vielzahl von Anpassungen über die Konfiguration.

Wie wurde das Pipeline Pattern umgesetzt?

Bei der Umsetzung orientiert sich Pacemaker an Vorbildern wie Jenkins, Gitlab-CI oder Travis-CI. Wie bei diesen Systemen werden Prozesse über eine Konfigurationsdatei modelliert (im XML-Format, um konform mit Magento zu bleiben). Dabei kann über sog. Conditions festgelegt werden, wann eine Pipeline gestartet werden soll. Beispielsweise soll eine Import Pipeline nur gestartet werden, wenn auch passende Dateien vorhanden sind und wenn nicht gerade die Indizierung läuft.

Zum Ausführen eines Steps (Tasks) wird eine Nachricht an die Message-Queue übergeben. Diese bleibt solange in der Queue, bis sie durch einen Runner erfolgreich verarbeitet wurde. Damit kann sichergestellt werden, dass auch beim Ausfall eines Systems Nachrichten nicht verloren gehen und die Nachrichten asynchron und dezentral verarbeitet werden können.

Pipelines vs. CRONJobs

Pacemaker adaptiert das in der Datenverarbeitung seit langem bewährte Pipeline Pattern und eröffnet damit für das Magento Ökosystem bisher ungenutzte Möglichkeiten. Durch die Integration als echtes Magento Modul haben Entwickler direkten Zugriff auf in Magento laufende Prozesse und können diese kontrollieren und koordinieren. Dadurch lassen sich Transparenz, Performance und Skalierbarkeit von Magento um ein Vielfaches steigern und Probleme wie inkonsistente Daten zuverlässig vermeiden.

Leichtgewichte Prozesse

Prozesse werden in beliebig viele Stages zerlegt und als sog. "Pipeline" abgebildet. Dabei muss jede Stage mindestens einen Task enthalten, fasst aber beliebig viele. Durch die Zerlegung des monolithischen Prozesses in kleine Schritte wird dieser leichtgewichtig und gewinnt dadurch spürbar an Transparenz und Wartbarkeit.

Konditionierung & Priorisierung

Über konfigurierbare und flexible Bedingungen lässt sich exakt steuern, ob und wann eine Pipeline gestartet wird. Außerdem lassen sich Abhängigkeiten zwischen den Pipelines und sogar übergreifend zwischen den Stages und deren Tasks definieren. Damit wird es möglich, die Ausführung exakt zu priorisieren und einen fest definierten Ablauf einzuhalten.

Asynchrone & parallele Ausführung

Durch die Ausführung der Pipelines über einen sogenannten Runner lassen sich Prozesse voneineander entkoppeln und können asynchron ausgefüht werden. Da diese Entkopplung in einer kontrollierten Umgebung stattfindet, lassen sich Pipelines und Tasks parallelisieren, was natürlich die Abarbeitung bei Bedarf signifikant beschleunigen kann.

Skalierbarkeit & Dezentralisierung

Durch die Kommunikation per Messages über eine Queue können die ausführenden Runner auf beliebig vielen Servern installiert werden. Eine Verteilung der Prozesse auf mehrere Server, z.B. abhängig von den verfügbaren Ressourcen, bietet einzigartige Möglichkeiten der Skalierung und Ausfallsicherheit.

Visualisierung & Monitoring

Durch die Visualisierung der Pipelines, Stages und Tasks über die CLI und das Admin UI lassen sich alle laufenden Prozesse visualisieren und überwachen. Besonders im Fehlerfall lassen sich Probleme einfach debuggen, schnell aufspüren und beheben. Dabei lassen sich einzelne Schritte auch auf anderen Systemen beliebig oft wiederholen.

Welche Architektur hat das Import Framework?

Das Pacemaker Import Framework verfolgt - neben der Implementierung von schnellen und speicheroptimierten Importprozessen - das Ziel, Anpassungen und Erweiterungen möglichst ohne Programmieraufwand, rein deklarativ durchführen zu können. Dieser deklarative Ansatz in Kombination mit generisch wiederverwendbaren Komponenten bietet ein hohes Potenzial zur Einsparung von Zeit und Kosten.

Bei den Komponenten des Import Frameworks handelt es sich im Großen und Ganzen um Komponenten, die die Funktionalität für den Import der jeweiligen Entitäten kapseln. Die Komponenten können nahezu beliebig miteinander kombiniert werden, so nutzt der Produktimport beispielsweise auch die Komponenten für den Import der Attribute und der Kategorien, um diese dynamisch anzulegen, falls sie noch nicht vorhanden sind.

Vorteile und Funktionalitäten

Das Pacemaker Import Framework wird mit einer Reihe leistungsstarker Komponenten ausgeliefert, die Sie dabei unterstützen, sehr leistungsfähige, grundsolide und einfach zu bedienende Import-Dienste zu erstellen, die nahezu 100% mit dem Standard-CSV-Format von Magento 2 kompatibel sind.

Deklarativer Ansatz

Anpassungen können in deklarativer Weise vorgenommen werden, um unnötigen Entwicklungsaufwand zu vermeiden und Geld zu sparen

Workflow Engine

Konfigurierbare und leistungsstarke Workflow-Engine, die eine feingranulare Anpassung des Import Prozesses an die Anforderungen fast jedes Anwendungsfalles ermöglicht.

Archivierung/Artefakte

Automatische Archivierung verarbeiteter Artefakte nach Abschluss des Importvorgangs.

Bunch Support

Importieren von Entitäten aus mehreren Quelldateien in einem Schritt mit einer einzigen Transaktion und Rollback im Fehlerfall.

Konsistente Daten

Konfigurierbare Bereinigungs- funktionalität für Relationen, Mediengalerie und leere Felder für wichtige Hinzufüge- bzw. Aktualisierungsvorgänge.

Mehrere Operationen

Löschen, Hinzufügen, Aktualisieren & Ersetzen von Importoperationen auf unterstützten Entitätstypen.

File Handling

Verarbeiten Sie mehrere Dateien, indem Sie eine intelligente "OK-Datei" erstellen und Importdateien während der Verarbeitung in ein temporäres Verzeichnis verschieben.

Multithreading

Entwickelt zur Unterstützung von Multithread- und Multiprozess- Umgebungen für massive Leistungsverbesserungen in einer Vielzahl von Szenarien.

CLI

Command Line Interface zum Aufrufen von Importbefehlen und Wartungsaufgaben.

Delta Import

Links, gruppierte Produkte, Varianten und Bundles können auf Daten verweisen, die nicht Teil der CSV-Datei sind, um die Dateigröße zu reduzieren und die Leistung zu verbessern.

Common Entity

Unterstützung für Produkte, Kategorien, Kunden, Kundenadressen sowie Attribute + Attributsätze/-gruppen.

Produkttypen

Unterstützt einfache, Varianten-, Bündel- und gruppierte Produkttypen und bietet Funktionen für den Import von Bestands-, Preis-, Beziehungs- und Medientypen.

Dyn. Optionswerte

Fehlende Optionswerte können on-the-fly erstellt werden, falls erforderlich und gewünscht.

Dyn. Kategorien

Fehlende Kategorien können on-the-fly erstellt werden, falls erforderlich und gewünscht.

Dyn. Bildtypen

Konfigurierbare und dynamische Bildtypen ermöglichen die Konfiguration und Verarbeitung einer unbegrenzten Anzahl zusätzlicher Bildtypen.

Admin UI

Admin-UI-Schnittstelle zum Aufrufen und Überwachen von Import-befehlen.

Caching

Erweiterte und konfigurierbare, feingranulare Caching- und Cache-Warming-Funktionalität zur Verbesserung der Leistung und zur Senkung der Datenbankpenetration.

Batch Processing

Stapelverarbeitung sowie Verwendung von mehrwertigen SQL-Anweisungen für die Stapelverarbeitung, um die Leistung zu verbessern und die Datenbankpenetration zu verringern.

Time Stamp Detection

Verwenden Sie den Zeitstempel der Entität, um festzustellen, ob sich die Entität seit dem letzten Import geändert hat; überspringen Sie die Zeile, wenn nicht, um die Datenbankpenetration zu verringern.

Change-Set Detection

Erkennung von Unterschieden zwischen CSV und Datenbank, um ausschließlich Änderungen zu verarbeiten, wodurch die Datenbankpenetration verringert wird.

Single Transaction

Durch die Option Importe im Rahmen einer Transaktion laufen zu lassen kann sichergestellt werden, dass die Daten im Shop zu jedem Zeitpunkt konsistent sind.

Pipeline-Based Imports

Einen signifkanten Mehrwert stellt das im Laufe vieler Projekten erworbene Prozess Know-How dar. Verpackt in ready-to-use Pipelines können Pacemaker-Kunden sofort starten und haben vom ersten Moment an die Sicherheit, dass ihre Prozesse zuverlässig und stabil laufen. Bei Bedarf lassen sich neue Funktionalitäten als zusätzlicher Schritt problemlos per XML Datei in eine bestehende Pipeline integrieren.

Import des Katalogs

Eine der häufigsten Einsatzgebiete für Pacemaker ist die Integration von Drittsystemen. Hauptsächlich handelt es sich dabei um PIM oder ERP Systeme, bei denen Daten entweder in Magento importiert oder aus Magento an das angebundene System übertragen werden. Speziell für den Import des Produktkatalogs, zu dem neben den Produkten die Attribute-Sets, Attribute und natürlich die Kategorien gehören, bringt Pacemaker eine Pipeline mit, die dafür sorgt, dass der Katalog, sofern entsprechende Daten in einem konfigurierbaren Verzeichnis abgelegt werden, aktualisiert wird.

Dabei wird sichergestellt, dass

  • die zu verarbeitenden Dateien in ein temporäres Verzeichnis verschoben werden
  • die Indizierung des Katalogs gestoppt wird
  • die Dateien in der richtigen Reihenfolge importiert werden
  • die Datei für den Refresh des Bilder-Cache exportiert wird (für die tatsächliche Aktualisierung ist ein Zusatzmodul notwendig)
  • und abschließend die Indizierung des Katalogs wieder gestartet wird

Anschließend ist der Katalog wieder aktuell. Während des gesamten Prozesses stellt die Pipeline sicher, dass zu jeder Zeit der Shop online bleibt und Kunden weiter einkaufen können.

Import von Lagerbeständen

Neben dem Katalog zählen aktuelle Lagerbestände sicherlich mit zu den wichtigsten Informationen im laufenden Betrieb. Um sicherzustellen, dass die Lagerbestände in möglichste kurzen Abständen aktualisiert werden, wird Pacemaker mit einer extrem reduzierten Pipeline ausgeliefert, die in kurzen Abständen ein Delta-Update der Lagerbestände vornimmt. Da die zu verarbeitende Datei lediglich SKU und Lagerbestand umfasst, ist die Laufzeit und damit der Einfluß auf das System praktisch nicht spürbar.

Import von Preisen

Analog zu den Preise beinhaltet Pacemaker eine Standardpipeline für den Import von Preisen. Wie auch bei den Lagerbeständen gehören Preise zu den Bestandsdaten und unterliegen - zumindest zum Großteil - einer höheren Aktualiserungsfrequenz. Um kontinuierlich sicherzustellen, dass die im Shop angezeigten Preise aktuell sind, enthält auch der Preisimport nur die notwendigsten Daten und sorgt somit dafür, dass die Laufzeit auf ein Minimum reduziert werden kann.

Import von Bildern & Videos

Pacemaker bringt auch eine Standardpipeline für den Import von Bildern und Videos mit. Der Import von Bildern und Videos stellt sich häufig, insbesondere aufgrund der großen Datenmengen, als eine komplexe Anforderung dar. Bildern können zum Einen bereits mit den Produkten importiert werden, zum Anderen steht dafür eine dedizierte Pipeline zur Verfügung. Beide Möglichkeiten bringen dabei einen bereits vielfach verwendeten Workflow mit und lassen sich, bei Bedarf schnell und einfach um intelligente Funktionen wie z. B. einem Delta-Cache Management (durch das zusätzliche und kostenpflichtige Modul Image Cache) erweitern.

Order Workflow

Bei dieser Komponente handelt es sich um die zentrale Logik zur Übertragung der Bestellung in das zuständige ERP bzw. Warenwirtschaftssystem (im folgenden "Zielsystem" genannt), sowie die Synchronisation des Bestellstatus zwischen den Systemen.

Order Export

Dieses Modul erkennt anhand konfigurierbarer Regeln, ob eine Bestellung exportiert werden soll. Dabei können die Bedingungen für den Export (z.B. je nach Status der Bestellung) an deren Zahlungsart geknüpft werden. Wird eine solche Bestellung erkannt, so wird eine entsprechende Export-Pipeline dafür initialisiert. Dieser Vorgang kann je Website (Mandant) individuell eingestellt werden. Die Export-Pipeline gliedert sich in bis zu vier Schritte:

  • Transformation
  • Transport
  • Response
  • Notification
  • Je nach Zielsystem können diese Schritte deaktiviert bzw. zusammengelegt werden.

Bei dem Schritt Transformation wird die Magento-Bestellung in ein Zielformat überführt. Dabei kann ein beliebiges Dateiformat bequem über ein Template im Magento-Backend definiert werden. Spezifische Formate können über entsprechende Interfaces programmatisch erweitert werden. So z.B. auch mittels des von uns entwickelten SAP-Plugins für Pacemaker.

Bei dem Schritt Transport wird die zuvor transformierte Bestellung an das Zielsystem übertragen. Dabei kann im Standard die Bestellung innerhalb des lokalen Dateisystems abgelegt werden. Über entsprechende Erweiterungen können (s)FTP, REST, SOAP, usw. als zusätzliche Handler hinzugefügt werden. Je nach Art der Übertragung kann die Verarbeitung der Rückantwort des Zielsystems direkt innerhalb dieses Schrittes oder erst mit dem nächsten Schritt verarbeitet werden .

Der Schritt Response verarbeitet asynchrone Antworten des Zielsystems. Dabei wird im Standard eine vordefinierte Datei eingelesen, welche die Auftrags-ID (des Zielsystem) erwartet. Wie bei den zuvor beschriebenen Schritten existieren auch hier zahlreiche Extension Points, um die Verarbeitung der Antwort an das jeweilige Zielsystem anzupassen.

Der Schritt Notification ermöglicht es, eine Benachrichtigung zu versenden, sobald die Bestellung einen entsprechenden Status erreicht hat. So kann damit beispielsweise die Bestellbestätigung erst verschickt werden, wenn die Bestellung auch vom Zielsystem akzeptiert wurde.

Line Items

Line Items ist eine Erweiterung, die bereits bei der Erzeugung der Bestellung in Magento aktiv wird. Dabei werden über zusätzliche Attribute die einzelnen Positionen der Bestellung nach vorab konfigurierten Regeln durchnummeriert. Diese Anforderung ergibt sich aus der Funktionsweise vieler ERP- und Warenwirtschaftssysteme.

Durch dieses Modul wird die Nummerierung explizit bei der Erzeugung der Bestellung vorgenommen. Dadurch wird eine höhere Stabilität des Gesamtsystems (damit ist die gesamte E-Commerce Infrastruktur gemeint, nicht nur die Magento-Instanz) gewährleistet, als bei der impliziten Nummerierung während des Export-Vorgangs bzw. der Verarbeitung der Antwort.

Durch dieses Modul lassen sich rein konfigurativ über das Backend z.B. Nummerierungen wie 0010, 0020, 0030, etc. oder ähnliches realisieren. Die Konfigurationen können je Mandant (Website) und somit auch je Zielsystem individuell gestaltet werden.