$30 off During Our Annual Pro Sale. View Details »

Change Data Streaming Patterns in Distributed Systems @ TheDevConf (TDC) Connections 2021

Change Data Streaming Patterns in Distributed Systems @ TheDevConf (TDC) Connections 2021

Abstract

Microservices are one of the biggest trends in software engineering: organising functionality in self-contained, loosely coupled services lets teams make the most suitable technical decisions and react quickly to new requirements.

In this session we'll discuss how change data capture (CDC) with Debezium can help developers with challenges they face when working on microservices. Join us to learn how to:

* Employ the outbox pattern for reliable data exchange between microservices
* Gradually extract microservices from existing monolithic applications with the strangler fig pattern
* Coordinate long-running business transactions across multiple services using CDC-based saga orchestration

NOTE: There was no recording of this session AFAIK

Hans-Peter Grahsl

June 10, 2021
Tweet

More Decks by Hans-Peter Grahsl

Other Decks in Programming

Transcript

  1. Gunnar Morling
    Software Engineer, Red Hat
    @gunnarmorling
    Hans-Peter Grahsl
    Technical Trainer, Netconomy
    @hpgrahsl
    Change Data Streaming Patterns
    in Distributed Systems

    View Slide

  2. #CDCPatterns @gunnarmorling @hpgrahsl
    … implemented using Change Data Capture
    Today’s Objectives

    View Slide

  3. #CDCPatterns @gunnarmorling @hpgrahsl
    ● Open source software engineer at Red Hat
    ○ Debezium
    ○ Quarkus
    ● Spec Lead for Bean Validation 2.0
    ● Java Champion
    ● @gunnarmorling
    Gunnar Morling

    View Slide

  4. #CDCPatterns @gunnarmorling @hpgrahsl
    ● Technical Trainer at NETCONOMY
    ● Independent Engineer & Consultant
    ● Confluent Community Catalyst
    ● MongoDB Champion
    ● @hpgrahsl
    Hans-Peter Grahsl

    View Slide

  5. #CDCPatterns @gunnarmorling @hpgrahsl
    ● Taps into TX log to capture INSERT/UPDATE/DELETE events
    ● Propagated to consumers via Apache Kafka and Kafka Connect
    Debezium — Log-based Change Data Capture

    View Slide

  6. #CDCPatterns @gunnarmorling @hpgrahsl
    ● Message Key: table PK
    ● Message Value:
    ■ Old and new row state
    ■ Metadata on table, TX id, etc.
    ■ Operation type, timestamp
    ● Serialized as JSON, Avro, etc.
    Detour: Data Change Events

    View Slide

  7. #CDCPatterns @gunnarmorling @hpgrahsl
    ● Message Key: table PK
    ● Message Value:
    ■ Old and new row state
    ■ Metadata on table, TX id, etc.
    ■ Operation type, timestamp
    ● Serialized as JSON, Avro, etc.
    Detour: Data Change Events

    View Slide

  8. #CDCPatterns @gunnarmorling @hpgrahsl
    ● Message Key: table PK
    ● Message Value:
    ■ Old and new row state
    ■ Metadata on table, TX id, etc.
    ■ Operation type, timestamp
    ● Serialized as JSON, Avro, etc.
    Detour: Data Change Events

    View Slide

  9. Outbox Pattern

    View Slide

  10. #CDCPatterns @gunnarmorling @hpgrahsl
    ● Services need to update their database,
    ● send messages to other services,
    ● and that consistently!
    The Problem: Microservices Data Exchange

    View Slide

  11. #CDCPatterns @gunnarmorling @hpgrahsl
    “Dual writes” are prone to inconsistencies!
    Outbox Pattern

    View Slide

  12. #CDCPatterns @gunnarmorling @hpgrahsl
    Outbox Pattern

    View Slide

  13. #CDCPatterns @gunnarmorling @hpgrahsl
    Outbox Pattern

    View Slide

  14. #CDCPatterns @gunnarmorling @hpgrahsl
    Outbox Pattern

    View Slide

  15. #CDCPatterns @gunnarmorling @hpgrahsl
    Outbox Pattern

    View Slide

  16. Strangler Fig Pattern

    View Slide

  17. #CDCPatterns @gunnarmorling @hpgrahsl
    ● Gradually evolve from old into new
    ● Support temporary coexistence
    ● Avoid big bang cut-over
    The Problem: Migrating Systems

    View Slide

  18. #CDCPatterns @gunnarmorling @hpgrahsl
    Strangler Fig Pattern

    View Slide

  19. #CDCPatterns @gunnarmorling @hpgrahsl
    Strangler Fig Pattern

    View Slide

  20. #CDCPatterns @gunnarmorling @hpgrahsl
    Strangler Fig Pattern

    View Slide

  21. #CDCPatterns @gunnarmorling @hpgrahsl
    Strangler Fig Pattern

    View Slide

  22. #CDCPatterns @gunnarmorling @hpgrahsl
    Strangler Fig Pattern

    View Slide

  23. #CDCPatterns @gunnarmorling @hpgrahsl
    Strangler Fig Pattern

    View Slide

  24. #CDCPatterns @gunnarmorling @hpgrahsl
    Strangler Fig Pattern

    View Slide

  25. #CDCPatterns @gunnarmorling @hpgrahsl
    ● Incremental migration → “baby steps”
    ● Pause or stop migration
    without losing spent efforts
    ● Migration steps ideally reversible
    Rationale: ⚠ minimize risk ⚠
    Benefits

    View Slide

  26. #CDCPatterns @gunnarmorling @hpgrahsl
    CDC Close-Up

    View Slide

  27. #CDCPatterns @gunnarmorling @hpgrahsl
    Enhanced CDC Processing

    View Slide

  28. #CDCPatterns @gunnarmorling @hpgrahsl
    Enhanced CDC Processing

    View Slide

  29. #CDCPatterns @gunnarmorling @hpgrahsl
    Enhanced CDC Processing

    View Slide

  30. Saga Pattern

    View Slide

  31. #CDCPatterns @gunnarmorling @hpgrahsl
    ● Multiple services need to act collaboratively
    to achieve a consistent outcome
    ● Without 2-phase commit protocols
    ● Ensure correctness in case of failures
    The Problem: Long-running Business Transactions

    View Slide

  32. #CDCPatterns @gunnarmorling @hpgrahsl
    Saga Pattern

    View Slide

  33. #CDCPatterns @gunnarmorling @hpgrahsl
    Saga Pattern

    View Slide

  34. #CDCPatterns @gunnarmorling @hpgrahsl
    Saga Pattern

    View Slide

  35. Demo

    View Slide

  36. Wrap-Up

    View Slide

  37. #CDCPatterns @gunnarmorling @hpgrahsl
    ● CDC: a powerful tool in the box for
    event-driven architectures
    ● Debezium: open-source CDC for
    a variety of databases
    ● Call to Action:
    Would you like built-in Saga support?
    Takeaways

    View Slide

  38. #CDCPatterns @gunnarmorling @hpgrahsl
    ● Outbox implementation
    https://debezium.io/blog/2019/02/19/reliable-microservices-data
    -exchange-with-the-outbox-pattern/
    ● Strangler fig pattern
    https://martinfowler.com/bliki/StranglerFigApplication.html
    ● Saga implementation
    https://www.infoq.com/articles/saga-orchestration-outbox/
    ● Demo repo
    https://github.com/debezium/debezium-examples
    Resources

    View Slide

  39. #CDCPatterns @gunnarmorling @hpgrahsl
    Q & A
    [email protected]
    @gunnarmorling
    📧 [email protected]
    @hpgrahsl
    📧
    Thank You!

    View Slide

  40. #CDCPatterns @gunnarmorling @hpgrahsl
    Unsplash https://unsplash.com/license
    © Jérôme Prax https://unsplash.com/photos/U_m-mPOZzMI
    © Pablo García Saldaña https://unsplash.com/photos/lPQIndZz8Mo
    © David Clode https://unsplash.com/photos/T49WTav4LgU
    © Aaron Burden https://unsplash.com/photos/GFpxQ2ZyNc0
    © Nathan Dumlao https://unsplash.com/photos/wQDysNUCKfw
    © mari lezhava https://unsplash.com/photos/q65bNe9fW-w
    © Michał Parzuchowski https://unsplash.com/photos/Bt0PM7cNJFQ
    © Charles Forerunner https://unsplash.com/photos/3fPXt37X6UQ
    Flickr
    Attribution 2.0 Generic https://creativecommons.org/licenses/by/2.0/
    © Thomas Kamann https://flic.kr/p/coa2c
    CC0 1.0 Universal Public Domain Dedication https://creativecommons.org/publicdomain/zero/1.0/
    © Wall Boat https://flic.kr/p/Y6zkmX
    Attribution-ShareAlike 2.0 Generic https://creativecommons.org/licenses/by-sa/2.0/
    © Maria Eklind https://flic.kr/p/251HmVw
    Image Credits
    In Order of Appearance

    View Slide