Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

GeeCON Krakow 2015 - Grails and the real-time world

1,032 views

Published on

In a hyper-connected world the concept "Real Time" is used more and more every day. With the traditional Grails architecture it's difficult to achieve this, so we need to use a different approach. The answer is to use message driven architectures that will allow us to achieve the goal and also build fast, decoupled and easy to test applications.

In this talk you'll see a different type of architecture that will help you to serve content in real-time to a lot of clients in a fast and easy to scale way. You'll see some examples of how to achieve this using Spring Integration and integrate with external systems like websockets and XMPP in an easy and decoupled way.

Published in: Technology

GeeCON Krakow 2015 - Grails and the real-time world

  1. 1. GeeCON 2015 Grails and the real-time world IVÁN LÓPEZ - @ilopmar
  2. 2. Hello! I am Iván López @ilopmar http://greachconf.com@madridgug
  3. 3. Traditional architectures Request-response POST /register-user POST /register-user POST /register-user
  4. 4. Traditional architectures
  5. 5. Traditional architectures
  6. 6. “ A problem postponed is a problem solved. Really?
  7. 7. 1. Event Driven Architectures
  8. 8. Event Drive Architectures ▷ Fire & Forget ▷ Decouple producer and consumer ▷ Immediate action in the consumer ▷ Real-time
  9. 9. Traditional architecture POST /purchase POST /purchase - Receive request 5 ms - Data validation 20 ms - Save 40 ms - PDF generation 200 ms - Send email 80 ms - Render response 50 ms Total: 395 ms
  10. 10. “ Can we do it better?
  11. 11. Event driven architecture POST /purchase POST /purchase - Receive request 5 ms No - Data validation 20 ms No - Save 40 ms No - PDF generation 200 ms Yes - Send email 80 ms Yes - Render response 50 ms No Total: 115 ms ~ 70% better Can anyone else do it?
  12. 12. Event driven architecture POST /purchase PDF Generation POST /purchase - Receive request 5 ms - Data validation 20 ms - Save 40 ms - Render response 50 ms Total: 115 ms Send email
  13. 13. “ Don't keep your clients waiting unnecessarily! Can I defer it?
  14. 14. Goals ▷ Loosely coupled architecture, easy to extend and evolve. ▷ Build high performance and scalable systems ▷ Keep the business logic where “it belongs”
  15. 15. What about Grails? ▷ Platform core plugin ▷ Events plugin ▷ Executor plugin ▷ Grails 2.3+ async
  16. 16. Synchronous example // Send confirmation email def user = new User(params).save() emailService.sendRegistrationMail(user) render view:'registerOk'
  17. 17. Synchronous example // Send confirmation email def user = new User(params).save() emailService.sendRegistrationMail(user) render view:'registerOk' class EmailService { public void sendRegistrationMail(User user) { sendMail { to user.email subject "Confirm your account" html g.render(template: "userEmailConfirmation") } } }
  18. 18. Asynchronous example // Platform core def user = new User(params).save() event 'sendRegistrationMail', user render view:'registerOk'
  19. 19. Asynchronous example // Platform core def user = new User(params).save() event 'sendRegistrationMail', user render view:'registerOk' class EmailService { @grails.events.Listener public void sendRegistrationMail(User user) { sendMail { to user.email subject "Confirm your account" html g.render(template: "userEmailConfirmation") } } }
  20. 20. Asynchronous example // Executor def user = new User(params).save() runAsync { emailService.sendRegistrationMail(user) } render view:'registerOk' class EmailService { public void sendRegistrationMail(User user) { sendMail { to user.email subject "Confirm your account" html g.render(template: "userEmailConfirmation") } } }
  21. 21. “ I love the smell of code in the morning
  22. 22. What if we don't want this? ▷ Extract “dependencies” to configuration ▷ Change application behaviour modifying the configuration
  23. 23. Spring Integration Use inside Spring the well-know Enterprise Integration Patterns http://www.enterpriseintegrationpatterns.com/
  24. 24. Spring Integration ▷ Lightweight messaging mechanism for Spring apps ▷ High level abstraction for messaging ▷ External systems integration declaring adapters
  25. 25. Message ▷ Payload ▷ Headers ▷ Immutable
  26. 26. Channels ▷ Point-to-point ▷ Publish-Subscribe
  27. 27. Endpoints ▷ Transformer ▷ Filter ▷ Router ▷ Splitter ▷ Aggregator ▷ Service activator ▷ Channel-adapter ▷ Enricher ▷ Bridge ▷ ...
  28. 28. Adapters ▷ JMS ▷ AMQP ▷ TCP ▷ UDP ▷ File ▷ FTP ▷ RMI ▷ HTTP (Rest) ▷ WS ▷ Mail ▷ JDBC ▷ XMPP ▷ Twitter ▷ RSS ▷ MongoDB ▷ Redis ▷ Gemfire ▷ Stream
  29. 29. “ Talk is cheap. Show me the code.
  30. 30. 2. Demo
  31. 31. 3. Summary
  32. 32. Summary ▷ Grails standard architecture fits in most of the cases ▷ It does not scale to infinite (and beyond!) ▷ Think about the application you are building ▷ Keep the information flow in mind
  33. 33. Thanks! Any questions? @ilopmar lopez.ivan@gmail.com https://github.com/lmivan Iván López http://kcy.me/22ze3

×