Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Transaktionen in Java

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Transaktionen in Java

Avatar for Mike Wiesner

Mike Wiesner

April 24, 2013
Tweet

More Decks by Mike Wiesner

Other Decks in Programming

Transcript

  1. Wieso Transaktionen? •  Datenintegrität – Alles oder nichts (Atomic) – Konsistenz der

    Daten (Consistency) – Abgrenzung der Transaktionen (Isolation) – Dauerhafte Speicherung (Durable) •  = ACID
  2. Transaktionen = ACID? •  Klassische ACID-Transaktionen sind sehr beliebt, da

    – gute Unterstützung in Frameworks und App Servern – hohe Garantien – wenig Fehlerquellen •  Aber: Der Transaktionsbegriff kann viel allgemeiner gesehen werden...
  3. ACID in Java •  Viele verschiedene APIs: – JDBC – Hibernate – JPA

    (Java Persistence API) – JMS (Java Message Service) – JTA (Java Transaction API) •  Jeweils: Transaktionsklammer mit spezifischer Semantik
  4. Und wie wird es gemacht? •  Programmatische Transaktionssteuerung – begin/commit/rollback API

    – JTA, JDBC, JMS, JPA, Hibernate •  Deklarative Transaktionsdemarkation – EJB CMT (auf Basis von JTA) – Spring Framework (alle oben genannten)
  5. Was ist JTA genau? •  API zur Transaktionssteuerung •  Kernkonzept:

    Transaktionskoordinator mit mehreren XA Resource Managers – XA-Protokoll wird zur Kommunikation zwischen Koordinator und Resource Manager verwendet •  Ermöglicht ressourcenübergreifende Transaktionen
  6. TX mit DB, JMS und JTA DB App JTA Commit

    TX Queue Commit TX Commit TX Log Log Log
  7. Log TX mit 2 DBs und JTA DB App JTA

    Commit TX Commit TX Commit TX DB Log Log
  8. 2 Phase Commit (2PC) •  Pattern für verteilte Transaktionen mit

    ACID-Garantien •  Erste Phase: – Prepare: Können alle Ressourcen einen Commit durchführen? •  Zweite Phase: – Commit: Sofern alle beteiligten Ressourcen das Prepare bestätigt haben...
  9. XA •  Standardisiertes Koordinationsprotokoll für 2PC •  Spezifiziert durch X/Open

    Group •  Benötigt dezidierte XA-Treiber für alle beteiligten Ressourcen – Datenbanken – Message Broker – etc
  10. JTA •  API, welche XA zur Transaktionskoordination benutzt •  Zentrale

    Rolle in der Java EE •  Standalone-Implementierungen verfügbar (Atomikos, ...) •  Eine der möglichen Transaktionsmanagement-Optionen beim Spring Framework
  11. 2PC erfordert Recovery •  Was passiert, wenn eine Ressource nach

    der Prepare-Phase nicht mehr erreichbar ist? – Fehler in der 2. Phase verletzen das „Alles- Oder-Nichts“ Prinzip – Muss durch Recovery beseitigt werden... falls möglich.
  12. Recovery-Protokoll •  Alle beteiligten Ressourcen und der Transaktionskoordinator protokollieren den

    jeweiligen Status der Transaktion •  Transaktions-Recovery anhand dieses Protokolls grundsätzlich möglich •  Protokollierungsaufwand ist Hauptgrund für Performance-Verlust
  13. TX mit DB, JMS – Best Effort (1) DB App

    Commit TX (1) Queue Commit TX (2) Nachricht in DB, nicht mehr in Queue
  14. TX mit DB, JMS – Best Effort (2) DB App

    Rollback TX (1) Queue Rollback TX (2) Nachricht zurück in Queue, nicht in DB
  15. TX mit DB, JMS – Best Effort (3) DB App

    Commit TX (1) Queue Rollback TX (2) Nachricht in DB, aber auch wieder in Queue – Duplicate Message Detection notwendig
  16. TX mit DB, JMS – Best Effort (4) DB App

    Rollback TX (2) Queue Commit TX (1) Nachricht verloren durch falsche Reihenfolge – bei vernünftigem Arrangement nicht möglich
  17. Fazit •  Tradeoff zwischen Verfügbarkeit/ Durchsatz und sofortiger Konsistenz • 

    XA: generische Konsistenzgarantien zu einem hohen Preis •  Best Effort a la Duplicate Message Detection oft der bessere Tradeoff – unter Berücksichtigung der spezifischen Anwendung