[bash-10.4 ~]$ ruby talk.rb


      Introduction to Distributed Programming:
                    The Ruby Way


          ...
[bash-10.4 ~]$ who am I


                      • Mechanical/Industrial Engineer by training
                      • Softw...
[bash-10.4 ~]$ whois mutuallyhuman.com



      “Mutually Human Software is a custom software
       strategy and design c...
[bash-10.4 ~]$ cat .relevant_history



                   • Parallel Fluid dynamics simulation (C++/MPI)
                ...
[bash-10.4 ~]$ atq

                    • Distributed programming and Ruby
                    • DRb
                    •...
[bash-10.4 ~]$ whatis ‘distributed programming’




               “Distributed programming is like network
              ...
[bash-10.4 ~]$ ri ‘distributed programming’


              DRb            Rinda        rubyPVM        MPI Ruby       Star...
[bash-10.4 ~]$ cd DRb
                      • Distributed Ruby
                      • Also known as dRuby
               ...
2-tier architecture


                           Server           Client




                                    9
Saturda...
Example method

                           def humanize(name)
                             "#{name.capitalize} Human"
    ...
server.rb




     require 'drb'

     class HumanServer
       def humanize(name)
         "#{name.capitalize} Human"
   ...
Protocol   IP address       Port


           DRb.start_service("druby://127.0.0.1:48626", HumanServer.new)




          ...
[bash-10.4 ~]$ ruby server.rb



                           Server




                                    13
Saturday, Ap...
client.rb




             require 'drb'

             server = DRbObject.new_with_uri("druby://127.0.0.1:48626")

       ...
[bash-10.4 ~]$ ruby client.rb
   Auvi Human
   [bash-10.4 ~]$



                           Server        Client




     ...
server2.rb

        require 'drb'

        class Person
          attr_accessor :name
          def initialize(name)
     ...
[bash-10.4 ~]$ ruby server2.rb



                           Server




                                    17
Saturday, A...
client2.rb




    require 'drb'

    server = DRbObject.new_with_uri("druby://127.0.0.1:48626")
    p server

    person ...
[bash-10.4 ~]$ ruby client2.rb

   #<DRb::DRbObject:0x959c @ref=nil, @uri="druby://127.0.0.1:48626">
   #<DRb::DRbUnknown:...
Solution?


          include DRbUndumped



                               20
Saturday, April 17, 2010
server3.rb



                           require 'drb'

                           class Person
                          ...
[bash-10.4 ~]$ ruby server3.rb



                           Server




                                    22
Saturday, A...
[bash-10.4 ~]$ ruby client2.rb
#<DRb::DRbObject:0x959c @ref=nil, @uri="druby://127.0.0.1:48626">
#<DRb::DRbObject:0x1dc734...
Pass by value
                                24
Saturday, April 17, 2010
Pass by Reference
                                   25
Saturday, April 17, 2010
[bash-10.4 ~]$ cd Rinda

                      • Implements the Linda distributed
                           computing par...
3-tier architecture
                                     RingServer




                           Service                ...
A Ring Server?



                                 28
Saturday, April 17, 2010
ringserver.rb




      require 'rinda/ring'
      require 'rinda/tuplespace'

      DRb.start_service
      Rinda::RingSe...
What is a TupleSpace?




                                     30
Saturday, April 17, 2010
31
Saturday, April 17, 2010
[bash-10.4 ~]$ ruby ringserver.rb



                                RingServer




                           Default por...
service.rb
                           require 'rinda/ring'

                           class HumanServer
                 ...
Rinda::RingFinger.primary




                           34
Saturday, April 17, 2010
Format of a Tuple

                           [:human_service,
                            :HumanServer,
                 ...
36
Saturday, April 17, 2010
[bash-10.4 ~]$ ruby service.rb


                                     RingServer




                           Service


...
client.rb




      require 'rinda/ring'

      DRb.start_service
      server = Rinda::RingFinger.primary

      service ...
#<DRb::DRbObject>



                 service = server.read([:human_service, nil, nil, nil])[2]

                         ...
[bash-10.4 ~]$ ruby client.rb
                 Auvi Human
                 [bash-10.4 ~]$


                              ...
“A journey of a thousand miles begins with a single step”




                              41
Saturday, April 17, 2010
42
Saturday, April 17, 2010
[bash-10.4 ~]$ cat distributed_programming.txt | grep ruby | less




              DRb            Rinda        rubyPVM   ...
[bash-10.4 ~]$ exit


                  logout
                  [Process completed]

                           44
Saturd...
Questions?



                               45
Saturday, April 17, 2010
Upcoming SlideShare
Loading in...5
×

Glrb2010 auvi

750

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
750
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Glrb2010 auvi

  1. 1. [bash-10.4 ~]$ ruby talk.rb Introduction to Distributed Programming: The Ruby Way Auvi Rahman auvi@mutuallyhuman.com Mutually Human Software, LLC 1 Saturday, April 17, 2010
  2. 2. [bash-10.4 ~]$ who am I • Mechanical/Industrial Engineer by training • Software developer by trade • Human as a person 2 Saturday, April 17, 2010
  3. 3. [bash-10.4 ~]$ whois mutuallyhuman.com “Mutually Human Software is a custom software strategy and design consultancy specializing in mobile & web-based products and services.” 3 Saturday, April 17, 2010
  4. 4. [bash-10.4 ~]$ cat .relevant_history • Parallel Fluid dynamics simulation (C++/MPI) • Distributed Analog Computing • Distributed control systems (Robotics) • Distributed Discrete-Event Simulation 4 Saturday, April 17, 2010
  5. 5. [bash-10.4 ~]$ atq • Distributed programming and Ruby • DRb • Rinda • Others 5 Saturday, April 17, 2010
  6. 6. [bash-10.4 ~]$ whatis ‘distributed programming’ “Distributed programming is like network programming—only the audience is different.” - Lucas Carlson (Ruby Cookbook) 6 Saturday, April 17, 2010
  7. 7. [bash-10.4 ~]$ ri ‘distributed programming’ DRb Rinda rubyPVM MPI Ruby Starfish SkyNet MRToolkit MagLev Politics Starling Delayed RabbitMQ Distribunaut Erlectricity BackgrounDRb Job 7 Saturday, April 17, 2010
  8. 8. [bash-10.4 ~]$ cd DRb • Distributed Ruby • Also known as dRuby • Part of the standard library • 100% Ruby • Easy to use • Universally available where Ruby is installed 8 Saturday, April 17, 2010
  9. 9. 2-tier architecture Server Client 9 Saturday, April 17, 2010
  10. 10. Example method def humanize(name) "#{name.capitalize} Human" end humanize('auvi') # => "Auvi Human" 10 Saturday, April 17, 2010
  11. 11. server.rb require 'drb' class HumanServer def humanize(name) "#{name.capitalize} Human" end end DRb.start_service("druby://127.0.0.1:48626", HumanServer.new) DRb.thread.join 11 Saturday, April 17, 2010
  12. 12. Protocol IP address Port DRb.start_service("druby://127.0.0.1:48626", HumanServer.new) Front object 12 Saturday, April 17, 2010
  13. 13. [bash-10.4 ~]$ ruby server.rb Server 13 Saturday, April 17, 2010
  14. 14. client.rb require 'drb' server = DRbObject.new_with_uri("druby://127.0.0.1:48626") puts server.humanize('auvi') 14 Saturday, April 17, 2010
  15. 15. [bash-10.4 ~]$ ruby client.rb Auvi Human [bash-10.4 ~]$ Server Client 15 Saturday, April 17, 2010
  16. 16. server2.rb require 'drb' class Person attr_accessor :name def initialize(name) @name = name end def humanize "#{@name.capitalize} Human" end end class HumanServer def personify(name) Person.new(name) end end DRb.start_service("druby://127.0.0.1:48626", HumanServer.new) DRb.thread.join 16 Saturday, April 17, 2010
  17. 17. [bash-10.4 ~]$ ruby server2.rb Server 17 Saturday, April 17, 2010
  18. 18. client2.rb require 'drb' server = DRbObject.new_with_uri("druby://127.0.0.1:48626") p server person = server.personify('auvi') p person puts person.humanize 18 Saturday, April 17, 2010
  19. 19. [bash-10.4 ~]$ ruby client2.rb #<DRb::DRbObject:0x959c @ref=nil, @uri="druby://127.0.0.1:48626"> #<DRb::DRbUnknown:0x1dc66c @name="Person", @buf="004bo:vPerson006:n@name"tAuvi"> client2.rb:9: undefined method `humanize' for #<DRb::DRbUnknown:0x1dc66c> (NoMethodError) [bash-10.4 ~]$ 19 Saturday, April 17, 2010
  20. 20. Solution? include DRbUndumped 20 Saturday, April 17, 2010
  21. 21. server3.rb require 'drb' class Person include DRbUndumped attr_accessor :name def initialize(name) @name = name end def humanize "#{@name.capitalize} Human" end end class HumanServer def personify(name) Person.new(name) end end DRb.start_service("druby://127.0.0.1:48626", HumanServer.new) DRb.thread.join 21 Saturday, April 17, 2010
  22. 22. [bash-10.4 ~]$ ruby server3.rb Server 22 Saturday, April 17, 2010
  23. 23. [bash-10.4 ~]$ ruby client2.rb #<DRb::DRbObject:0x959c @ref=nil, @uri="druby://127.0.0.1:48626"> #<DRb::DRbObject:0x1dc734 @ref=974550, @uri="druby://127.0.0.1:48626"> Auvi Human [bash-10.4 ~]$ 23 Saturday, April 17, 2010
  24. 24. Pass by value 24 Saturday, April 17, 2010
  25. 25. Pass by Reference 25 Saturday, April 17, 2010
  26. 26. [bash-10.4 ~]$ cd Rinda • Implements the Linda distributed computing paradigm • Also part of the standard library • 100% Ruby • Universally available where Ruby is installed 26 Saturday, April 17, 2010
  27. 27. 3-tier architecture RingServer Service Client 27 9 Saturday, April 17, 2010
  28. 28. A Ring Server? 28 Saturday, April 17, 2010
  29. 29. ringserver.rb require 'rinda/ring' require 'rinda/tuplespace' DRb.start_service Rinda::RingServer.new(Rinda::TupleSpace.new) DRb.thread.join 29 Saturday, April 17, 2010
  30. 30. What is a TupleSpace? 30 Saturday, April 17, 2010
  31. 31. 31 Saturday, April 17, 2010
  32. 32. [bash-10.4 ~]$ ruby ringserver.rb RingServer Default port : 7647 13 32 Saturday, April 17, 2010
  33. 33. service.rb require 'rinda/ring' class HumanServer include DRbUndumped def humanize(name) "#{name.capitalize} Human" end end DRb.start_service server = Rinda::RingFinger.primary server.write([ :human_service, :HumanServer, HumanServer.new, 'Human Server'], Rinda::SimpleRenewer.new) DRb.thread.join 33 Saturday, April 17, 2010
  34. 34. Rinda::RingFinger.primary 34 Saturday, April 17, 2010
  35. 35. Format of a Tuple [:human_service, :HumanServer, HumanServer.new, 'Human Server'] 35 Saturday, April 17, 2010
  36. 36. 36 Saturday, April 17, 2010
  37. 37. [bash-10.4 ~]$ ruby service.rb RingServer Service 13 32 37 Saturday, April 17, 2010
  38. 38. client.rb require 'rinda/ring' DRb.start_service server = Rinda::RingFinger.primary service = server.read([:human_service, nil, nil, nil])[2] puts service.humanize('auvi') 38 Saturday, April 17, 2010
  39. 39. #<DRb::DRbObject> service = server.read([:human_service, nil, nil, nil])[2] 0 1 2 3 39 Saturday, April 17, 2010
  40. 40. [bash-10.4 ~]$ ruby client.rb Auvi Human [bash-10.4 ~]$ RingServer 1 2 3 Service Client 4 40 Saturday, April 17, 2010
  41. 41. “A journey of a thousand miles begins with a single step” 41 Saturday, April 17, 2010
  42. 42. 42 Saturday, April 17, 2010
  43. 43. [bash-10.4 ~]$ cat distributed_programming.txt | grep ruby | less DRb Rinda rubyPVM MPI Ruby Starfish SkyNet MRToolkit MagLev Politics Starling Delayed RabbitMQ Distribunaut Erlectricity BackgrounDRb Job 43 Saturday, April 17, 2010
  44. 44. [bash-10.4 ~]$ exit logout [Process completed] 44 Saturday, April 17, 2010
  45. 45. Questions? 45 Saturday, April 17, 2010
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×