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

Decouple all the things - asynchronous messaging keeps it simple

Decouple all the things - asynchronous messaging keeps it simple

Talk at arrrrcamp 2015

Kerstin Puschke

September 30, 2015
Tweet

More Decks by Kerstin Puschke

Other Decks in Technology

Transcript

  1. inform about update Master data updates need to propagate 12

    business partners master data business partner out of business orders support contracts
  2. downside of REST: master data app needs to know its

    clients 14 master data orders support contracts invoices
  3. amqp.org/about/what “The capable, commoditized, multi-vendor communications ecosystem which AMQP enables

    “The capable, commoditized, multi-vendor communications ecosystem which AMQP enables creates opportunities for commerce and innovation “The capable, commoditized, multi-vendor communications ecosystem which AMQP enables creates opportunities for commerce and innovation which can transform the way business is done “The capable, commoditized, multi-vendor communications ecosystem which AMQP enables creates opportunities for commerce and innovation which can transform the way business is done on the Internet “The capable, commoditized, multi-vendor communications ecosystem which AMQP enables creates opportunities for commerce and innovation which can transform the way business is done on the Internet, and in the Cloud.”
  4. Messages contain payload and routing key 21 Routing Key Payload

    •  application data – any form, any encoding… …and more •  Structured app-specific data (properties / attributes) •  Headers •  Annotations •  …
  5. Add consumers without touching producer 24 P X Q2 Q1

    C1 C2 Producer Exchange Queue Consumer
  6. Different messages for different client needs 26 master data client

    Owns additional data related to master data •  User account aka master data record removed Caches master data •  If master data updated or removed Mirrors master data •  Updated master data
  7. Why not include updated data? routing key <...>profile.updated payload 30

    { “user_id”: 42, “fields”: [“last_name”] }
  8. No guaranteed order – aim for commutativity Order of messages

    not guarantueed Commutativity Complement with synchronous API (e.g. REST) •  most recent data •  leading system •  message consumers follow up with REST if necessary Small payload •  easier on the broker •  just enough data for consumer to decide about making REST request 31
  9. No exactly-once delivery – aim for idem-potent messages Duplicated messages

    •  possible e.g. if producer re-sends message after connection failure •  use idem-potent message handling 32
  10. Centralized tracking of decentralized events 34 P1 P2 X Q

    C event to be tracked tracking counter ++
  11. Task / Command – consumer state to change 37 Message

    Broker X Q P C event / state change
  12. Run tasks asynchronously 39 Message Broker X Q P C

    image upload user facing image processing
  13. Improve response time, avoid downtimes, gain reliability 40 Message Broker

    X Q P C image upload user facing image processing
  14. Scaling on the fly 41 X Q C C P

    migration trigger data migration
  15. Test without impacting users 43 Message Broker X Q P

    C old app user facing shadow calls to new app
  16. Flexible Routing via different Exchange Types Direct Exchange •  routes

    to all queues whose binding_key equals routing_key Fanout Exchange •  broadcasts to every queue it has a binding for •  ignores routing key and queue name Topic Exchange •  dot-separated words as routing keys, plus wildcards •  routing on multiple attributes Header Exchange •  based on headers, not routing keys •  routing on multiple attributes 45
  17. In a nutshell •  Interoperability •  Improve response times • 

    Avoid downtimes •  Robustness & Reliability •  Scale on the fly •  Reduce complexity •  Simplify code 46
  18. Who am I Contact •  http://www.kpuschke.eu •  twitter: @titanoboa42 • 

    https://www.xing.com/profile/ Kerstin_Puschke Senior Software Engineer at XING Hamburg •  xing.com social network for business professionals •  debian, perl, javascript, ruby on rails, mysql, redis, riak, . . . We’re hiring! http://corporate.xing.com/ english/company/careers- at-xing/