RabbitMQ + CouchDB = Awesome

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    7 Favorites

    RabbitMQ + CouchDB = Awesome - Presentation Transcript

    1. one system to rule them all
    2. the challenge
    3. • write a backend that scales well • handle various frontends (web, iPhone, ...) • runs “somewhere in the cloud” • easy to maintain and extend
    4. the solution
    5. RabbitMQ +CouchDB =Awesome
    6. Part I
    7. RabbitMQ • AMQP based Message Queue • lots of additional transports (XMPP, HTTP, STOMP, ...) • erlang based
    8. frontend frontend frontend daemon RabbitMQ daemon daemon daemon
    9. • every functionality gets a backed daemon • every daemon has a queue associated • communication via a JSON message that gets passed around
    10. the JSON message
    11. { "response": { "expiry": 710, "ts": "1234425918", "name": "Lenz Gschwendtner", "last4": 0, "cc_type": "master" }, "data": { "options": { "billing_id": "E16003D4-B312-BEA23D9AB789" }, "command": "billing_info" }, "meta": { "lang": "en", "reply_to": "B312-E16003D4-BEA23D9AB789", "platform": "iwmn" } }
    12. works great for ... • RPC style communication • if the flow through the system is static • fast transactions
    13. gets fiddly when ... • there are asynchronous callbacks from outside • message flow can change based on various factors • tasks can take days to complete
    14. Part II
    15. workflows
    16. ... again ...
    17. what we have ... • various frontends • backend daemons • JSON messages
    18. what we need • a way to describe message flow • a easy flexible way to write and update it
    19. CouchDB
    20. ... to the rescue
    21. workflow • really only a path definition through backends • some sort of condition management • a backend definition
    22. { "_id": "f7a4408898e5...a05b4181045", "_rev": "3-633060011", "name": "billing_info", "type": "workflow", "user": "iwmn", "path": [ "logger", "billing", "billing_iwmn_cc" ] }
    23. ... and the backend definition
    24. { "_id": "33adf2e3efc3...f423929f057ac", "_rev": "3-3507820969", "conn": "rpc", "type": "worker", "name": "billing_iwmn_cc", "location": "billing.cc", "description": "the CC interface", "command": "billing_verify_cc" }
    25. now we need a workflow daemon
    26. frontend frontend frontend daemon RabbitMQ workflow daemon daemon daemon
    27. where are we now? • we can call backends as before • we can call workflows via the workflow queue • we can manage workflows in CouchDB
    28. Part III
    29. asynchronous callbacks
    30. problem • we start a workflow • we call some external API • the external API somehow notifies us (Mail, Callback URL, ...) about progress • we need to continue in the workflow
    31. we need a persistent message store
    32. { "_id": "22cd37afd06c82129adb665d3150f570", "_rev": "3-2669449653", "status": "done", "last_update": 1252296819, "name": "E16003D4-F8DB-11DD-B312-BEA23D9AB789", "message": { "response": { "expiry": 710, "name": "Lenz Gschwendtner", "last4": 0, "cc_type": "master" }, "data": { "options": { "billing_id": "E16003D4-F8DB-11DD-B312-BEA23D9AB789" }, "command": "billing_info" }, "meta": { "lang": "de", "name": "E16003D4-F8DB-11DD-B312-BEA23D9AB789", "orig_reply_to": "D234ADE8-9B64-11DE-A92C-E5EF11C6FBDB", "reply_to": "workflow", "user": "iwmn", "log": [ "logger", "billing", "billing.iwmn.info" ], "platform": "iwmn" } }, "created": 1252296815, "type": "bill" }
    33. one more problem how do we correlate messages
    34. ... with some CouchDB awesome ...
    35. • the backend daemon for the callback polls a view in CouchDB • we can search for any value in the request we sent • all we need is a view that searches for the very value this external API uses as correlation ID
    36. external frontend frontend frontend callback daemon RabbitMQ workflow daemon daemon daemon
    37. me Lenz Gschwendtner CTO iWantMyName @norbu09
    38. credits • RabbitMQ • CouchDB • Erlang and Perl
    39. more credits • http://www.flickr.com/photos/djpd • http://www.flickr.com/photos/lilyapp • http://www.flickr.com/photos/b-tal • http://www.flickr.com/photos/mikebaird • http://www.flickr.com/photos/eyetwist
    SlideShare Zeitgeist 2009

    + Lenz GschwendtnerLenz Gschwendtner Nominate

    custom

    1270 views, 7 favs, 2 embeds more stats

    Slides from a talk I gave at erlounge Wellington ab more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1270
      • 1202 on SlideShare
      • 68 from embeds
    • Comments 0
    • Favorites 7
    • Downloads 24
    Most viewed embeds
    • 67 views on http://norbu09.org
    • 1 views on http://www.risingcode.com

    more

    All embeds
    • 67 views on http://norbu09.org
    • 1 views on http://www.risingcode.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories