dev-night@tradebyte.com | #devnightrises

Herzlich Willkommen!

Über das Event berichten:

#devnightrises


Bei Fragen:

dev-night@tradebyte.com

Transaction Patterns

Warum ist das nützlich?

Beispiel: Geldautomat


Was muss der Automat können?

  • Zusammenspiel von mehreren Diensten
  • Aktionen müssen korrekt ausgeführt werden
  • Ausfallsicherheit


Die Lösung: ACID!

Was wir uns ansehen werden


Quelle: Hillside PDF

Quelle: http://www.bsimard.com/presentation-neo4j

Das ACID Transaction pattern beschreibt wie man eine Transaction designen kann die niemals in einen inkonsistenten oder unerwarteten Zustand läuft.

Beispiel?


Quelle: Wikipedia

InnoDB

Atomicity


  • Autocommit Einstellung
  • COMMIT Statement
  • ROLLBACK Statement



START TRANSACTION;
UPDATE customers SET balance = 500 WHERE customer = 'Dennis';
COMMIT;
						

Consistency


  • InnoDB doublewrite buffer
  • InnoDB crash recovery


Isolation


  • Autocommit Einstellung
  • SET ISOLATION LEVEL Statement

Durability


Verschiedene Einstellung zur Anpassung an die Hardware. z.B.:

  • Autocommit Einstellung
  • Konfiguration zu innodb_file_per_table
  • Konfiguration zu sync_binlog

Quelle: Hillside PDF

Quelle: Hillside PDF

Quelle: Hillside PDF

Composite Transaction

Einfache Transactions sind leichter korrekt zu implementieren.
Daher kann man komplexere Transactions aus einfacheren ACID Transactions entwickeln.


Quelle: Hillside PDF

Two Phase Commit

Wenn eine Transaction aus simpleren Transactions besteht, sollten entweder alle erfolgreich durchlaufen oder alle abgebrochen werden.
Bei einem Abbruch sollten alle Objekte in dem Status vor der Transactions verbleiben.


Quelle: Hillside PDF

Quelle: Hillside PDF

Challenge

Mategetränke-Automat

Ihr sollt mit dem "Two Phase Commit"-Pattern einen verteilten Service erstellen, der aus folgenden Komponenten besteht.

  • AutomatenController
  • Geldannahme
  • Getränkeausgabe

Modalitäten

  • Zeit zum erstellen: ca. 1h 30m
  • Team sollten max. aus 2-3 Leuten bestehen.
  • Ein Team implementiert nur einen Service.
  • Wir wollen Clean Code schreiben.
  • Wir wollen Test First entwickeln.
  • Und am wichtigsten: Have fun! :)

Vielen Dank! :)