Slide 1

Slide 1 text

DRb vs RabbitMQ Showdown or When to Upgrade Components RubyConf 2012

Slide 2

Slide 2 text

About Me Davy Stevenson / @davystevenson Software Engineer at Elemental Technologies in Portland, OR

Slide 3

Slide 3 text

What

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Elemental and Ruby Best in class user interface Fast paced development Happy developers

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

The Beginning Initial requirements drive decisions ... ie. no crystal ball

Slide 11

Slide 11 text

The Beginning New Features Easy to re-use tech Good match? Business decision

Slide 12

Slide 12 text

DRb Easy, fast, reliable Inter-process communication

Slide 13

Slide 13 text

r e q u i r e ' d r b / d r b ' c l a s s S e r v e r d e f g e t _ d a t a [ 1 , 2 , 3 ] e n d d e f s e n d _ d a t a ( d a t a ) p u t s d a t a e n d e n d D R b . s t a r t _ s e r v i c e ( ' d r u b y : / / l o c a l h o s t : 1 2 3 4 5 ' , S e r v e r . n e w ) D R b . t h r e a d . j o i n % i r b r e q u i r e ' d r b / d r b ' s e r v e r = D R b O b j e c t . n e w _ w i t h _ u r i ( ' d r u b y : / / l o c a l h o s t : 1 2 3 4 5 ' ) s e r v e r . g e t _ d a t a # = > [ 1 , 2 , 3 ] s e r v e r . s e n d _ d a t a ( " H e l l o " ) # = > n i l

Slide 14

Slide 14 text

Send data / messages Request data Pass Ruby Objects Point-to-point communication

Slide 15

Slide 15 text

How We Use DRb

Slide 16

Slide 16 text

Request data Rails <= Service Daemon Good Fit

Slide 17

Slide 17 text

Send commands Rails => Service Daemon OK Fit

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Interā€service communication Service Daemon <=> Service Daemon NOT A FIT

Slide 20

Slide 20 text

The Problem Technology no longer meets your needs.

Slide 21

Slide 21 text

Determine Scope Define the problem Customer needs What is success?

Slide 22

Slide 22 text

Determine Scope Speed is not a primary concern Reliability, Stability, Resiliency

Slide 23

Slide 23 text

Determine Scope Limit focus Replace single component Incremental development

Slide 24

Slide 24 text

Why Message Queue Reinventing the wheel

Slide 25

Slide 25 text

Why Message Queue Decouple producer from consumer

Slide 26

Slide 26 text

Why Message Queue Reduce responsibility

Slide 27

Slide 27 text

RabbitMQ Asynchronous message broker implementing AMQP HA clustering available

Slide 28

Slide 28 text

AMQP Advanced Message Queue Protocol Receive, route, queue and deliver messages

Slide 29

Slide 29 text

Ruby AMQP Gem Uses EventMachine Communicate with RabbitMQ

Slide 30

Slide 30 text

r e q u i r e ' a m q p ' E M . r u n d o c o n n e c t i o n = A M Q P . c o n n e c t ( : h o s t = > ' l o c a l h o s t ' ) c h a n n e l = A M Q P : : C h a n n e l . n e w ( c o n n e c t i o n ) q u e u e = c h a n n e l . q u e u e ( " e x a m p l e " , : a u t o _ d e l e t e = > t r u e ) e x c h a n g e = c h a n n e l . d i r e c t ( " " ) E M . a d d _ p e r i o d i c _ t i m e r ( 5 . 0 ) d o e x c h a n g e . p u b l i s h " # { T i m e . n o w } " , : r o u t i n g _ k e y = > q u e u e . n a m e e n d q u e u e . s u b s c r i b e d o | p a y l o a d | p u t s " R e c e i v e d t h e t i m e : # { p a y l o a d } " e n d e n d

Slide 31

Slide 31 text

Scope Defined

Slide 32

Slide 32 text

Reliability Durable queues Message order ensured

Slide 33

Slide 33 text

Stability Decoupling

Slide 34

Slide 34 text

Resiliency High-availability

Slide 35

Slide 35 text

Still use DRb Simplicity Request data

Slide 36

Slide 36 text

Implementation Multiple Producers, Single Consumer Two classes of data: Durable state changes Transient status data

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

Results Performance is impressive Decoupled communication Included in next release Positioned for product growth

Slide 39

Slide 39 text

Q&A