Logo
Navigation
  • Jobs
    Kein Job gleicht dem anderen. Schau dich in unserer Jobbörse um und finde deinen Traumjob.
    • JobsucheFinde deinen passenden Job bei OTTO
    • JobtickerErhalte passende Jobvorschläge
    • ProfilbereichLeg dir ein Profil an und profitiere von allen Vorteilen
  • Wir sind Otto
    Erfahre mehr über OTTO als Arbeitgeber - was uns ausmacht und wie wir ticken.
    • VisionWonach wir alle streben
    • BenefitsWovon wir alle profitieren
    • OnboardingWomit wir alle starten
    • KulturWas uns alle ausmacht
    • KarrierewegeWie wir uns gemeinsam weiterentwickeln
  • Deine Möglichkeiten
    Die Möglichkeiten, bei OTTO die Zukunft zu gestalten, sind grenzenlos. Entdecke die verschiedenen Einstiegsmöglichkeiten, die wir dir bieten.
    • EinstiegsbereicheUnsere Berufsfelder
    • Schüler*innenNach der Schule
    • StudierendeIm Studium
    • Berufseinsteiger*innenNach dem ersten Abschluss
    • BerufserfahreneMit mehreren Jahren Erfahrung
  • Technologie
    Wir lieben Technologien und setzen Methoden, Frameworks und Infrastruktur ein, die zu uns passen. OTTO Tech gibt dir einen Eindruck zu unseren Arbeitsweisen, Technologien und Menschen von OTTO.
    • Tech-HubVerschaffe dir einen Überblick über alle Tech-Themen
    • Tech-BlogLies dich in unsere Themen
    • Open Source ProjekteEntdecke offene Technologien
    • ArbeitsweisenFinde heraus, wie wir arbeiten
    • TeamsLerne unsere Teams kennen
    • Tech-Gespräche mit ProfisHören, wie wir ticken
  • Rund ums Bewerben
    In unserem Bewerbungsprozess steht der Mensch im Mittelpunkt. Daher möchten wir dich mit allen Informationen rund um deine Bewerbung bei uns versorgen.
    • BewerbungstippsErfahre hier alles rund um deine Bewerbung bei OTTO
    • KontaktErreiche immer die Richtigen
    • Hilfe und SupportFinde hier jede Antwort auf all deine Fragen
    • CampusVerschaffe dir einen Überblick
    • StandorteFinde OTTO in deiner Stadt
    • ServicesNutze die Features auf otto.jobs
  • Jobnews & Events
    Bei OTTO ist immer etwas los. Unsere Jobnews & Events verschaffen dir einen Überblick darüber, was bei OTTO passiert und welche Events du besuchen kannst.
    • JobnewsInformiere dich über Neuigkeiten
    • EventsNimm an spannenden Events teil
Finde, was du suchst.
X

Mein Profil. Hier einloggen oder registrieren.

29. Juli 2014

Scaling with Microservices and Vertical Decomposition

Teilen
 
 
 
 
 
 
 
 
 
 
 
 
RSS
architecture

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 textLet us start with microservices: In short, "the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API (Martin Fowler).

Sometimes, people refer to the code size: for example, a microservice should not have more than 100 lines of code. Personally, I do not find such definitions helpful, for several reasons. I prefer definitions from the feature perspective: A microservice should be responsible for a single use case. In other words, the "Single Responsibility Principle" known from object oriented development should be adopted to applications.

Let us have a look at an example from our online shop. There are different areas in the shop where we are promoting products: similar products, products other people were interested in, and so on. In a monolithic application, we would need a database of product data, having all the attributes needed for any kind of recommendation (in addition to all the information needed by other components of the shop). In the case of otto.de, this is a noticeable amount of data and a rather complex data model.

The problem is that it is hardly possible to find a data structure that fits well for every use case. Using a microservice architecture, finding the "perfect" solution for every kind of problem is much easier. For example, we could have a microservice only responsible for serving a single recommendation type. One service would have to serve "similar articles", another one "best rated products", and so on. The data needed to identify "similar articles" is very different from the data used to select "best rated products", so both services would have different data structures, fitting exactly their needs.

Not only the data structures would differ: the services could also use different implementations, for example, one using in-memory calculations while others would make use of a relational database. A microservice architecture has a whole slew of advantages when compared to monolithic architectures:

  • Microservices are small enough to be developed by only a few developers in a short time.
  • A single developer is able to understand all aspects of a service.
  • It is possible to choose the "best" programming language for different kind of problems.
  • The code of the service remains compact, without having too much boilerplate code, no need to use heavyweight frameworks or abstraction layers.
  • Together with REST there is an architecture to realize a loosely coupled system of services. There are other options like thrift or protocol buffers, having similar characteristics.
  • Microservices can be developed and deployed independent from each other. This is an important premise for continuous delivery.
  • The development stays highly efficient, while developing monolithic architectures tends to slow down over time.
  • Because microservices are small, it is easy to replace them by newer, better implementations.
  • The development of small services scales better: it is easier to establish independent teams in a microservice architectures than in monolithic ones.
  • The scalability of a distributed system is much better than a monolithic one because the different services can be scaled independently.

On the downside of microservices: like every distributed system, the operation of such an architecture is much more complex than the operation of monolithic systems. We need more hardware resources, it is a must to automate everything, monitoring and alarming is more complex and so on.

Another problem is the comprehensibility of a pure microservice architecture for complex systems. Because the system is loosely coupled, consisting of independent applications, it is not easy for developers to "see" the overall structure of the system.

Microservices
Microservices

This is where vertical decomposition comes into the game. The two concepts fit perfectly together, because vertical decomposition introduces another dimension to scale the system, and they help to give microservices a structure.

Microservices, on the other hand, help us to cut down verticals into smaller pieces, so they do not turn into large monolithic applications.

From the outside, a vertical is a black box. There are some REST interfaces, but the internal structure (or micro architecture) is up to the development team responsible for the vertical. Whether or not a team is choosing microservices to realize a vertical is irrelevant from the perspective of other teams or systems, because it is only the URLs of the different REST resources that may differ.

 Vertical Decomposition with Microservices
Vertical Decomposition with Microservices

Below the line, combining vertical decomposition with microservices is a great way to build large systems. Like namespaces in object oriented applications are structuring code, verticals are grouping microservices, so it is easier to understand the overall architecture. Microservices are a way to implement verticals, preventing the teams from turning an initially small vertical into a 100.000 lines of code monster application.

16Kommentare

  • Mark van Holsteijn (@mvanholsteijn)
    30.09.2014 15:58 Uhr

    Hi Guido,

    Thank you for sharing your insights. They are very helpful. I was wondering how your microservices inside a vertical communicate. Is this remote or is this in-process? The other question I have is the following: How many unique (application) instances are you running, given that you have roughly 11 verticals?

    Cheers,

    Mark

  • Microservices: CI with LambdaCD – Microservices and continuous integration with LambdaCD (2/3) | dev.otto.de
    29.06.2015 09:23 Uhr

    […] are more advantages you can read about on our blog: Scaling with Microservices and Vertical Decomposition and Gibt es etwas zwischen Microservices und monolithischen Architekturen? […]

  • Scaling with Microservices and Vertical Decompo...
    22.08.2014 02:31 Uhr

    […] 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 ...  […]

  • Guido Steinacker
    12.08.2014 18:28 Uhr

    An interesting article about "Experiences from Failing with Microservices": http://t.co/L774siOoPJ

  • Von Monolithen und Microservices | dev.otto.de
    03.06.2015 11:25 Uhr

    […] Scaling with Microservices and Vertical Decomposition […]

  • Microservices時代のプロジェクト管理を考える (1) – 水平型から垂直型へ | ゆびてく
    14.04.2015 02:23 Uhr

    […] Scaling with Microservices and Vertical Decomposition | dev.otto.de […]

  • DevOps Collections #4 | …snapshots of relevance…
    06.11.2014 16:29 Uhr

    […] A nice complementary bullet point list to describe the nature and pros: Scaling with Microservices and Vertical Decomposition (Otto) […]

  • Microservice時代のプロジェクト管理を考える (1) – 水平型から垂直型へ | ゆびてく
    07.04.2015 14:17 Uhr

    […] Scaling with Microservices and Vertical Decomposition | dev.otto.de […]

  • Vortrag auf der MicroXchg 2015: “Gibt es etwas zwischen Microservices und monolithischen Architekturen?” | dev.otto.de
    20.02.2015 10:49 Uhr

    […] Weile entschieden, die vertikale Architektur durch Microservices zu ergänzen. Im dem Beitrag “Scaling with Microservices and Vertical Decomposition” könnt ihr weitere Details dazu lesen. Doch bei der Einführung von Microservices gelangt man […]

  • Reading list – 1/18/2015 – Architecture | Old Nerd
    19.01.2015 03:02 Uhr

    […] Scaling with Microservices and Vertical Decomposition Discussion of an ecommerce site going from a sort of SOA arch. toward microservices […]

  • A tale of two lambdas: The joys of working in a polyglot team. | dev.otto.de
    23.06.2015 22:43 Uhr

    […] As for the issue of the monolithic software, a lot has changed in quite a short period of  time. We moved from rather big vertically decomposed systems to micro-verticals and microservices. See for example Guido Steinacker’s post on that. […]

  • Seth Lachner (@Slestac)
    19.08.2014 14:46 Uhr

    Reminds me of the Intelligent Agent systems that we were all building in the 90's. Additionally the article is clear and concise, thank you for that.

  • Jan Stenberg
    31.07.2014 11:18 Uhr

    I listened to Oliver and Stefan at QCon earlier this year, and talked to Oliver afterwards. To me, the last picture looks more like a traditional Web Service Layered Architecture due to services using other services, and several services using the same database.

  • Guido Steinacker
    31.07.2014 12:36 Uhr

    Thanks for your feedback. The diagram was misleading, so I replaced it with a different one.

  • Why Microservices? | dev.otto.de
    20.03.2016 18:51 Uhr

    […] if this is one of the most important topics, because I’ve already covered this in some  earlier articles […]

  • "Self-contained Systems sind ein Sonderfall von Microservices" - JAXenter
    26.08.2016 11:53 Uhr

    […] der Logik getrnnt ist, haben Self-contained Services eine UI. Der Versandhändler Otto baut seine Webwendungen als Self-contained Systems, nennt diese aber “verticals”. Auch Galleria Kaufhof setzt auf das […]

Dein Kommentar
Antwort auf:  Direkt auf das Thema antworten
2813 + 3
Geschrieben von
Guido Steinacker
architecture

Ähnliche Artikel

  • OTTO and cloud computing – a wrap-up of my personal cloud strategy experience with OTTO
    01. Nov 2020
    Marco

    OTTO and cloud computing – a wrap-up of my personal cloud strategy experience with OTTO

    OTTO's history of using data centers is long and full of anecdotes. When I myself joined OTTO in 2009, most cloud providers ...
    architecturedevelopment
    mehr erfahren
  • Entwickeln für die OTTO-Plattform: Was haben wir bisher erreicht? | OTTO Tech-Blog
    02. Sep 2019
    Christian

    Entwickeln für die OTTO-Plattform: Was haben wir bisher erreicht? | OTTO Tech-Blog

    Wir bauen das Geschäftsmodell von OTTO vom Händler zur Plattform um. Unser Kollege Christian entwickelt für die OTTO-Plattform ...
    architectureproject management
    mehr erfahren
  • Pimp my SAP ERP
    07. Jun 2019
    Cyclenerd

    Pimp my SAP ERP

    ERP steht für Enterprise-Resource-Planning und ist das Hauptprodukt des deutschen Softwareherstellers SAP. Wir bilden mit den ...
    architecturedevelopment
    mehr erfahren

Dein Profil - Deine Vorteile

In deinem personalisierten Dashboard kannst du deine Bewerbungen verfolgen, zwischenspeichern und abschicken. Finde leicht Jobs, lies die wichstigsten Jobnews und Eventvorschläge und verfolge den aktuellen Stand deiner Bewerbung.

Jobticker & Jobnews
Jobticker & Jobnews

Jobticker & Jobnews

Gespeicherte Jobs
Gespeicherte Jobs

Gespeicherte Jobs

Laufende Bewerbungen
Laufende Bewerbungen

Laufende Bewerbungen

Bewerberstatus
Bewerberstatus
Bewerber­status
Profil anlegen

Jobticker

Abonniere hier unseren Jobticker, um wöchentlich per E-Mail über neue Jobs informiert zu werden.

Wähle bitte aus für welche Jobs du benachrichtigt werden möchtest.
Wähle bitte aus für welche Jobs du benachrichtigt werden möchtest.
E-Mail-Adresse nicht gültig

Folge uns.

 
 
 
 
 
 
 
 
 
 
 
 

Jobs

  • Jobsuche
  • Jobticker
  • Profilbereich

Deine Möglichkeiten

  • Einstiegsbereiche
  • Schüler*innen
  • Studierende
  • Berufseinsteiger*innen
  • Berufserfahrene

Technologie

  • Tech-Hub
  • Tech-Blog
  • Open Source Projekte
  • Arbeitsweisen
  • Teams
  • Tech-Gespräche mit Profis
Otto
Otto Group Karriere
Otto Unternehmen
Otto Newsroom
www.otto.de
Kontakt

Kontaktiere uns

Otto Campus
Werner-Otto-Straße 1-7
22179 Hamburg
jbttd

© Otto (GmbH & Co KG), 22179 Hamburg
  • Impressum
  • Datenschutz
Wie kann ich dir helfen? 
Chatbot

Otto und Partner brauchen für einzelne Datennutzungen deine Einwilligung, um dir unter anderem Informationen zu deinen Interessen anzuzeigen. Mit Klick auf „OK“ gibst Du diese Einwilligung. Deine Einwilligung kannst Du hier ablehnen.