Successfully reported this slideshow.

Ruby EventMachine

2

Share

Upcoming SlideShare
Google Web Toolkit
Google Web Toolkit
Loading in …3
×
1 of 36
1 of 36

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Ruby EventMachine

  1. 1. Ruby EventMachine programare bazata pe evenimente Florin Oltean Cluj.rb 2012-10-11
  2. 2. Despre mine • zencash.com • partea de sincronizare cu servicii externe • Ruby, Objective-C, C • parapanta
  3. 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. 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. 5. timp serial: concurent:
  6. 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. 7. EM implementeaza Reactor Pattern • in alte limbaje • Node.js - JavaScript • Twisted - Python
  8. 8. Reactorul • single threaded while loop • codul nostru reactioneaza la evenimente
  9. 9. Ruby VM support • Ruby 1.8 • Ruby 1.9 reactor C++ • Rubinius • JRuby
  10. 10. Cum il folosim • gem install eventmachine • require 'eventmachine'
  11. 11. Scierea de cod asincron • sincron • asincron / event based
  12. 12. Ruby blocks sunt folosite diferit decat suntem obisnuiti • ruby obisnuit • EM
  13. 13. EM loop output
  14. 14. Oprirea EM loop
  15. 15. Nested blocks
  16. 16. Putem folosi proc-uri sau clase pentru a evita deep nesting
  17. 17. Important: niciodata sa nu blocam reactorul • daca handler-ul nostru tine prea mult, alte evenimente nu pot fi declansate
  18. 18. timp Functionare normala 1 2 3 4 Reactor blocat 1 2 3 4 Operatie care tine reactorul blocat
  19. 19. E usor sa blockezi reactorul 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. 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. 21. • Pentru operatii care tin mai mult • EM.next_tick • EM.defer
  22. 22. EM.next_tick example vs apparent recursivity
  23. 23. Testare • mai dificila • codul trebuie sa ruleze intr-un event loop
  24. 24. Metode de testare • business logic in clase care se pot testa separat • unit tests
  25. 25. Sincron EM cu timer
  26. 26. • integration testing - din exterior • folosesti aplicatia si verifici rezultatele
  27. 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. 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. 29. EM in ZenCash • Integrare cu 8 aplicatii de facturare • import Invoices, Payments, Customers • Sincronizare o data pe ora
  30. 30. Arhitectura • 2 applicatii • ZenCash main app • Sync app • stie sa comunice cu API-ul celor 8 servicii • normalizeaza datele
  31. 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. 32. Arhitectura SyncApp • Rescue (delayed jobs) • RabbitMQ (AMQP) • Fetcher (EventMachine)
  33. 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. 34. Ordin de marime • 10 servicii X 10 request-uri • => 100 request-uri in paralel • 100 Resque workers <=> one Fetcher
  35. 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. 36. Referinte • https://github.com/eventmachine/eventmachine • Aman Gupta: EventMachine talk at Mountain West Ruby Conf 2010

Editor's Notes

  • \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
  • ×