Slide 1

Slide 1 text

Message Queues as a Service: Introducing Marconi Alejandro Cabrera ([email protected]) July 17, 2013 Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 2

Slide 2 text

from pprint import pprint if __name__ == ’__main__’: meta = { ’author’ : ’Alejandro Cabrera’, ’email’ : ’[email protected]’, ’objective’ : ’Introduce Marconi!’ } pprint(meta) Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 3

Slide 3 text

About Me Software developer @ Rackspace for almost a year Likes: Python, Linux, open-source, automation, quality, cordiality Dislikes: Proprietary, manual processes, hostility Github: cabrera Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 4

Slide 4 text

Overview Marconi: What, Why, How? Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 5

Slide 5 text

Overview Marconi: What, Why, How? Marconi and You: Configuring Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 6

Slide 6 text

Overview Marconi: What, Why, How? Marconi and You: Configuring Growing Marconi: Development and the Future Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 7

Slide 7 text

Marconi: Queuing for the Cloud Marconi is: Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 8

Slide 8 text

Marconi: Queuing for the Cloud Marconi is: Queuing as a service: queues, messages, claims Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 9

Slide 9 text

Marconi: Queuing for the Cloud Marconi is: Queuing as a service: queues, messages, claims An HTTP-driven, mostly-RESTful API Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 10

Slide 10 text

Marconi: Queuing for the Cloud Marconi is: Queuing as a service: queues, messages, claims An HTTP-driven, mostly-RESTful API An Openstack hopeful Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 11

Slide 11 text

Marconi: Queuing for the Cloud Marconi is: Queuing as a service: queues, messages, claims An HTTP-driven, mostly-RESTful API An Openstack hopeful Open-source! Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 12

Slide 12 text

Marconi: Queuing for the Cloud Marconi is: Queuing as a service: queues, messages, claims An HTTP-driven, mostly-RESTful API An Openstack hopeful Open-source! Marconi is not: Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 13

Slide 13 text

Marconi: Queuing for the Cloud Marconi is: Queuing as a service: queues, messages, claims An HTTP-driven, mostly-RESTful API An Openstack hopeful Open-source! Marconi is not: A replacement for X (celery, zmq, rabbitmq) Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 14

Slide 14 text

Marconi: Queuing for the Cloud Marconi is: Queuing as a service: queues, messages, claims An HTTP-driven, mostly-RESTful API An Openstack hopeful Open-source! Marconi is not: A replacement for X (celery, zmq, rabbitmq) A message broker Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 15

Slide 15 text

Marconi: What’s In a Name? Guglielmo Marconi Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 16

Slide 16 text

Marconi: What’s In a Name? Guglielmo Marconi An Italian inventor often credited with the invention of radio Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 17

Slide 17 text

Marconi: What’s In a Name? Guglielmo Marconi An Italian inventor often credited with the invention of radio Marconi (the service) is all about managing messages Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 18

Slide 18 text

Why Marconi? There was a need for a messsaging platform that is: Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 19

Slide 19 text

Why Marconi? There was a need for a messsaging platform that is: Open Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 20

Slide 20 text

Why Marconi? There was a need for a messsaging platform that is: Open Easy to use Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 21

Slide 21 text

Why Marconi? There was a need for a messsaging platform that is: Open Easy to use Scalable Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 22

Slide 22 text

Why Marconi? There was a need for a messsaging platform that is: Open Easy to use Scalable Extensible Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 23

Slide 23 text

Why Marconi? There was a need for a messsaging platform that is: Open Easy to use Scalable Extensible Marconi aims to fill those needs Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 24

Slide 24 text

Why Marconi Instead of. . . ? Amazon SQS? Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 25

Slide 25 text

Why Marconi Instead of. . . ? Amazon SQS? SQS is closed - you can’t run your own instance Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 26

Slide 26 text

Why Marconi Instead of. . . ? Amazon SQS? SQS is closed - you can’t run your own instance Celery? Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 27

Slide 27 text

Why Marconi Instead of. . . ? Amazon SQS? SQS is closed - you can’t run your own instance Celery? Celery is a task-based service Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 28

Slide 28 text

Why Marconi Instead of. . . ? Amazon SQS? SQS is closed - you can’t run your own instance Celery? Celery is a task-based service It depends on a broker to handle the queuing aspects Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 29

Slide 29 text

Why Marconi Instead of. . . ? Amazon SQS? SQS is closed - you can’t run your own instance Celery? Celery is a task-based service It depends on a broker to handle the queuing aspects RabbitMQ, qpid, ZMQ? Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 30

Slide 30 text

Why Marconi Instead of. . . ? Amazon SQS? SQS is closed - you can’t run your own instance Celery? Celery is a task-based service It depends on a broker to handle the queuing aspects RabbitMQ, qpid, ZMQ? You have to scale them yourself Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 31

Slide 31 text

How Does it Work? Queues: create them! Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 32

Slide 32 text

How Does it Work? Queues: create them! Messages: post them to queues (FIFO guaranteed) Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 33

Slide 33 text

How Does it Work? Queues: create them! Messages: post them to queues (FIFO guaranteed) Claims: workers claim messages Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 34

Slide 34 text

How Does it Work? Queues: create them! Messages: post them to queues (FIFO guaranteed) Claims: workers claim messages That’s all there is to it. Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 35

Slide 35 text

That’s All? Yes. Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 36

Slide 36 text

That’s All? Yes. It’s up to you to build higher-level patterns: Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 37

Slide 37 text

That’s All? Yes. It’s up to you to build higher-level patterns: Response/request Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 38

Slide 38 text

That’s All? Yes. It’s up to you to build higher-level patterns: Response/request Publish/subscribe Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 39

Slide 39 text

That’s All? Yes. It’s up to you to build higher-level patterns: Response/request Publish/subscribe Master/slave Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 40

Slide 40 text

That’s All? Yes. It’s up to you to build higher-level patterns: Response/request Publish/subscribe Master/slave Producer(s)/Consumer(s) Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 41

Slide 41 text

Marconi: Configuration Marconi doesn’t try to limit you Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 42

Slide 42 text

Marconi: Configuration Marconi doesn’t try to limit you You can configure. . . : Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 43

Slide 43 text

Marconi: Configuration Marconi doesn’t try to limit you You can configure. . . : Logging details Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 44

Slide 44 text

Marconi: Configuration Marconi doesn’t try to limit you You can configure. . . : Logging details Transport drivers: wsgi, zmq Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 45

Slide 45 text

Marconi: Configuration Marconi doesn’t try to limit you You can configure. . . : Logging details Transport drivers: wsgi, zmq As well as transport-specific configuration! Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 46

Slide 46 text

Marconi: Configuration Marconi doesn’t try to limit you You can configure. . . : Logging details Transport drivers: wsgi, zmq As well as transport-specific configuration! Storage drivers Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 47

Slide 47 text

Marconi: Configuration Marconi doesn’t try to limit you You can configure. . . : Logging details Transport drivers: wsgi, zmq As well as transport-specific configuration! Storage drivers Messages: size (default: 256KB), batch size Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 48

Slide 48 text

Marconi: Configuration Marconi doesn’t try to limit you You can configure. . . : Logging details Transport drivers: wsgi, zmq As well as transport-specific configuration! Storage drivers Messages: size (default: 256KB), batch size Queues: name length Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 49

Slide 49 text

Marconi: Configuration Marconi doesn’t try to limit you You can configure. . . : Logging details Transport drivers: wsgi, zmq As well as transport-specific configuration! Storage drivers Messages: size (default: 256KB), batch size Queues: name length Philosophy: configure all the things! Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 50

Slide 50 text

Marconi: Can I Use it Now? Yes, with a caveat Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 51

Slide 51 text

Marconi: Can I Use it Now? Yes, with a caveat It’s pre-alpha status Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 52

Slide 52 text

Marconi: Can I Use it Now? Yes, with a caveat It’s pre-alpha status (Don’t run this in production!) Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 53

Slide 53 text

Marconi API: From the Top GET /v1 GET /v1/health Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 54

Slide 54 text

Marconi API: Handling Queues PUT /v1/queues/{queue} GET /v1/queues{?marker,limit,detailed} PUT /v1/queues/{queue} GET /v1/queues/{queue} GET /v1/queues/{queue}/stats DELETE /v1/queues/{queue} Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 55

Slide 55 text

Marconi API: Messages! GET /v1/queues/{queue}/messages{?marker,limit,echo} GET /v1/queues/{queue}/messages/{message_id}{?claim_id} GET /v1/queues/{queue}/messages{?ids,claim_id} POST /v1/queues/{queue}/messages DELETE /v1/queues/{queue}/messages/{message_id}{?claim_id} Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 56

Slide 56 text

Marconi API: Claims Processing POST /v1/queues/{queue}/claims{?limit} GET /v1/queues/{queue}/claims/{claim_id} PATCH /v1/queues/{queue}/claims/{claim_id} DELETE /v1/queues/{queue}/claims/{claim_id} Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 57

Slide 57 text

Going Deeper: Internal Architecture Highly modular - driver-driven architecture Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 58

Slide 58 text

Going Deeper: Internal Architecture Highly modular - driver-driven architecture Storage: sqlite, mongodb Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 59

Slide 59 text

Going Deeper: Internal Architecture Highly modular - driver-driven architecture Storage: sqlite, mongodb Transport: wsgi (zmq in the works) Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 60

Slide 60 text

Going Deeper: Internal Architecture Highly modular - driver-driven architecture Storage: sqlite, mongodb Transport: wsgi (zmq in the works) Authentication: keystone, nova, endpoint (client-side) Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 61

Slide 61 text

Going Deeper: Internal Architecture Highly modular - driver-driven architecture Storage: sqlite, mongodb Transport: wsgi (zmq in the works) Authentication: keystone, nova, endpoint (client-side) The idea is to be highly configurable Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 62

Slide 62 text

Going Deeper: Internal Architecture Highly modular - driver-driven architecture Storage: sqlite, mongodb Transport: wsgi (zmq in the works) Authentication: keystone, nova, endpoint (client-side) The idea is to be highly configurable You know what you need - you make the trade-offs Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 63

Slide 63 text

A Look at the Structure: Big Picture marconi |-- bootstrap.py |-- cmd # garbabe collector, standalone server process |-- common # shared utilities |-- __init__.py |-- openstack # openstack common code |-- storage # storage drivers |-- tests # test helpers |-- transport # transport drivers ‘-- version.py Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 64

Slide 64 text

A Look at the Structure: Storage storage/ |-- base.py |-- exceptions.py |-- __init__.py |-- mongodb ‘-- sqlite Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 65

Slide 65 text

A Look at the Structure: Storage (MongoDB) storage/ |-- base.py |-- exceptions.py |-- __init__.py |-- mongodb | |-- claims.py | |-- controllers.py | |-- driver.py | |-- __init__.py | |-- messages.py | |-- options.py | |-- queues.py | ‘-- utils.py ‘-- sqlite Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 66

Slide 66 text

A Look at the Structure: Storage (sqlite) storage/ |-- base.py |-- exceptions.py |-- __init__.py |-- mongodb ‘-- sqlite # development driver |-- claims.py |-- controllers.py |-- driver.py |-- __init__.py |-- messages.py |-- queues.py ‘-- utils.py Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 67

Slide 67 text

A Look at the Structure: Transports transport/ |-- auth.py |-- base.py |-- helpers.py |-- __init__.py |-- wsgi ‘-- zmq Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 68

Slide 68 text

A Look at the Structure: Transports (wsgi) transport/ |-- auth.py |-- base.py |-- helpers.py |-- __init__.py |-- wsgi | |-- app.py | |-- claims.py | |-- driver.py | |-- exceptions.py | |-- health.py | |-- helpers.py | |-- __init__.py | |-- messages.py | |-- queues.py | ‘-- stats.py ‘-- zmq Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 69

Slide 69 text

A Look at the Structure: Transports (zmq) transport/ |-- auth.py |-- base.py |-- helpers.py |-- __init__.py |-- wsgi ‘-- zmq ‘-- __init__.py Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 70

Slide 70 text

A Look at the Structure: Transports (zmq) transport/ |-- auth.py |-- base.py |-- helpers.py |-- __init__.py |-- wsgi ‘-- zmq ‘-- __init__.py # you can help make this happen! Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 71

Slide 71 text

Going Client-Side: Introducing python-marconiclient! You have a server, but now you need to work with it Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 72

Slide 72 text

Going Client-Side: Introducing python-marconiclient! You have a server, but now you need to work with it python-marconiclient is. . . : Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 73

Slide 73 text

Going Client-Side: Introducing python-marconiclient! You have a server, but now you need to work with it python-marconiclient is. . . : A Python API for communicating with a marconi server Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 74

Slide 74 text

Going Client-Side: Introducing python-marconiclient! You have a server, but now you need to work with it python-marconiclient is. . . : A Python API for communicating with a marconi server A CLI that accomplishes the same Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 75

Slide 75 text

Going Client-Side: Introducing python-marconiclient! You have a server, but now you need to work with it python-marconiclient is. . . : A Python API for communicating with a marconi server A CLI that accomplishes the same A reference implementation for alternate marconi clients Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 76

Slide 76 text

So. . . What Does it Look Like? >>> client = Client(conn, async=False) >>> client.queues(marker=..., limit=10, detailed=False) ar 0x7fd3ef1ed730> >>> client.create_queue(name=’darn_good_queue’, metadata=json.dumps({’game’: ’d2’ } ) ) >>> client.home # affects all operations for objects # acquired from the client >>> client.async False Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 77

Slide 77 text

Client: Handling Queues >>> queue = next(q for q in client.queues if q.name == ’darn_good_queue’) >>> queue.name u’darn_good_queue’ >>> queue.stats >>> queue.get_messages() ar 0x7fd3ef1ed742> >>> queue.get_messages(ids=[’50b68a50d6f5b8c8a7c62b’, ’50b68a50d6f5b8c8a7c62b’ ], claim=’a28ee94e-6cb4-11e2-b4’, limit=1) ar 0x7fd3ef1ed742> >>> queue.post_messages(messages=...) >>> queue.delete() Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 78

Slide 78 text

Client: Handling Queues (Metadata) >>> queue.metadata {’a’: 1, ’b’: 2} >>> queue.set_metadata({’a’: 2, ...}) Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 79

Slide 79 text

Client: Message Handling >>> message = next(queue.messages(...)) >>> message.age 90 >>> message.ttl 120 >>> message.id u’9y22h21w2h’ >>> message.body {u’action’: u’win’} >>> message.delete() >>> message.status Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 80

Slide 80 text

Client: Claims >>> queue.claim(limit=10) ar 0x7fd3ef1ed742> >>> claim = queue.claim(limit=10) # identical to queue message fetch API, # with claim id pre-filled >>> claim.messages(...) ar 0x7fd3ef1ed742> >>> msg = next(claim.messages(...)) >>> msg.status Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 81

Slide 81 text

Client: Claims >>> claim.id ... >>> claim.ttl 90 >>> claim.age 120 >>> claim.patch(ttl=..., grace=...) >>> claim.release() Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 82

Slide 82 text

Marconi & Openstack & You Currently: pre-incubation Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 83

Slide 83 text

Marconi & Openstack & You Currently: pre-incubation We have the form, we have contributors (5-6) Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 84

Slide 84 text

Marconi & Openstack & You Currently: pre-incubation We have the form, we have contributors (5-6) (We need more conributors!) Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 85

Slide 85 text

Marconi & Openstack & You Currently: pre-incubation We have the form, we have contributors (5-6) (We need more conributors!) We keep our code: Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 86

Slide 86 text

Marconi & Openstack & You Currently: pre-incubation We have the form, we have contributors (5-6) (We need more conributors!) We keep our code: Here: server Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 87

Slide 87 text

Marconi & Openstack & You Currently: pre-incubation We have the form, we have contributors (5-6) (We need more conributors!) We keep our code: Here: server And here: client Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 88

Slide 88 text

Marconi & Openstack & You Currently: pre-incubation We have the form, we have contributors (5-6) (We need more conributors!) We keep our code: Here: server And here: client Join us on IRC: #openstack-marconi @ freenode Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 89

Slide 89 text

The Future Get incubated into Openstack Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 90

Slide 90 text

The Future Get incubated into Openstack Release the reference client Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 91

Slide 91 text

The Future Get incubated into Openstack Release the reference client Implement more: Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 92

Slide 92 text

The Future Get incubated into Openstack Release the reference client Implement more: Transport drivers Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 93

Slide 93 text

The Future Get incubated into Openstack Release the reference client Implement more: Transport drivers Storage drivers Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 94

Slide 94 text

The Future Get incubated into Openstack Release the reference client Implement more: Transport drivers Storage drivers Grow! Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 95

Slide 95 text

Questions? Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi

Slide 96

Slide 96 text

Thanks! Alejandro Cabrera ([email protected]) Message Queues as a Service: Introducing Marconi