31
GRAILS AND THE REAL-TIME WORLD Iván López @ilopmar

GGX 2014 - Grails and the real time world

Embed Size (px)

Citation preview

Page 1: GGX 2014 - Grails and the real time world

GRAILS AND THE REAL-TIME WORLD

Iván López @ilopmar

Page 2: GGX 2014 - Grails and the real time world

Hello!I am Iván López

@ilopmar

http://greachconf.com@madridgug

Page 3: GGX 2014 - Grails and the real time world

Traditional architectures

Request-response

POST /register-user

POST /register-user

POST /register-user

Page 4: GGX 2014 - Grails and the real time world

Traditional architectures

Page 5: GGX 2014 - Grails and the real time world

Traditional architectures

Page 6: GGX 2014 - Grails and the real time world

“A problem postponed is a problem solved.

Really?

Page 7: GGX 2014 - Grails and the real time world

1.Event Driven Architectures

Page 8: GGX 2014 - Grails and the real time world

Event Driven Architecture

▷ Fire & Forget

▷ Decouple producer and consumer

▷ Immediate action in the consumer

▷ Real-time

Page 9: GGX 2014 - Grails and the real time world

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

Page 10: GGX 2014 - Grails and the real time world

“Can we do it better?

Page 11: GGX 2014 - Grails and the real time world

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?

Total: 115 ms ~ 70% better

Page 12: GGX 2014 - Grails and the real time world

Event driven architecture

POST /purchase

PDFGeneration

POST /purchase - Receive request 5 ms - Data validation 20 ms - Save 40 ms - Render response 50 ms

Total: 115 msSend email

Page 13: GGX 2014 - Grails and the real time world

“Don't keep your clients waiting unnecessarily!

Can I defer it?

Page 14: GGX 2014 - Grails and the real time world

Goals

▷ Loosely coupled architecture, easy to extend and evolve

▷ Build high performance and scalable systems

▷ Keep the business logic where “it belongs”

Page 15: GGX 2014 - Grails and the real time world

What about Grails?

▷ Platform core

▷ Events plugin

▷ Executor plugin

▷ Grails 2.3 async

Page 16: GGX 2014 - Grails and the real time world

Synchronous example

// Send confirmation emaildef user = new User(params).save()emailService.sendRegistationMail(user)render view:'registerOk'

class EmailService { public void sendRegistrationMail(User user) { sendMail { to user.email subject "Confirm your account" html g.render(template: "userEmailConfirmation") } }}

Page 17: GGX 2014 - Grails and the real time world

Asynchronous example

// Platform coredef 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") } }}

Page 18: GGX 2014 - Grails and the real time world

Asynchronous example

// Executordef user = new User(params).save()runAsync { emailService.sendRegistationMail(user)}render view:'registerOk'

class EmailService { public void sendRegistrationMail(User user) { sendMail { to user.email subject "Confirm your account" html g.render(template: "userEmailConfirmation") } }}

Page 19: GGX 2014 - Grails and the real time world

“I love the smell of code in the morning

Page 20: GGX 2014 - Grails and the real time world

What if we don't want this?

▷ Extract “dependencies” to configuration

▷ Change the application behaviour modifying the configuration

Page 21: GGX 2014 - Grails and the real time world

Spring Integration

Use inside Spring thewell-knownEnterprise IntegrationPatterns

http://www.enterpriseintegrationpatterns.com/

Page 22: GGX 2014 - Grails and the real time world

Spring Integration

▷ Lightweight messaging mechanism for Spring applications

▷ High level abstraction for messaging

▷ Application code is not aware of the messaging API

▷ External systems integration declaring adapters

Page 23: GGX 2014 - Grails and the real time world

Message

▷ Payload

▷ Header

▷ Immutable

Page 24: GGX 2014 - Grails and the real time world

Channel

▷ Point-to-point

▷ Publish-Subscribe

Page 25: GGX 2014 - Grails and the real time world

Endpoints

▷ Transformer

▷ Filter

▷ Router

▷ Splitter

▷ Aggregator

▷ Service activator

▷ Channel-adapter

▷ Enricher

▷ Bridge

▷ ...

Page 26: GGX 2014 - Grails and the real time world

Adapters

▷ JMS▷ AMQP▷ TCP▷ UDP▷ File▷ FTP▷ RMI▷ HTTP (Rest)▷ WS

▷ Mail▷ JDBC▷ XMPP▷ Twitter▷ RSS▷ MongoDB▷ Redis

▷ Gemfire▷ Stream

Page 27: GGX 2014 - Grails and the real time world

“Talk is cheap. Show me the code.

Page 28: GGX 2014 - Grails and the real time world

2.Demo

Page 29: GGX 2014 - Grails and the real time world

3.Summary

Page 30: GGX 2014 - Grails and the real time world

Summary

▷ Grails standard architecture fits in most of the cases

▷ It doesn't scale to infinite (and beyond!)

▷ Think about the application you're building

▷ Think about information flow

Page 31: GGX 2014 - Grails and the real time world

Thanks!Any questions?

@ilopmar

[email protected]

https://github.com/lmivan

Iván López

http://kcy.me/1dwf7