Aktuelle E-Commerce-Systeme bestehen häufig aus mehreren Servern, die mit dem Browser der Benutzer über SSL-gesicherte Leitungen kommunizieren. Allerdings sind die Rechner der Kunden nicht die einzigen, mit denen ein Shop Daten austauschen muss: fast immer ist es notwendig, dass die einzelnen Server des Systems auch untereinander kommunizieren müssen. Dabei ist es unerheblich, ob es sich um eine Microservice– oder eine Vertikalen-Architektur handelt. Sogar die in die Tage gekommenen Monolithen nutzen bei einem Multi-Tier-Ansatz gerne mehrere Server.

Gemein ist diesen Backend-Requests (im Gegensatz zu dem Netzwerkverkehr zwischen Kunden-Browser und otto.de), dass hier im Allgemeinen keine vertraulichen Daten über die Leitung gehen, sondern beispielsweise die Aktualisierung einer Produktverfügbarkeit oder Konfigurations-Requests. Diese Inhalte müssen also nicht geheim gehalten werden, was uns den Aufwand und die Komplexität erspart, sie zu verschlüsseln.

Trotzdem darf natürlich nicht jeder die Texte im Shop ändern oder Produktinformationen anpassen, daher benötigen wir eine Methode zur Authentifizierung und Autorisierung der Requests.

The architecture of otto.de is based on the concept of vertical decomposition: the whole system is vertically split into several loosely coupled applications.

Every „vertical“ is responsible for a single business domain such as „Order“, „Search & Navigation“, „Product“, etc. It has its own presentation layer, persistence layer and a separate database. From the development perspective, every vertical is implemented by exactly one team and no code is shared between the different systems.

We have already described the details of this architecture in an article in  OBJEKTspektrum (German), a different blog post (German) and at conferences like QCon (English).

Vertical Decomposition
Vertical Decomposition

For some time, a different approach to decompose large systems is becoming more and more popular: microservices. What are the similarities and differences of both kinds of architectures and how is it possible to get the best of both? This is what I want to discuss in this text.

Als in unserem Bereich die Ziele für einen neuen Onlineshop OTTO.de diskutiert wurden, war klar, dass die bestehenden Systeme der Produktdatenversorgung, sozusagen die Lebensader des Shops, „out-of-the-box“ nicht in der Lage sein würden, die nichtfunktionalen Ziele für den Shop mit zu erfüllen. Wieso? Unsere aktuelle Produktdatenversorgung exportiert auf Basis von Datenbanklinks massenhaft Daten, im wesentlichen als Vollexporte (Full Export), zwischen zwei Oracle-Datenbanken. Dabei wird zur Exportlaufzeit jede Menge Geschäftslogik („Business Rules“) ausgeführt, so zum Beispiel die Ermittlung, ob ein Artikel überhaupt exportierfähig für den Onlineshop ist, oder die Bestimmung von Anzeigereihenfolgen der Produkte auf unseren Produktlisten. Und das kostet Zeit.