Join the nanite cloud if you have OSX:
curl -O http://brainspl.at/ef.sh && sh ef.sh




You got ur Erlang in
     my Ruby
...
Two Great tastes that go
    great together
curl -O http://brainspl.at/ef.sh && sh ef.sh

               Erlang
curl -O http://brainspl.at/ef.sh && sh ef.sh

                 Erlang
    PROS:
Fault Tolerant
  Distributed
 Actor Model
...
curl -O http://brainspl.at/ef.sh && sh ef.sh

                 Erlang
    PROS:
                                     CONS:...
curl -O http://brainspl.at/ef.sh && sh ef.sh

                 Ruby
curl -O http://brainspl.at/ef.sh && sh ef.sh

                    Ruby
    PROS:
     Rapid
 Development
Familiar Concise
...
curl -O http://brainspl.at/ef.sh && sh ef.sh

                    Ruby
    PROS:                             CONS:
     Ra...
What if we can combine
   the best of both?




curl -O http://brainspl.at/ef.sh && sh ef.sh
Use Erlang for its strengths
                 Messaging
                Networking
                 Scalability
          ...
Erlang VM
Nanite
 Looks a lot like an exploded Erlang VM




curl -O http://brainspl.at/ef.sh && sh ef.sh
curl -O http://brainspl.at/ef.sh && sh ef.sh

             RabbitMQ
   6kloc of beautiful erlang
 models queues as process...
curl -O http://brainspl.at/ef.sh && sh ef.sh


   AMQP Basics

   The Trinity...
curl -O http://brainspl.at/ef.sh && sh ef.sh

     AMQP Basics
          Queues:



curl -O http://brainspl.at/ef.sh && sh...
curl -O http://brainspl.at/ef.sh && sh ef.sh

       AMQP Basics
            Queues:
     Queues are FIFO buffers of messa...
curl -O http://brainspl.at/ef.sh && sh ef.sh

   AMQP Basics
  Exchanges:
curl -O http://brainspl.at/ef.sh && sh ef.sh

      AMQP Basics
     Exchanges:
Exchanges are where producers send message...
curl -O http://brainspl.at/ef.sh && sh ef.sh

   AMQP Basics
     Bindings:
curl -O http://brainspl.at/ef.sh && sh ef.sh

         AMQP Basics
           Bindings:
Bindings are the ‘glue’ between ex...
curl -O http://brainspl.at/ef.sh && sh ef.sh

   AMQP Basics
Putting it all together




                             Sour...
curl -O http://brainspl.at/ef.sh && sh ef.sh

 Nanite AMQP overview




curl -O http://brainspl.at/ef.sh && sh ef.sh
curl -O http://brainspl.at/ef.sh && sh ef.sh

 Nanite Agents/Actors
Nanite Registration/
           Advertising
                                This actor will
                              ...
curl -O http://brainspl.at/ef.sh && sh ef.sh

               Nanite State
 Agent state can be stored replicated in memory ...
Nanite State
nanite-foobar: 0.72 # load average or 'status'

s-nanite-foobar: { /foo/bar, /foo/nik } # a SET of the
provid...
Security
rabbitmqctl set_permissions -p /nanite nanite quot;^nanite.*quot; quot;.*quot; quot;.*quot;
   rabbitmqctl set_pe...
Let’s see that demo

curl -O http://brainspl.at/ef.sh && sh ef.sh
What did I make nanite for?
Future Directions

• Use Rabbitmq patch(bug19230) to
  add ‘presence’ to the broker and get
  rid of ‘pings’
• Erlang agen...
Future Directions


• Explore using Erlix for directly
  integrating ruby as an erlang node in
  the rabbit broker:

• htt...
Future Directions


• Explore creating an AQMP -> Couchdb
  query interface using the erlang
  AMQP client and the new nat...
Get Involved

• http://github.com/ezmobius/nanite
• http://groups.google.com/group/
  nanite

• #nanite on irc.freenode.ne...
Questions?
Upcoming SlideShare
Loading in …5
×

Erlangfactory

20,626 views
20,401 views

Published on

My talk on ruby, erlang, nanite, amqp and redis at the Erlang Factory conference

Published in: News & Politics, Technology
3 Comments
37 Likes
Statistics
Notes

  • amen
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Must see this one today!

    http://www.slideshare.net/jeanabailey/could-h...
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Must see this before Mothers Day.


    http://www.slideshare.net/jeanabailey/could-h... y.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
20,626
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
253
Comments
3
Likes
37
Embeds 0
No embeds

No notes for slide

Erlangfactory

  1. Join the nanite cloud if you have OSX: curl -O http://brainspl.at/ef.sh && sh ef.sh You got ur Erlang in my Ruby Ezra Zygmuntowicz
  2. Two Great tastes that go great together
  3. curl -O http://brainspl.at/ef.sh && sh ef.sh Erlang
  4. curl -O http://brainspl.at/ef.sh && sh ef.sh Erlang PROS: Fault Tolerant Distributed Actor Model Immutable Scalable Concurrency Let it Fail Awesome VM
  5. curl -O http://brainspl.at/ef.sh && sh ef.sh Erlang PROS: CONS: Fault Tolerant Unfamiliar Syntax Distributed Primitive Actor Model String handling Immutable Slow(ish) IO Scalable Much harder to Concurrency find developers Let it Fail Awesome VM
  6. curl -O http://brainspl.at/ef.sh && sh ef.sh Ruby
  7. curl -O http://brainspl.at/ef.sh && sh ef.sh Ruby PROS: Rapid Development Familiar Concise Syntax Excellent String Handling Very Approachable Easy to find developers
  8. curl -O http://brainspl.at/ef.sh && sh ef.sh Ruby PROS: CONS: Rapid 1024 open FD Development limit Familiar Concise No Multi-Core Syntax Horrible GC Excellent String No Native Handling Threads Very Primadonnas in Approachable community :P Easy to find Creaky developers Interpreter
  9. What if we can combine the best of both? curl -O http://brainspl.at/ef.sh && sh ef.sh
  10. Use Erlang for its strengths Messaging Networking Scalability Distribution Use Ruby for its strengths Rapid Development DSL/concise Syntax Ease of use/installation curl -O http://brainspl.at/ef.sh && sh ef.sh
  11. Erlang VM
  12. Nanite Looks a lot like an exploded Erlang VM curl -O http://brainspl.at/ef.sh && sh ef.sh
  13. curl -O http://brainspl.at/ef.sh && sh ef.sh RabbitMQ 6kloc of beautiful erlang models queues as processes replicates routing info across clustered VMs Single queue live on single vm AMQP Protocol(win!) curl -O http://brainspl.at/ef.sh && sh ef.sh
  14. curl -O http://brainspl.at/ef.sh && sh ef.sh AMQP Basics The Trinity...
  15. curl -O http://brainspl.at/ef.sh && sh ef.sh AMQP Basics Queues: curl -O http://brainspl.at/ef.sh && sh ef.sh
  16. curl -O http://brainspl.at/ef.sh && sh ef.sh AMQP Basics Queues: Queues are FIFO buffers of messages Messages consumed from the front of the queue New messages are placed in the back of the queue Queues can be transient or persistent
  17. curl -O http://brainspl.at/ef.sh && sh ef.sh AMQP Basics Exchanges:
  18. curl -O http://brainspl.at/ef.sh && sh ef.sh AMQP Basics Exchanges: Exchanges are where producers send messages Multiple exchange types: Direct, Fanout, Topic Exchanges are routers with routing tables
  19. curl -O http://brainspl.at/ef.sh && sh ef.sh AMQP Basics Bindings:
  20. curl -O http://brainspl.at/ef.sh && sh ef.sh AMQP Basics Bindings: Bindings are the ‘glue’ between exchanges and queues Bindings take exchange routing rules, apply filters and push messages onto destination queues
  21. curl -O http://brainspl.at/ef.sh && sh ef.sh AMQP Basics Putting it all together Source: Red Hat Messaging Tutorial: 1.3 Topic Exchange
  22. curl -O http://brainspl.at/ef.sh && sh ef.sh Nanite AMQP overview curl -O http://brainspl.at/ef.sh && sh ef.sh
  23. curl -O http://brainspl.at/ef.sh && sh ef.sh Nanite Agents/Actors
  24. Nanite Registration/ Advertising This actor will advertise these services: /simple/echo /simple/time And these tags: customer-42 urmom urdad You can route requests based on services and tags
  25. curl -O http://brainspl.at/ef.sh && sh ef.sh Nanite State Agent state can be stored replicated in memory in the mappers. Or for more scalable systems, state can be stored in a Redis DHT We build an inverted index so agent lookup based on tags and services is just one set intersection away
  26. Nanite State nanite-foobar: 0.72 # load average or 'status' s-nanite-foobar: { /foo/bar, /foo/nik } # a SET of the provided services tg-nanite-foobar: { foo-42, some-tag } # a SET of the tags for this agent t-nanite-foobar: 123456789 # unix timestamp of the last state update # inverted indexes /foo/bar: { nanite-foobar, nanite-nickelbag, nanite- another } # redis SET some-tag: { nanite-foobar, nanite-nickelbag, nanite- another }
  27. Security rabbitmqctl set_permissions -p /nanite nanite quot;^nanite.*quot; quot;.*quot; quot;.*quot; rabbitmqctl set_permissions -p /nanite mapper quot;.*quot; quot;.*quot; quot;.*quot; (only available in rabbitmq hg HEAD) Secure Serializer Packets are encrypted and signed with public/ private keypairs(X.509) Certs are tied to a Nanite’s identity and the mappers have a Cert Store where they can dynamically look up the proper keys to handle a packet (Thanks for Raphael from RightScale for the Security code)
  28. Let’s see that demo curl -O http://brainspl.at/ef.sh && sh ef.sh
  29. What did I make nanite for?
  30. Future Directions • Use Rabbitmq patch(bug19230) to add ‘presence’ to the broker and get rid of ‘pings’ • Erlang agents/mappers • Mappers have features that ‘should’ be in the broker, integrate what makes sense directly
  31. Future Directions • Explore using Erlix for directly integrating ruby as an erlang node in the rabbit broker: • http://github.com/KDr2/erlix
  32. Future Directions • Explore creating an AQMP -> Couchdb query interface using the erlang AMQP client and the new native erlang couchdb client
  33. Get Involved • http://github.com/ezmobius/nanite • http://groups.google.com/group/ nanite • #nanite on irc.freenode.net • http://www.rabbitmq.com/ • http://code.google.com/p/redis/
  34. Questions?

×