Grails and the real-time world
Iván López
@ilopmar
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 2
Hello!
@ilopmar
http://greachconf.com@madridgug
I'm Iván López
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 3
Traditional architectures
Request-Response
POST /register-user
POST /register-user
POST /register-user
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 4
Traditional architectures
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 5
Traditional architectures
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 6
“A problem postponed is a
problem solved.”
Really?
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 7
1. Event Driven Architectures
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 8
Event Driven Architectures
● Fire & Forget
● Decouple producer and consumer
● Immediate action in the consumer
● Real-time
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 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
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 10
“Can we do it better?”
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 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?
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 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
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 13
“Don't keep your clients
waiting unnecessarily!”
Can I defer it?
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 14
Goals
● Loosely coupled architecture, easy to extend and evolve.
● Build high performance and scalable systems.
● Keep business logic where “it belongs”.
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 15
What about Grails?
● Platform-core plugin
● Events plugin (Grails 2.X)
● Executor plugin
● Grails 2.3+ async
● Grails 3+ events
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 16
Synchronous example
// Send confirmation email
def user = new User(params).save()
emailService.sendRegistrationMail(user)
render view:'registerOk'
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 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")
}
}
}
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 18
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")
}
}
}
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 19
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")
}
}
}
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 20
“I love the smell of code in
the morning”
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 21
What if we don't want this?
● Extract “dependencies” to configuration
● Change application behavior modifying the configuration
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 22
Spring Integration
Use inside Spring the well-known
Enterprise Integration Patterns
http://www.enterpriseintegrationpatterns.com/
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 23
Spring Integration
● Lightweight messaging mechanism for Spring apps
● High level abstraction for messaging
● External systems integration declaring adapters
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 24
Message
● Payload
● Headers
● Immutable
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 25
Channels
● Point-to-point
● Publish-subscribe
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 26
Endpoints
● Transformer
● Filter
● Router
● Splitter
● Aggregator
● Service-activator
● Channel-adapter
● Enricher
● Bridge
● ...
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 27
Adapters
● JMS
● AMQP
● TCP
● UDP
● File
● FTP
● JPA
● RMI
● HTTP (Rest)
● Webservice
● Mail
● JDBC
● XMPP
● MQTT
● Twitter
● RSS
● MongoDB
● Redis
● Gemfire
● Stream
● Syslog
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 28
“Talk is cheap. Show me the
code”
-- Linus Torvalds
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 29
2. Demo
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 30
3. Summary
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 31
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
Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a
Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 32
@ilopmar
lopez.ivan@gmail.com
https://github.com/lmivan
Iván López
Thanks!
Any questions?
http://bit.ly/feedback-grails

SpringOne 2GX 2015 - Grails and the Real-time World

  • 1.
    Grails and thereal-time world Iván López @ilopmar
  • 2.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 2 Hello! @ilopmar http://greachconf.com@madridgug I'm Iván López
  • 3.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 3 Traditional architectures Request-Response POST /register-user POST /register-user POST /register-user
  • 4.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 4 Traditional architectures
  • 5.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 5 Traditional architectures
  • 6.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 6 “A problem postponed is a problem solved.” Really?
  • 7.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 7 1. Event Driven Architectures
  • 8.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 8 Event Driven Architectures ● Fire & Forget ● Decouple producer and consumer ● Immediate action in the consumer ● Real-time
  • 9.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 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.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 10 “Can we do it better?”
  • 11.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 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.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 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.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 13 “Don't keep your clients waiting unnecessarily!” Can I defer it?
  • 14.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 14 Goals ● Loosely coupled architecture, easy to extend and evolve. ● Build high performance and scalable systems. ● Keep business logic where “it belongs”.
  • 15.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 15 What about Grails? ● Platform-core plugin ● Events plugin (Grails 2.X) ● Executor plugin ● Grails 2.3+ async ● Grails 3+ events
  • 16.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 16 Synchronous example // Send confirmation email def user = new User(params).save() emailService.sendRegistrationMail(user) render view:'registerOk'
  • 17.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 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.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 18 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") } } }
  • 19.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 19 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") } } }
  • 20.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 20 “I love the smell of code in the morning”
  • 21.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 21 What if we don't want this? ● Extract “dependencies” to configuration ● Change application behavior modifying the configuration
  • 22.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 22 Spring Integration Use inside Spring the well-known Enterprise Integration Patterns http://www.enterpriseintegrationpatterns.com/
  • 23.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 23 Spring Integration ● Lightweight messaging mechanism for Spring apps ● High level abstraction for messaging ● External systems integration declaring adapters
  • 24.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 24 Message ● Payload ● Headers ● Immutable
  • 25.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 25 Channels ● Point-to-point ● Publish-subscribe
  • 26.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 26 Endpoints ● Transformer ● Filter ● Router ● Splitter ● Aggregator ● Service-activator ● Channel-adapter ● Enricher ● Bridge ● ...
  • 27.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 27 Adapters ● JMS ● AMQP ● TCP ● UDP ● File ● FTP ● JPA ● RMI ● HTTP (Rest) ● Webservice ● Mail ● JDBC ● XMPP ● MQTT ● Twitter ● RSS ● MongoDB ● Redis ● Gemfire ● Stream ● Syslog
  • 28.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 28 “Talk is cheap. Show me the code” -- Linus Torvalds
  • 29.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 29 2. Demo
  • 30.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 30 3. Summary
  • 31.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 31 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
  • 32.
    Unless otherwise indicated,these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 32 @ilopmar lopez.ivan@gmail.com https://github.com/lmivan Iván López Thanks! Any questions? http://bit.ly/feedback-grails