Your SlideShare is downloading. ×
Ruby EventMachine
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Ruby EventMachine

383

Published on

Ruby EventMachine presentation at Cluj.rb

Ruby EventMachine presentation at Cluj.rb

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
383
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript

    • 1. Ruby EventMachine programare bazata pe evenimente Florin Oltean Cluj.rb 2012-10-11
    • 2. Despre mine• zencash.com • partea de sincronizare cu servicii externe• Ruby, Objective-C, C• parapanta
    • 3. Cuprins• Ruby EventMachine (EM) • ce problema rezolva • cum il folosim • avantaje, dezavantaje• cum ne ajuta EM in ZenCash pentru a importa date din alte aplicatii
    • 4. Ce problema rezolva EM?• aplicatii care asteapta mult dupa Input/ Output (I/O bound) si care trebuie sa fie scalabile• Exemple: • aplicatii web care doar scot date din baza de date si le prezinta user-ului • crawler
    • 5. timpserial:concurent:
    • 6. Cum putem scala aplicatii I/O bound• mai multe procese • folosesc multa memorie• thread-uri • mai putina memorie • problemele obisnuite asociate cu threaduri• reactor pattern
    • 7. EM implementeaza Reactor Pattern• in alte limbaje • Node.js - JavaScript • Twisted - Python
    • 8. Reactorul• single threaded while loop• codul nostru reactioneaza la evenimente
    • 9. Ruby VM support• Ruby 1.8• Ruby 1.9 reactor C++• Rubinius• JRuby
    • 10. Cum il folosim• gem install eventmachine• require eventmachine
    • 11. Scierea de cod asincron• sincron• asincron / event based
    • 12. Ruby blocks sunt folositediferit decat suntem obisnuiti• ruby obisnuit• EM
    • 13. EM loopoutput
    • 14. Oprirea EM loop
    • 15. Nested blocks
    • 16. Putem folosi proc-uri sau clase pentru a evita deep nesting
    • 17. Important: niciodata sa nu blocam reactorul• daca handler-ul nostru tine prea mult, alte evenimente nu pot fi declansate
    • 18. timp Functionare normala1234 Reactor blocat1234 Operatie care tine reactorul blocat
    • 19. E usor sa blockezireactorul fara sa iti dai• folosesti o librarie sincrona• operatii care dureaza mult• in Node.js e putin mai bine pentru ca nu ai • sleep • librarii sincrone
    • 20. Pentru a nu bloca reactorul• fara sleep(2)• fara I/O sincron (mysql query)• fara cicluri lungi (100_000.times)• fara polling (while !condition)
    • 21. • Pentru operatii care tin mai mult • EM.next_tick • EM.defer
    • 22. EM.next_tick example vsapparent recursivity
    • 23. Testare• mai dificila• codul trebuie sa ruleze intr-un event loop
    • 24. Metode de testare• business logic in clase care se pot testa separat • unit tests
    • 25. SincronEM cu timer
    • 26. • integration testing - din exterior • folosesti aplicatia si verifici rezultatele
    • 27. Dezavantaje• cod mai greu de urmarit• mai greu de debug • se pierde stacktrace• mai mult de lucru pentru error handling• mai greu de testat
    • 28. Merita sa folosesti EM?• Depinde de problema • chiar ai nevoie de scalabilitate? • poti folosi mai multe procese? • rescrie codul ca sa fie asincron
    • 29. EM in ZenCash• Integrare cu 8 aplicatii de facturare • import Invoices, Payments, Customers• Sincronizare o data pe ora
    • 30. Arhitectura• 2 applicatii • ZenCash main app • Sync app • stie sa comunice cu API-ul celor 8 servicii • normalizeaza datele
    • 31. Sync app• vrem high throughput• nu vrem sa abuzam de API (nu vrem sa fim banned) • folosim cozi • setam numarul maxim de requesturi in paralel catre fiecare serviciu
    • 32. Arhitectura SyncApp• Rescue (delayed jobs)• RabbitMQ (AMQP)• Fetcher (EventMachine)
    • 33. • Sync requests se pun in AMQP• Fetcher • scoate sync request din coada • fetch from url • pune raspuns intr-o coada Resque • acknowledge sync request
    • 34. Ordin de marime• 10 servicii X 10 request-uri • => 100 request-uri in paralel• 100 Resque workers <=> one Fetcher
    • 35. Concluzii• EM este util pentru aplicatii care asteapta mult dupa I/O• bun pentru aplicatii care necesita scalabilitate• cod putin mai greu de scris, citit si intretinut
    • 36. Referinte• https://github.com/eventmachine/eventmachine• Aman Gupta: EventMachine talk at Mountain West Ruby Conf 2010

    ×