Microservice Architectures (MSA), WS21

Microservices sind ein Architekturstil, der die Entwicklung großer Softwaresysteme in weitgehend autarken Teams ermöglich. In diesem Kurs lernen Sie die wichtigsten Konzepte dazu kennen. Innerhalb eines relativ großen Projekts implementieren Sie selbst einen Service mit synchroner (REST) und asynchroner (Kafka-Events) Kommunikation.

Studiengang und Modulbeschreibung
Code & Context (Bachelor) (siehe auch Modulbeschreibung auf der Studiengangs-Seite)
Zeitraum und zeitliche Organisation der Veranstaltung
03.01.2022 - 14.01.2022. Organisiert als Blockkurs mit definierten Präsenzzeiten. Siehe unten für die genauen Daten.
Ort der Veranstaltung
Die Veranstaltung findet im Regelfall rein online statt.
Videokonferenz-Link: https://th-koeln.zoom.us/j/85846750101?pwd=THVKQjJGU2tRQ2hqQ1YzSSsrekxJdz09
ILIAS-Kurs zur Veranstaltung
https://ilias.th-koeln.de/ilias.php?ref_id=2122372&cmdClass=ilrepositorygui&cmdNode=wc&baseClass=ilrepositorygui
Anmeldung zur Veranstaltung
Bitte werden Sie Mitglied in diesem ILIAS-Kurs. Die Anmeldung ist möglich bis zum 20.12.2021.

Inhalt

Learning Outcome

Als Software-Entwickler:in kann ich mittlere bis große Software- und IT-Systeme konzipieren und umsetzen,

indem ich ...

damit ich auf diese Weise große digitale Produkte entwickeln kann, die ein komplexes, verteiltes Backend erfordern.

Organisation der Veranstaltung

Microservice Architectures (MSA) ist eine Blockveranstaltung in Code & Context in der Zeit von 03.01. bis 11.06.2021. Dabei wird es folgende Struktur geben:

Ein Feedback ist auch außerhalb der Workshop-Zeiten möglich, bevorzugt über Discord (siehe unten).

Fragen an Sie …

Vorbereitung auf den Kurs

Benotung

Die Benotung erfolgt in diesem Kurs in Teilgruppen, basieren auf einem Code Review des eigenen Players.

Minimalanforderungen an den Player

Sonstiges

Bewertung

Maximal sind 100 Punkte (+ 60 Bonus) zu erreichen. Zum Bestehen müssen 40 Punkte erreicht werden, eine 1,0 gibt es ab 90 Punkten.

  Max. Punkte Kriterien Max. Bonus Bonus-Kriterien
Player-Strategie und -Umsetzung 30 - geforderte Funktionalität umgesetzt 20 - originelle Steuerungs-/Strategie-Idee
- Grad der “Sophistication”
- ggfs. Clients oder sonstige “schöne” Ausgaben zur Visualisierung
Tactical DDD 30 - Entities und Value Objects richtig gewählt
- Business-Logik ist, wo möglich, im Domain Layer (nicht zu viel in den Services)
- Domain Primitives existieren, wo sinnvoll
- Aggregates sinnvoll geschnitten
- Alles in einem kompakten Domain Model dokumentiert
- Sinnvolle Application Services definiert
- Domain- und Application Layer in der Package-Struktur sauber getrennt
- -
REST API zur Player-Steuerung 15 - REST APIs bilden Aggregates ab
- REST APIs entsprechen REST-Standards
- Controller sind DDD-konform ausgelegt (keine Business-Logik, Aufruf von Application Services)
- alle geforderten REST-APIs umgesetzt
10 - deutlich mächtigeres REST-API als gefordert umgesetzt
Inter-Service-Kommunikation 15 - Synchrone Player-Commands an Game-Service umgesetzt
- Events zu den Kommando-Antworten sauber verarbeitet
10 - Events zu den Aktionen anderer Player abgehorcht und verarbeitet
Tests 10 - Wesentliche Teile der Funktionalität getestet 10 - sehr hohe Testabdeckung
- originelle Tests und Mocking
DevOps - - 10 - Build-Pipeline für Player definiert
- Player kann tatsächlich beim Codefight dabei sein
Summe 100   60  

Der Erfolg oder Misserfolg des eigenen Players beim Codefight zählt ausdrücklich NICHT für die Note. Hier geht es nur um den Spaß und die Ehre!

Zeitplan

Mo 03.01.22 - Motivation: Bearbeitung eines großen Softwareprojekts im Team

Ziel des Tages

Verstehen, wieso der richtige Schnitt bei großen Software-Systemen wichtig und schwierig ist. Am Beispiel des Microservice Dungeon Projekts einmal selbst durchspielen, wie man das machen könnte.

Agenda

Aufgabe für den nächsten Tag (freiwillig)

Di 04.01.22 - Ihr eigener (Player-)Service

Ziel des Tages

“Ankommen” im The Microservice Dungeon Projekt. Grobe Planung (Todos) für den eigenen Player-Service fertig haben.

Agenda

Aufgabe für den nächsten Tag (freiwillig)

Mi 05.01.22 - Selbstlerntag

Den Selbstlerntag haben Sie zur freien Gestaltung. Daher ist der Tag nicht verplant. Wenn Sie aber trotzdem etwas tun wollen, dann machen Sie doch das folgende:

Do 06.01.22 - Synchrone Kommunikation: Aggregates & REST

Ziel des Tages

Konzepte der synchronen Kommunikation in verteilten System (Aggregates, REST) verstanden und für den eigenen Player spezifiziert.

Agenda

Aufgabe für den nächsten Tag (freiwillig)

Schauen Sie mal die Repos der Services in der Microservice-Dungeon-Organisation auf Github durch. Wie “REST-konform” sind die REST APIs dort?

Fr 07.01.22 - Implementing REST API

Ziel des Tages

Verstehen, wie man einen REST-Controller schreibt (der einen REST-Endpunkt zur Verfügung stellt).

Agenda

Aufgabe für den nächsten Tag (freiwillig)

Schauen Sie sich im Nachgang auch noch einmal die folgenden Lehrvideos zum Thema “REST-Implementierung” an:

Mo 10.01.22 - Inter-Service-Kommunikation

Ziel des Tages

Verstehen, wie man 1) aus dem Backend heraus einen anderen REST-Endpunkt ruft (und das testet), und 2) mehr Klarheit, was Apache Kafka ist, und wie man einen Kafka-Event im eigenen Code konsumiert.

Agenda

Aufgabe für den nächsten Tag

Bitte schauen Sie sich unsere drei Kafka-Videos an.

Di 11.01.22 - Intra-Service-Architektur

Ziel des Tages

Grundsätzlich verstanden, was der Unterschied synchron / asynchron bedeutet, und vor allem auch, wieso asynchrone Kommunikation zu einer losen Kopplung führt. Recap: Was sollte ich beachten, wenn ich einen Service implementiere.

Agenda

Aufgabe für den nächsten Tag (freiwillig)

(to be done)

Mi 12.01.22 - Selbstlerntag

Den Selbstlerntag haben Sie zur freien Gestaltung. Daher ist der Tag nicht verplant. Wenn Sie aber trotzdem etwas tun wollen, dann arbeiten Sie am besten an Ihrem Player Service weiter

Do 13.01.22 - Hosting von Microservices

Ziel des Tages

Klarheit gewonnen, was DevOps ist und warum man als Coder:in auch das Hosting im Griff haben sollte. Verstanden, wie die Pipeline im The Microservice Dungeon Projekt funktioniert, und den eigenen Player-Service dort integriert. Außerdem die lokale Testumgebung (basierend auf Docker) startbereit.

Optional: Einen groben Überblick gewonnen, was in der Kommunikation bei verteilten Systemen alles schief gehen kann - und was man (so ungefähr) dagegen tun kann.

Agenda

(to be done)

Aufgabe für den nächsten Tag (freiwillig)

(to be done)

Fr 14.01.22 - Codefight Teil 1

Ziel des Tages

Eigener Player ist soweit lauffähig, dass er zumindest mal ein bisschen mitlaufen kann!

Agenda

(to be done)

Literatur

Hier finden Sie bewusst eine längere Liste zum Weiterlesen. Die aus meiner Sicht wichtigsten Titel sind fettgedruckt.

  1. Bente, S., Deterling, J., Reitano, M., & Schmidt, M. (2020, March 27). Sieben Weggabelungen—Wegweiser im DDD-Dschungel. JavaSPEKTRUM, 2020(02), 28–31.
  2. Dowalil, H. (2019). Modulith First! Der angemessene Weg zu Microservices. Informatik Aktuell. URL
  3. Evans, E. (2015). Domain-Driven Design Reference—Definitions and Pattern Summaries. Domain Language, Inc. URL
  4. Evans, E. (2003). Domain-Driven Design: Tackling Complexity in the Heart of Software (1st edition). Addison-Wesley Professional.
  5. Fielding, Roy Thomas. (2000). Architectural styles and the design of network-based software architectures, University of California, Irvine. URL
  6. Fowler, M. (2010, March 18). Richardson Maturity Model. martinfowler.com. URL
  7. Fowler, M. (2014, January 15). Bounded Context. martinfowler.com. URL
  8. Fowler, M. (2017, February 7). What do you mean by “Event-Driven”? martinfowler.com. URL
  9. Gauder, S. (2019, April 1). A competitive food retail architecture with microservices. microxchg 2019. URL
  10. Graca, H. (2017, November 16). DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together. @hgraca. URL
  11. Levin, G. (2017, March 25). Internal vs. External APIs. REST API and Beyond. URL
  12. Lilienthal, C. (2019, March 25). Von Monolithen über modulare Architekturen zu Microservices mit DDD. JAX 2020. URL
  13. Massé, M. (2011). REST API Design Rulebook (1st ed.). O’Reilly and Associates.
  14. Newman, S. (2021). Building Microservices: Designing Fine-Grained Systems (2nd ed.). O’Reilly and Associates.
  15. Richardson, C. (2015, May 19). Introduction to Microservices. NGINX. URL
  16. Samokhin, V. (2018, January 18). DDD Strategic Patterns: How to Define Bounded Contexts - DZone Microservices. Dzone.Com. URL
  17. Steinacker, G. (2016, March 20). Why Microservices? Dev.Otto.De. URL
  18. Sturgeon, P. (2017, January 24). GraphQL vs REST: Overview. Phil Sturgeon. URL
  19. Tilkov, S., Eigenbrodt, M., Schreier, S., & Wolf, O. (2015). REST und HTTP: Entwicklung und Integration nach dem Architekturstil des Web (3., akt. u. erw. Aufl.). dpunkt.verlag GmbH.
  20. Vernon, V. (2013). Implementing Domain-Driven Design (01 ed.). Addison Wesley.
  21. Wolff, E. (2015). Microservices: Grundlagen flexibler Softwarearchitekturen (1., Auflage). dpunkt.verlag.
  22. Wolff, E. (2016b, November 29). Self-contained Systems: A Different Approach to Microservices. InnoQ Blog. URL