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

Landelijk Architectuur Congres - The dark side of event sourcing: managing data conversion

Landelijk Architectuur Congres - The dark side of event sourcing: managing data conversion

Evolving software systems includes data schema changes, and because of those schema changes data has to be converted. Data conversion in event sourced systems introduces new challenges, because of the relative novelty of the event sourcing architectural pattern, because of the lack of standardized tools for data conversion, and because of the large amount of data that is stored in typical event stores. We addresses the challenge of schema evolution and the resulting data conversion for event sourced systems.

Michiel Overeem

November 15, 2018
Tweet

More Decks by Michiel Overeem

Other Decks in Technology

Transcript

  1. The Dark Side of Event Sourcing:
    Managing Data Conversion
    Michiel Overeem, Marten Spoor, Slinger Jansen
    M. Overeem, M. Spoor, and S. Jansen, “The Dark Side of Event
    Sourcing: Managing Data Conversion,” in IEEE 24th International
    Conference on Software Analysis, Evolution and Reengineering
    (SANER), 2017, pp. 193–204.

    View Slide

  2. Event sourcing 101
    accountId balance owner
    1234567 0 Michiel
    Current state Event sourcing
    Event
    BankAccountCreated
    (accountId: 1234567, balance: 0, owner: Michiel)
    M. Fowler, “Event sourcing,” http://martinfowler.com/eaaDev/EventSourcing.html, 2005.

    View Slide

  3. Event sourcing 101
    accountId balance owner
    1234567 100 Michiel
    Current state Event sourcing
    Event
    BankAccountCreated
    (accountId: 1234567, balance: 0, owner: Michiel)
    DepositPerformed
    (accountId : 1234567, amount: 100, balance: 100)
    M. Fowler, “Event sourcing,” http://martinfowler.com/eaaDev/EventSourcing.html, 2005.

    View Slide

  4. Event sourcing 101
    Event
    BankAccountCreated
    (accountId: 1234567, balance: 0, owner: Michiel)
    DepositPerformed
    (accountId : 1234567, amount: 100, balance: 100)
    WithdrawalPerformed
    (accountId: 1234567, amount: 50, balance: 50)
    accountId balance owner
    1234567 50 Michiel
    Current state Event sourcing
    M. Fowler, “Event sourcing,” http://martinfowler.com/eaaDev/EventSourcing.html, 2005.

    View Slide

  5. Event sourcing 101
    Event
    BankAccountCreated
    (accountId: 1234567, balance: 0, owner: Michiel)
    DepositPerformed
    (accountId : 1234567, amount: 100, balance: 100)
    WithdrawalPerformed
    (accountId: 1234567, amount: 50, balance: 50)
    OwnerChanged
    (accountId: 1234567, newOwner: Marten)
    accountId balance owner
    1234567 50 Marten
    Current state Event sourcing
    M. Fowler, “Event sourcing,” http://martinfowler.com/eaaDev/EventSourcing.html, 2005.

    View Slide

  6. Sure, but this is normal for
    transactions …

    View Slide

  7. Event sourcing 101
    Event
    ShoppingCartCreated
    (cartid: 1234567, user: Michiel)
    cartid articles user
    1234567 0 Michiel
    Current state Event sourcing
    M. Fowler, “Event sourcing,” http://martinfowler.com/eaaDev/EventSourcing.html, 2005.
    cartid article

    View Slide

  8. Event sourcing 101
    Event
    ShoppingCartCreated
    (cartid: 1234567, user: Michiel)
    ArticleAddedToCart(cartid: 1234567, article:
    Lumia 950)
    cartid articles user
    1234567 1 Michiel
    Current state Event sourcing
    cartid article
    1234567 Lumia 950
    M. Fowler, “Event sourcing,” http://martinfowler.com/eaaDev/EventSourcing.html, 2005.

    View Slide

  9. Event sourcing 101
    cartid articles user
    1234567 0 Michiel
    Current state Event sourcing
    cartid article
    Event
    ShoppingCartCreated
    (cartid: 1234567, user: Michiel)
    ArticleAddedToCart(cartid: 1234567, article:
    Lumia 950)
    ArticleRemovedFromCart(cartid: 1234567,
    article: Lumia 950)
    M. Fowler, “Event sourcing,” http://martinfowler.com/eaaDev/EventSourcing.html, 2005.

    View Slide

  10. Event sourcing 101
    cartid articles user
    1234567 1 Michiel
    Current state Event sourcing
    cartid article
    1234567 iPhone X
    Event
    ShoppingCartCreated
    (cartid: 1234567, user: Michiel)
    ArticleAddedToCart(cartid: 1234567, article:
    Lumia 950)
    ArticleRemovedFromCart(cartid: 1234567,
    article: Lumia 950)
    ArticleAddedToCart(cartid: 1234567, article:
    iPhone X)
    M. Fowler, “Event sourcing,” http://martinfowler.com/eaaDev/EventSourcing.html, 2005.

    View Slide

  11. Event sourcing 101
    cartid articles user
    1234567 1 Michiel
    Current state Event sourcing
    cartid article
    1234567 iPhone X
    Event
    ShoppingCartCreated
    (cartid: 1234567, user: Michiel)
    ArticleAddedToCart(cartid: 1234567, article:
    Lumia 950)
    ArticleRemovedFromCart(cartid: 1234567,
    article: Lumia 950)
    ArticleAddedToCart(cartid: 1234567, article:
    iPhone X)
    M. Fowler, “Event sourcing,” http://martinfowler.com/eaaDev/EventSourcing.html, 2005.

    View Slide

  12. Command Query Responsibility Segregation (CQRS) 101
    The command side is only
    responsible for data
    modifications. It does not return
    data.
    The query side only reads and
    returns data, it does not modify it.
    Events make sure that data
    modifications are propogated to
    the query-side.
    G. Young, “CQRS and Event Sourcing,” http://codebetter.com/gregyoung/2010/02/13/cqrs-and-event-sourcing, 2010.

    View Slide

  13. Command Query Responsibility Segregation (CQRS) 101
    These events could be communicated
    through an servicebus.
    But they could also be stored as an
    append-only log.
    G. Young, “CQRS and Event Sourcing,” http://codebetter.com/gregyoung/2010/02/13/cqrs-and-event-sourcing, 2010.

    View Slide

  14. Why event sourcing
    In the era of cloud platforms and microservices, events are the way of
    communication.
    Storing those events improves the
    1. anticipation on new business requirements, and
    2. continuation of the operation of the platform.

    View Slide

  15. Shining light on the dark side
    Practitioners often just follow
    ▪CQRS and Event Sourcing are trending, and sometimes even seen as
    silver bullets.
    ▪Many practitioners start out without reviewing the consequences.
    ▪The community often gives simple answers without taking the context
    into account.
    RQ: How can an event sourced system be upgraded efficiently when the
    (implicit) event schema changes?

    View Slide

  16. Challenges for upgrades of event sourced systems
    • More data than traditional current view.
    • No standardized language (like SQL) that helps in expressing
    transformations.
    And in a cloud platform:
    • Zero-downtime is needed for data transformations

    View Slide

  17. Research approach
    ▪ We have created an inventory of the
    operations that can be used to transform
    the event store,
    ▪ We mapped the operations onto
    techniques that can execute those,
    ▪ The techniques are linked to strategies,
    that in turn can be used to deploy the data
    transformations.
    The framework is validated with three
    renowned experts. Part of it is implemented
    as an exploration.
    Combined with
    Deployed with
    Executed by
    Executed by
    Data upgrade
    Application upgrade
    Lazy transformation
    Upcasting
    In place
    transfor-
    mation
    Multiple versions
    Copy and
    transfor-
    mation
    Basic &
    Complex
    Event
    Basic &
    Complex
    Stream
    Basic
    Store
    Complex
    Store
    Big Flip
    Rolling
    Upgrade
    Blue-Green
    Expand-
    Contract
    Blue-
    Green
    Deployed with

    View Slide

  18. Basic Event
    Operations
    Complex
    Event
    Operations
    Basic Stream
    Operations
    Complex
    Stream
    Operations
    Basic Store
    Operations
    Complex Store
    Operations
    Store
    Backaccount Stream #1234567
    BankAccountCreated DepositPerformed WithdrawalPerformed
    Operations

    View Slide

  19. The framework
    Combined with
    Deployed with
    Executed by
    Executed by
    Data upgrade
    Application upgrade
    Lazy transformation
    Upcasting
    In place
    transfor-
    mation
    Multiple versions
    Copy and
    transfor-
    mation
    Basic &
    Complex
    Event
    Basic &
    Complex
    Stream
    Basic
    Store
    Complex
    Store
    Big Flip
    Rolling
    Upgrade
    Blue-Green
    Expand-
    Contract
    Blue-
    Green
    Deployed with
    At the top an inventory of operations.

    View Slide

  20. Multiple versions
    Techniques
    Multiple versions of an event type are supported
    throughout the application.
    D. Betts, J. Dominguez, G. Melnik, F. Simonazzi, and M. Subramanian, Exploring CQRS and Event Sourcing: A journey into high scalability,
    availability, and maintainability with Windows Azure. Microsoft patterns & practices, 2013.

    View Slide

  21. Multiple versions
    Techniques
    Multiple versions of an event type are supported
    throughout the application.
    Axon Framework, “Reference Guide Axon Framework reference guide - Event Upcasting.” 2016.
    Upcasting
    Introduce a central component that transforms an event
    before offering it to the application.

    View Slide

  22. Multiple versions
    Techniques
    Multiple versions of an event type are supported
    throughout the application.
    P. J. Sadalage and M. Fowler, NoSQL distilled: a brief guide to the emerging world of polyglot persistence. Addison-Wesley, 2012.
    Upcasting
    Introduce a central component that transforms an event
    before offering it to the application.
    Lazy transformation
    Store the result of the transformation permanently in the
    event store.

    View Slide

  23. Multiple versions
    Techniques
    Multiple versions of an event type are supported
    throughout the application.
    S. Scherzinger, M. Klettke, and U. Störl, “Cleager: Eager Schema Evolution in NoSQL Document Stores,” Datenbanksysteme f{ü}r Business,
    Technol. und Web (BTW), 16. Fachtagung des GI-Fachbereichs “Datenbanken und Informationssysteme” (DBIS),
    Upcasting
    Introduce a central component that transforms an event
    before offering it to the application.
    Lazy transformation
    Store the result of the transformation permanently in the
    event store.
    In place transformation
    A batch job that eagerly reads the data, transforms it, and
    writes the updated data back to the database.

    View Slide

  24. Multiple versions
    Techniques
    Multiple versions of an event type are supported
    throughout the application.
    M. Callaghan, “Facebook - Online Schema Change for MySQL,” 2010. https://www.facebook.com/notes/mysql-at-facebook/online-schema-
    change-for-mysql/430801045932/.
    Upcasting
    Introduce a central component that transforms an event
    before offering it to the application.
    Lazy transformation
    Store the result of the transformation permanently in the
    event store.
    In place transformation
    A batch job that eagerly reads the data, transforms it, and
    writes the updated data back to the database.
    Copy and transformation
    Copies and transforms every event to a new store.

    View Slide

  25. Multiple versions
    Techniques
    Multiple versions of an event type are supported
    throughout the application.
    M. Callaghan, “Facebook - Online Schema Change for MySQL,” 2010. https://www.facebook.com/notes/mysql-at-facebook/online-schema-
    change-for-mysql/430801045932/.
    Upcasting
    Introduce a central component that transforms an event
    before offering it to the application.
    Lazy transformation
    Store the result of the transformation permanently in the
    event store.
    In place transformation
    A batch job that eagerly reads the data, transforms it, and
    writes the updated data back to the database.
    Copy and transformation
    Copies and transforms every event to a new store.

    View Slide

  26. The framework
    Combined with
    Deployed with
    Executed by
    Executed by
    Data upgrade
    Application upgrade
    Lazy transformation
    Upcasting
    In place
    transfor-
    mation
    Multiple versions
    Copy and
    transfor-
    mation
    Basic &
    Complex
    Event
    Basic &
    Complex
    Stream
    Basic
    Store
    Complex
    Store
    Big Flip
    Rolling
    Upgrade
    Blue-Green
    Expand-
    Contract
    Blue-
    Green
    Deployed with
    Techniques that execute the identified
    operations:
    ▪ at run-time or at deploy-time,
    ▪ through schema evolution or schema
    versioning.

    View Slide

  27. Expand-Contract
    Strategies
    Three phase change: first expand, then update all
    concumers, then contract.
    D. Sato, “ParallelChange,” 2014. http://martinfowler.com/bliki/ParallelChange.html.

    View Slide

  28. Expand-Contract
    Strategies
    Three phase change: first expand, then update all
    concumers, then contract.
    J. Humble and D. Farley, Continuous delivery: reliable software releases through build, test, and deployment automation. Addison-Wesley
    Professional, 2010.
    Blue-Green
    Use two slots for deployment and toggle between them.

    View Slide

  29. Expand-Contract
    Strategies
    Three phase change: first expand, then update all
    concumers, then contract.
    T. Dumitras, P. Narasimhan, and E. Tilevich, “To Upgrade or Not to Upgrade Impact of Online Upgrades across Multiple Administrative
    Domains,” ACM SIGPLAN Not., vol. 45, no. 10, pp. 865–876, 2010.
    Blue-Green
    Use two slots for deployment and toggle between them.
    Rolling upgrade
    Upgrade machine for machine.

    View Slide

  30. Expand-Contract
    Strategies
    Three phase change: first expand, then update all
    concumers, then contract.
    E. A. Brewer, “Lessons from Giant-Scale Services,” {IEEE} Internet Comput., vol. 5, no. 4, pp. 46–55, 2001.
    Blue-Green
    Use two slots for deployment and toggle between them.
    Rolling upgrade
    Upgrade machine for machine.
    Big Flip
    Flip the switch after updating half the machines.

    View Slide

  31. Framework
    ▪ An upfront design and decision
    support tool, to design the upgrade
    system of your platform
    Combined with
    Deployed with
    Executed by
    Executed by
    Data upgrade
    Application upgrade
    Lazy transformation
    Upcasting
    In place
    transfor-
    mation
    Multiple versions
    Copy and
    transfor-
    mation
    Basic &
    Complex
    Event
    Basic &
    Complex
    Stream
    Basic
    Store
    Complex
    Store
    Big Flip
    Rolling
    Upgrade
    Blue-Green
    Expand-
    Contract
    Blue-
    Green
    Deployed with

    View Slide

  32. Expert interviews
    Three dutch experts (all have +6 years experience, and are part of the international
    community) were interviewed.
    • Naming issues came up
    • Frequency of operations was discussed
    • Technical versus functional immutability
    “You are maybe the only one, who has such an overview and also
    thought about edge cases, which I hope never to encounter. ”
    “Event sourcing needs a lot of upfront thought, which is hard to do with
    agile development. ”

    View Slide

  33. Framework
    ▪ By implementing two lanes, an
    automated upgrade system can be
    built.
    Combined with
    Deployed with
    Executed by
    Executed by
    Data upgrade
    Application upgrade
    Upcasting
    Copy and
    transfor-
    mation
    Basic &
    Complex
    Event
    Basic &
    Complex
    Stream
    Basic
    Store
    Complex
    Store
    Big Flip
    Rolling
    Upgrade
    Blue-Green
    Blue-
    Green
    Deployed with

    View Slide

  34. Reach us at [email protected]
    Event sourcing is the pattern for SaaS
    platforms, because it does not lose data that
    is found to be useful later on.
    But more research is needed to formulate
    effective strategies on implementing event
    sourcing.

    View Slide