SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Iván López @ilopmar 
GRAILS AND THE 
REAL-TIME WORLD
Hello! 
I am Iván López 
@ilopmar 
@madridgug http://greachconf.com
Traditional architectures 
Request-response 
POST /register-user 
POST /register-user 
POST /register-user
Traditional architectures
Traditional architectures
“ A problem postponed is a 
problem solved. 
Really?
1. 
Event Driven Architectures
Event Driven Architecture 
▷ Fire & Forget 
▷ Decouple producer and consumer 
▷ Immediate action in the consumer 
▷ Real-time
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
“ Can we do it better?
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?
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
“ Don't keep your clients 
waiting unnecessarily! 
Can I defer it?
Goals 
▷ Loosely coupled architecture, easy to extend 
and evolve 
▷ Build high performance and scalable systems 
▷ Keep the business logic where “it belongs”
What about Grails? 
▷ Platform core 
▷ Events plugin 
▷ Executor plugin 
▷ Grails 2.3 async
Synchronous example 
// Send confirmation email 
def 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") 
} 
} 
}
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") 
} 
} 
}
Asynchronous example 
// Executor 
def 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") 
} 
} 
}
“ I love the smell of code in the 
morning
What if we don't want this? 
▷ Extract “dependencies” to configuration 
▷ Change the application behaviour modifying 
the configuration
Spring Integration 
Use inside Spring the 
well-known 
Enterprise Integration 
Patterns 
http://www.enterpriseintegrationpatterns.com/
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
Message 
▷ Payload 
▷ Header 
▷ Immutable
Channel 
▷ Point-to-point 
▷ Publish-Subscribe
Endpoints 
▷ Transformer 
▷ Filter 
▷ Router 
▷ Splitter 
▷ Aggregator 
▷ Service activator 
▷ Channel-adapter 
▷ Enricher 
▷ Bridge 
▷ ...
Adapters 
▷ JMS 
▷ AMQP 
▷ TCP 
▷ UDP 
▷ File 
▷ FTP 
▷ RMI 
▷ HTTP (Rest) 
▷ WS 
▷ Mail 
▷ JDBC 
▷ XMPP 
▷ Twitter 
▷ RSS 
▷ MongoDB 
▷ Redis 
▷ Gemfire 
▷ Stream
“ Talk is cheap. Show me the code.
2. 
Demo
3. 
Summary
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
Thanks! 
Any questions? 
Iván López 
@ilopmar 
lopez.ivan@gmail.com 
https://github.com/lmivan 
http://kcy.me/1dwf7

Mais conteúdo relacionado

Mais procurados

Go Hybrid with Azure Web Apps
Go Hybrid with Azure Web AppsGo Hybrid with Azure Web Apps
Go Hybrid with Azure Web AppsTom Van Gramberen
 
BizTalk Server Performance Tips
BizTalk Server Performance TipsBizTalk Server Performance Tips
BizTalk Server Performance TipsBizTalk360
 
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...DevDay.org
 
Building resilient serverless systems with non-serverless components - Cardif...
Building resilient serverless systems with non-serverless components - Cardif...Building resilient serverless systems with non-serverless components - Cardif...
Building resilient serverless systems with non-serverless components - Cardif...Jeremy Daly
 
Workshop automating with microsoft flow
Workshop   automating with microsoft flowWorkshop   automating with microsoft flow
Workshop automating with microsoft flowJaap Brasser
 
Automate yourself out of a job - Use ChatOps!
Automate yourself out of a job - Use ChatOps!Automate yourself out of a job - Use ChatOps!
Automate yourself out of a job - Use ChatOps!Jaap Brasser
 
Microsoft Flow and PowerShell combined to automate everything
Microsoft Flow and PowerShell combined to automate everythingMicrosoft Flow and PowerShell combined to automate everything
Microsoft Flow and PowerShell combined to automate everythingJaap Brasser
 
Maintaining Consistency for a Financial Event-Driven Architecture (Iago Borge...
Maintaining Consistency for a Financial Event-Driven Architecture (Iago Borge...Maintaining Consistency for a Financial Event-Driven Architecture (Iago Borge...
Maintaining Consistency for a Financial Event-Driven Architecture (Iago Borge...confluent
 
Using Microsoft Flow for IT Professionals
Using Microsoft Flow for IT ProfessionalsUsing Microsoft Flow for IT Professionals
Using Microsoft Flow for IT ProfessionalsJaap Brasser
 
Create a modern(ish) BAM portal in (roughly) one hour!
Create a modern(ish) BAM portal in (roughly) one hour!Create a modern(ish) BAM portal in (roughly) one hour!
Create a modern(ish) BAM portal in (roughly) one hour!BizTalk360
 
Building and Scaling a WebSockets Pubsub System
Building and Scaling a WebSockets Pubsub SystemBuilding and Scaling a WebSockets Pubsub System
Building and Scaling a WebSockets Pubsub SystemKapil Reddy
 
Automate Anything with Microsoft Flow
Automate Anything with Microsoft FlowAutomate Anything with Microsoft Flow
Automate Anything with Microsoft FlowJaap Brasser
 
Net developer days presentation
Net developer days   presentationNet developer days   presentation
Net developer days presentationAlexandre Malavasi
 
Automate it with Azure Functions
Automate it with Azure FunctionsAutomate it with Azure Functions
Automate it with Azure FunctionsJaap Brasser
 
How to fail with serverless
How to fail with serverlessHow to fail with serverless
How to fail with serverlessJeremy Daly
 
From PowerShell Function to Serverless code with Azure Functions
From PowerShell Function to Serverless code with Azure FunctionsFrom PowerShell Function to Serverless code with Azure Functions
From PowerShell Function to Serverless code with Azure FunctionsJaap Brasser
 
BizTalk Server Extensibility
BizTalk Server ExtensibilityBizTalk Server Extensibility
BizTalk Server ExtensibilityBizTalk360
 

Mais procurados (20)

Go Hybrid with Azure Web Apps
Go Hybrid with Azure Web AppsGo Hybrid with Azure Web Apps
Go Hybrid with Azure Web Apps
 
BizTalk Server Performance Tips
BizTalk Server Performance TipsBizTalk Server Performance Tips
BizTalk Server Performance Tips
 
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
 
Building resilient serverless systems with non-serverless components - Cardif...
Building resilient serverless systems with non-serverless components - Cardif...Building resilient serverless systems with non-serverless components - Cardif...
Building resilient serverless systems with non-serverless components - Cardif...
 
Workshop automating with microsoft flow
Workshop   automating with microsoft flowWorkshop   automating with microsoft flow
Workshop automating with microsoft flow
 
Automate yourself out of a job - Use ChatOps!
Automate yourself out of a job - Use ChatOps!Automate yourself out of a job - Use ChatOps!
Automate yourself out of a job - Use ChatOps!
 
Microsoft Flow and PowerShell combined to automate everything
Microsoft Flow and PowerShell combined to automate everythingMicrosoft Flow and PowerShell combined to automate everything
Microsoft Flow and PowerShell combined to automate everything
 
Maintaining Consistency for a Financial Event-Driven Architecture (Iago Borge...
Maintaining Consistency for a Financial Event-Driven Architecture (Iago Borge...Maintaining Consistency for a Financial Event-Driven Architecture (Iago Borge...
Maintaining Consistency for a Financial Event-Driven Architecture (Iago Borge...
 
Using Microsoft Flow for IT Professionals
Using Microsoft Flow for IT ProfessionalsUsing Microsoft Flow for IT Professionals
Using Microsoft Flow for IT Professionals
 
Create a modern(ish) BAM portal in (roughly) one hour!
Create a modern(ish) BAM portal in (roughly) one hour!Create a modern(ish) BAM portal in (roughly) one hour!
Create a modern(ish) BAM portal in (roughly) one hour!
 
Building and Scaling a WebSockets Pubsub System
Building and Scaling a WebSockets Pubsub SystemBuilding and Scaling a WebSockets Pubsub System
Building and Scaling a WebSockets Pubsub System
 
Automate Anything with Microsoft Flow
Automate Anything with Microsoft FlowAutomate Anything with Microsoft Flow
Automate Anything with Microsoft Flow
 
Net developer days presentation
Net developer days   presentationNet developer days   presentation
Net developer days presentation
 
Ecommerce Load Test
Ecommerce Load TestEcommerce Load Test
Ecommerce Load Test
 
Automate it with Azure Functions
Automate it with Azure FunctionsAutomate it with Azure Functions
Automate it with Azure Functions
 
How to fail with serverless
How to fail with serverlessHow to fail with serverless
How to fail with serverless
 
From PowerShell Function to Serverless code with Azure Functions
From PowerShell Function to Serverless code with Azure FunctionsFrom PowerShell Function to Serverless code with Azure Functions
From PowerShell Function to Serverless code with Azure Functions
 
When the connection fails
When the connection failsWhen the connection fails
When the connection fails
 
Go with the flow!
Go with the flow!Go with the flow!
Go with the flow!
 
BizTalk Server Extensibility
BizTalk Server ExtensibilityBizTalk Server Extensibility
BizTalk Server Extensibility
 

Destaque

Halloween costumes for adults are Childish
Halloween costumes for adults are ChildishHalloween costumes for adults are Childish
Halloween costumes for adults are Childishmrich123
 
Neteco waster RESIDUODINERO.es
Neteco waster RESIDUODINERO.esNeteco waster RESIDUODINERO.es
Neteco waster RESIDUODINERO.esRober Exposito
 
LinkedIn družbeno omrežje poslovnih priložnosti
LinkedIn družbeno omrežje poslovnih priložnostiLinkedIn družbeno omrežje poslovnih priložnosti
LinkedIn družbeno omrežje poslovnih priložnostiSergej Lah
 
Storyboard SocialComm, with notes
Storyboard SocialComm, with notesStoryboard SocialComm, with notes
Storyboard SocialComm, with notesabeldridge
 
Dossier emprendeand tweet difusión slideshare
Dossier emprendeand tweet difusión slideshareDossier emprendeand tweet difusión slideshare
Dossier emprendeand tweet difusión slideshareMOAConsulting
 
Simple Sweet Solutions with HUG Tartlets
Simple Sweet Solutions with HUG TartletsSimple Sweet Solutions with HUG Tartlets
Simple Sweet Solutions with HUG TartletsMargaret Wilson
 
Enterprise 2.0 Ppt
Enterprise 2.0 PptEnterprise 2.0 Ppt
Enterprise 2.0 Pptgrupominerva
 
Curso rse pyme modulo i proyecto y sensibilización
Curso rse pyme  modulo i proyecto y sensibilizaciónCurso rse pyme  modulo i proyecto y sensibilización
Curso rse pyme modulo i proyecto y sensibilizaciónASB Soluciones
 
Seminario autoconsumo UPAC UPP novembro 2014 zona norte portugal
Seminario autoconsumo UPAC UPP novembro 2014 zona norte portugalSeminario autoconsumo UPAC UPP novembro 2014 zona norte portugal
Seminario autoconsumo UPAC UPP novembro 2014 zona norte portugalKOSTAL Solar Electric Iberica
 
Annual Meetinagenda2010
Annual Meetinagenda2010Annual Meetinagenda2010
Annual Meetinagenda2010IMTC
 
6 lead generation problems and how to get solutions
6 lead generation problems and how to get solutions6 lead generation problems and how to get solutions
6 lead generation problems and how to get solutionsSiphosith Sithole
 
What is iTEL & How Does It Work?
What is iTEL & How Does It Work?What is iTEL & How Does It Work?
What is iTEL & How Does It Work?Cliff_Obrock
 
Advanced DNS/DHCP for Novell eDirectory Environments
Advanced DNS/DHCP for Novell eDirectory EnvironmentsAdvanced DNS/DHCP for Novell eDirectory Environments
Advanced DNS/DHCP for Novell eDirectory EnvironmentsNovell
 
Informe 2014 Comisión de Desarrollo Urbano
Informe 2014 Comisión de Desarrollo UrbanoInforme 2014 Comisión de Desarrollo Urbano
Informe 2014 Comisión de Desarrollo UrbanoDesarrolloUrbanoPuebla
 
Bridging the Gap Between Different Levels of Business Process Modelling
Bridging the Gap Between Different Levels of Business Process ModellingBridging the Gap Between Different Levels of Business Process Modelling
Bridging the Gap Between Different Levels of Business Process ModellingVioleta Damjanovic-Behrendt
 

Destaque (20)

6. Préstamos
6. Préstamos6. Préstamos
6. Préstamos
 
Halloween costumes for adults are Childish
Halloween costumes for adults are ChildishHalloween costumes for adults are Childish
Halloween costumes for adults are Childish
 
Neteco waster RESIDUODINERO.es
Neteco waster RESIDUODINERO.esNeteco waster RESIDUODINERO.es
Neteco waster RESIDUODINERO.es
 
Entrevista Junio en Nou Horta Sud
Entrevista Junio en Nou Horta SudEntrevista Junio en Nou Horta Sud
Entrevista Junio en Nou Horta Sud
 
LinkedIn družbeno omrežje poslovnih priložnosti
LinkedIn družbeno omrežje poslovnih priložnostiLinkedIn družbeno omrežje poslovnih priložnosti
LinkedIn družbeno omrežje poslovnih priložnosti
 
Storyboard SocialComm, with notes
Storyboard SocialComm, with notesStoryboard SocialComm, with notes
Storyboard SocialComm, with notes
 
Dossier emprendeand tweet difusión slideshare
Dossier emprendeand tweet difusión slideshareDossier emprendeand tweet difusión slideshare
Dossier emprendeand tweet difusión slideshare
 
Simple Sweet Solutions with HUG Tartlets
Simple Sweet Solutions with HUG TartletsSimple Sweet Solutions with HUG Tartlets
Simple Sweet Solutions with HUG Tartlets
 
Enterprise 2.0 Ppt
Enterprise 2.0 PptEnterprise 2.0 Ppt
Enterprise 2.0 Ppt
 
Curso rse pyme modulo i proyecto y sensibilización
Curso rse pyme  modulo i proyecto y sensibilizaciónCurso rse pyme  modulo i proyecto y sensibilización
Curso rse pyme modulo i proyecto y sensibilización
 
Seminario autoconsumo UPAC UPP novembro 2014 zona norte portugal
Seminario autoconsumo UPAC UPP novembro 2014 zona norte portugalSeminario autoconsumo UPAC UPP novembro 2014 zona norte portugal
Seminario autoconsumo UPAC UPP novembro 2014 zona norte portugal
 
Peng des2012 new
Peng des2012 newPeng des2012 new
Peng des2012 new
 
Annual Meetinagenda2010
Annual Meetinagenda2010Annual Meetinagenda2010
Annual Meetinagenda2010
 
6 lead generation problems and how to get solutions
6 lead generation problems and how to get solutions6 lead generation problems and how to get solutions
6 lead generation problems and how to get solutions
 
What is iTEL & How Does It Work?
What is iTEL & How Does It Work?What is iTEL & How Does It Work?
What is iTEL & How Does It Work?
 
folleto_mba_urv
folleto_mba_urvfolleto_mba_urv
folleto_mba_urv
 
Flavia cuida los arboles
Flavia cuida los arbolesFlavia cuida los arboles
Flavia cuida los arboles
 
Advanced DNS/DHCP for Novell eDirectory Environments
Advanced DNS/DHCP for Novell eDirectory EnvironmentsAdvanced DNS/DHCP for Novell eDirectory Environments
Advanced DNS/DHCP for Novell eDirectory Environments
 
Informe 2014 Comisión de Desarrollo Urbano
Informe 2014 Comisión de Desarrollo UrbanoInforme 2014 Comisión de Desarrollo Urbano
Informe 2014 Comisión de Desarrollo Urbano
 
Bridging the Gap Between Different Levels of Business Process Modelling
Bridging the Gap Between Different Levels of Business Process ModellingBridging the Gap Between Different Levels of Business Process Modelling
Bridging the Gap Between Different Levels of Business Process Modelling
 

Semelhante a GGX 2014 - Grails and the real time world

GeeCON Krakow 2015 - Grails and the real-time world
GeeCON Krakow 2015 - Grails and the real-time worldGeeCON Krakow 2015 - Grails and the real-time world
GeeCON Krakow 2015 - Grails and the real-time worldIván López Martín
 
An Introduction to Microservices
An Introduction to MicroservicesAn Introduction to Microservices
An Introduction to MicroservicesAd van der Veer
 
Top Java Performance Problems and Metrics To Check in Your Pipeline
Top Java Performance Problems and Metrics To Check in Your PipelineTop Java Performance Problems and Metrics To Check in Your Pipeline
Top Java Performance Problems and Metrics To Check in Your PipelineAndreas Grabner
 
AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)
AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)
AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)Amazon Web Services
 
Praxistaugliche notes strategien 4 cloud
Praxistaugliche notes strategien 4 cloudPraxistaugliche notes strategien 4 cloud
Praxistaugliche notes strategien 4 cloudRoman Weber
 
Scaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per DayScaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per DayCarmine Paolino
 
Azure tales: a real world CQRS and ES Deep Dive - Andrea Saltarello
Azure tales: a real world CQRS and ES Deep Dive - Andrea SaltarelloAzure tales: a real world CQRS and ES Deep Dive - Andrea Saltarello
Azure tales: a real world CQRS and ES Deep Dive - Andrea SaltarelloITCamp
 
James Turner (Caplin) - Enterprise HTML5 Patterns
James Turner (Caplin) - Enterprise HTML5 PatternsJames Turner (Caplin) - Enterprise HTML5 Patterns
James Turner (Caplin) - Enterprise HTML5 Patternsakqaanoraks
 
Comment créer, optimiser et monétiser vos contenus ?
Comment créer, optimiser et monétiser vos contenus ?Comment créer, optimiser et monétiser vos contenus ?
Comment créer, optimiser et monétiser vos contenus ?Kaliop-slide
 
Event-Driven Architectures Done Right | Tim Berglund, Confluent
Event-Driven Architectures Done Right | Tim Berglund, ConfluentEvent-Driven Architectures Done Right | Tim Berglund, Confluent
Event-Driven Architectures Done Right | Tim Berglund, ConfluentHostedbyConfluent
 
EG Reports - Delicious Data
EG Reports - Delicious DataEG Reports - Delicious Data
EG Reports - Delicious DataBenjamin Shum
 
Building Faster Websites
Building Faster WebsitesBuilding Faster Websites
Building Faster WebsitesCraig Walker
 
Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016Peter Lawrey
 
Use Case Patterns for LLM Applications (1).pdf
Use Case Patterns for LLM Applications (1).pdfUse Case Patterns for LLM Applications (1).pdf
Use Case Patterns for LLM Applications (1).pdfM Waleed Kadous
 
The Anchor Store: Four Confluence Examples to Root Your Deployment
The Anchor Store: Four Confluence Examples to Root Your DeploymentThe Anchor Store: Four Confluence Examples to Root Your Deployment
The Anchor Store: Four Confluence Examples to Root Your DeploymentAtlassian
 
Why And When Should We Consider Stream Processing In Our Solutions Teqnation ...
Why And When Should We Consider Stream Processing In Our Solutions Teqnation ...Why And When Should We Consider Stream Processing In Our Solutions Teqnation ...
Why And When Should We Consider Stream Processing In Our Solutions Teqnation ...Soroosh Khodami
 
Event-Driven Applications Done Right - Pulsar Summit SF 2022
Event-Driven Applications Done Right - Pulsar Summit SF 2022Event-Driven Applications Done Right - Pulsar Summit SF 2022
Event-Driven Applications Done Right - Pulsar Summit SF 2022StreamNative
 
Getting Started with Serverless Architectures
Getting Started with Serverless ArchitecturesGetting Started with Serverless Architectures
Getting Started with Serverless ArchitecturesAmazon Web Services
 

Semelhante a GGX 2014 - Grails and the real time world (20)

GeeCON Krakow 2015 - Grails and the real-time world
GeeCON Krakow 2015 - Grails and the real-time worldGeeCON Krakow 2015 - Grails and the real-time world
GeeCON Krakow 2015 - Grails and the real-time world
 
An Introduction to Microservices
An Introduction to MicroservicesAn Introduction to Microservices
An Introduction to Microservices
 
Top Java Performance Problems and Metrics To Check in Your Pipeline
Top Java Performance Problems and Metrics To Check in Your PipelineTop Java Performance Problems and Metrics To Check in Your Pipeline
Top Java Performance Problems and Metrics To Check in Your Pipeline
 
AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)
AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)
AWS re:Invent 2016: Getting Started with Serverless Architectures (CMP211)
 
Praxistaugliche notes strategien 4 cloud
Praxistaugliche notes strategien 4 cloudPraxistaugliche notes strategien 4 cloud
Praxistaugliche notes strategien 4 cloud
 
Scaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per DayScaling Machine Learning Systems up to Billions of Predictions per Day
Scaling Machine Learning Systems up to Billions of Predictions per Day
 
Azure tales: a real world CQRS and ES Deep Dive - Andrea Saltarello
Azure tales: a real world CQRS and ES Deep Dive - Andrea SaltarelloAzure tales: a real world CQRS and ES Deep Dive - Andrea Saltarello
Azure tales: a real world CQRS and ES Deep Dive - Andrea Saltarello
 
presentation slides
presentation slidespresentation slides
presentation slides
 
James Turner (Caplin) - Enterprise HTML5 Patterns
James Turner (Caplin) - Enterprise HTML5 PatternsJames Turner (Caplin) - Enterprise HTML5 Patterns
James Turner (Caplin) - Enterprise HTML5 Patterns
 
Comment créer, optimiser et monétiser vos contenus ?
Comment créer, optimiser et monétiser vos contenus ?Comment créer, optimiser et monétiser vos contenus ?
Comment créer, optimiser et monétiser vos contenus ?
 
Event-Driven Architectures Done Right | Tim Berglund, Confluent
Event-Driven Architectures Done Right | Tim Berglund, ConfluentEvent-Driven Architectures Done Right | Tim Berglund, Confluent
Event-Driven Architectures Done Right | Tim Berglund, Confluent
 
EG Reports - Delicious Data
EG Reports - Delicious DataEG Reports - Delicious Data
EG Reports - Delicious Data
 
Into The Box 2018 Ortus Keynote
Into The Box 2018 Ortus KeynoteInto The Box 2018 Ortus Keynote
Into The Box 2018 Ortus Keynote
 
Building Faster Websites
Building Faster WebsitesBuilding Faster Websites
Building Faster Websites
 
Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016Microservices for performance - GOTO Chicago 2016
Microservices for performance - GOTO Chicago 2016
 
Use Case Patterns for LLM Applications (1).pdf
Use Case Patterns for LLM Applications (1).pdfUse Case Patterns for LLM Applications (1).pdf
Use Case Patterns for LLM Applications (1).pdf
 
The Anchor Store: Four Confluence Examples to Root Your Deployment
The Anchor Store: Four Confluence Examples to Root Your DeploymentThe Anchor Store: Four Confluence Examples to Root Your Deployment
The Anchor Store: Four Confluence Examples to Root Your Deployment
 
Why And When Should We Consider Stream Processing In Our Solutions Teqnation ...
Why And When Should We Consider Stream Processing In Our Solutions Teqnation ...Why And When Should We Consider Stream Processing In Our Solutions Teqnation ...
Why And When Should We Consider Stream Processing In Our Solutions Teqnation ...
 
Event-Driven Applications Done Right - Pulsar Summit SF 2022
Event-Driven Applications Done Right - Pulsar Summit SF 2022Event-Driven Applications Done Right - Pulsar Summit SF 2022
Event-Driven Applications Done Right - Pulsar Summit SF 2022
 
Getting Started with Serverless Architectures
Getting Started with Serverless ArchitecturesGetting Started with Serverless Architectures
Getting Started with Serverless Architectures
 

Mais de Iván López Martín

SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Voxxed Days CERN 2024 - Spring Boot <3 Testcontainers.pdf
Voxxed Days CERN 2024 - Spring Boot <3 Testcontainers.pdfVoxxed Days CERN 2024 - Spring Boot <3 Testcontainers.pdf
Voxxed Days CERN 2024 - Spring Boot <3 Testcontainers.pdfIván López Martín
 
VMware - Testcontainers y Spring Boot
VMware - Testcontainers y Spring BootVMware - Testcontainers y Spring Boot
VMware - Testcontainers y Spring BootIván López Martín
 
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud GatewaySpring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud GatewayIván López Martín
 
Codemotion Madrid 2023 - Testcontainers y Spring Boot
Codemotion Madrid 2023 - Testcontainers y Spring BootCodemotion Madrid 2023 - Testcontainers y Spring Boot
Codemotion Madrid 2023 - Testcontainers y Spring BootIván López Martín
 
CommitConf 2023 - Spring Framework 6 y Spring Boot 3
CommitConf 2023 - Spring Framework 6 y Spring Boot 3CommitConf 2023 - Spring Framework 6 y Spring Boot 3
CommitConf 2023 - Spring Framework 6 y Spring Boot 3Iván López Martín
 
Construyendo un API REST con Spring Boot y GraalVM
Construyendo un API REST con Spring Boot y GraalVMConstruyendo un API REST con Spring Boot y GraalVM
Construyendo un API REST con Spring Boot y GraalVMIván López Martín
 
jLove 2020 - Micronaut and graalvm: The power of AoT
jLove 2020 - Micronaut and graalvm: The power of AoTjLove 2020 - Micronaut and graalvm: The power of AoT
jLove 2020 - Micronaut and graalvm: The power of AoTIván López Martín
 
Codemotion Madrid 2020 - Serverless con Micronaut
Codemotion Madrid 2020 - Serverless con MicronautCodemotion Madrid 2020 - Serverless con Micronaut
Codemotion Madrid 2020 - Serverless con MicronautIván López Martín
 
JConf Perú 2020 - ¡Micronaut en acción!
JConf Perú 2020 - ¡Micronaut en acción!JConf Perú 2020 - ¡Micronaut en acción!
JConf Perú 2020 - ¡Micronaut en acción!Iván López Martín
 
JConf Perú 2020 - Micronaut + GraalVM = <3
JConf Perú 2020 - Micronaut + GraalVM = <3JConf Perú 2020 - Micronaut + GraalVM = <3
JConf Perú 2020 - Micronaut + GraalVM = <3Iván López Martín
 
JConf México 2020 - Micronaut + GraalVM = <3
JConf México 2020 - Micronaut + GraalVM = <3JConf México 2020 - Micronaut + GraalVM = <3
JConf México 2020 - Micronaut + GraalVM = <3Iván López Martín
 
Developing Micronaut Applications With IntelliJ IDEA
Developing Micronaut Applications With IntelliJ IDEADeveloping Micronaut Applications With IntelliJ IDEA
Developing Micronaut Applications With IntelliJ IDEAIván López Martín
 
CommitConf 2019 - Micronaut y GraalVm: La combinación perfecta
CommitConf 2019 - Micronaut y GraalVm: La combinación perfectaCommitConf 2019 - Micronaut y GraalVm: La combinación perfecta
CommitConf 2019 - Micronaut y GraalVm: La combinación perfectaIván López Martín
 
Codemotion Madrid 2019 - ¡GraalVM y Micronaut: compañeros perfectos!
Codemotion Madrid 2019 - ¡GraalVM y Micronaut: compañeros perfectos!Codemotion Madrid 2019 - ¡GraalVM y Micronaut: compañeros perfectos!
Codemotion Madrid 2019 - ¡GraalVM y Micronaut: compañeros perfectos!Iván López Martín
 
Greach 2019 - Creating Micronaut Configurations
Greach 2019 - Creating Micronaut ConfigurationsGreach 2019 - Creating Micronaut Configurations
Greach 2019 - Creating Micronaut ConfigurationsIván López Martín
 
VoxxedDays Bucharest 2019 - Alexa, nice to meet you
VoxxedDays Bucharest 2019 - Alexa, nice to meet youVoxxedDays Bucharest 2019 - Alexa, nice to meet you
VoxxedDays Bucharest 2019 - Alexa, nice to meet youIván López Martín
 
JavaDay Lviv 2019 - Micronaut in action!
JavaDay Lviv 2019 - Micronaut in action!JavaDay Lviv 2019 - Micronaut in action!
JavaDay Lviv 2019 - Micronaut in action!Iván López Martín
 
CrossDvlup Madrid 2019 - Alexa, encantado de conocerte
CrossDvlup Madrid 2019 - Alexa, encantado de conocerteCrossDvlup Madrid 2019 - Alexa, encantado de conocerte
CrossDvlup Madrid 2019 - Alexa, encantado de conocerteIván López Martín
 

Mais de Iván López Martín (20)

SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Voxxed Days CERN 2024 - Spring Boot <3 Testcontainers.pdf
Voxxed Days CERN 2024 - Spring Boot <3 Testcontainers.pdfVoxxed Days CERN 2024 - Spring Boot <3 Testcontainers.pdf
Voxxed Days CERN 2024 - Spring Boot <3 Testcontainers.pdf
 
VMware - Testcontainers y Spring Boot
VMware - Testcontainers y Spring BootVMware - Testcontainers y Spring Boot
VMware - Testcontainers y Spring Boot
 
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud GatewaySpring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
 
Codemotion Madrid 2023 - Testcontainers y Spring Boot
Codemotion Madrid 2023 - Testcontainers y Spring BootCodemotion Madrid 2023 - Testcontainers y Spring Boot
Codemotion Madrid 2023 - Testcontainers y Spring Boot
 
CommitConf 2023 - Spring Framework 6 y Spring Boot 3
CommitConf 2023 - Spring Framework 6 y Spring Boot 3CommitConf 2023 - Spring Framework 6 y Spring Boot 3
CommitConf 2023 - Spring Framework 6 y Spring Boot 3
 
Construyendo un API REST con Spring Boot y GraalVM
Construyendo un API REST con Spring Boot y GraalVMConstruyendo un API REST con Spring Boot y GraalVM
Construyendo un API REST con Spring Boot y GraalVM
 
jLove 2020 - Micronaut and graalvm: The power of AoT
jLove 2020 - Micronaut and graalvm: The power of AoTjLove 2020 - Micronaut and graalvm: The power of AoT
jLove 2020 - Micronaut and graalvm: The power of AoT
 
Codemotion Madrid 2020 - Serverless con Micronaut
Codemotion Madrid 2020 - Serverless con MicronautCodemotion Madrid 2020 - Serverless con Micronaut
Codemotion Madrid 2020 - Serverless con Micronaut
 
JConf Perú 2020 - ¡Micronaut en acción!
JConf Perú 2020 - ¡Micronaut en acción!JConf Perú 2020 - ¡Micronaut en acción!
JConf Perú 2020 - ¡Micronaut en acción!
 
JConf Perú 2020 - Micronaut + GraalVM = <3
JConf Perú 2020 - Micronaut + GraalVM = <3JConf Perú 2020 - Micronaut + GraalVM = <3
JConf Perú 2020 - Micronaut + GraalVM = <3
 
JConf México 2020 - Micronaut + GraalVM = <3
JConf México 2020 - Micronaut + GraalVM = <3JConf México 2020 - Micronaut + GraalVM = <3
JConf México 2020 - Micronaut + GraalVM = <3
 
Developing Micronaut Applications With IntelliJ IDEA
Developing Micronaut Applications With IntelliJ IDEADeveloping Micronaut Applications With IntelliJ IDEA
Developing Micronaut Applications With IntelliJ IDEA
 
CommitConf 2019 - Micronaut y GraalVm: La combinación perfecta
CommitConf 2019 - Micronaut y GraalVm: La combinación perfectaCommitConf 2019 - Micronaut y GraalVm: La combinación perfecta
CommitConf 2019 - Micronaut y GraalVm: La combinación perfecta
 
Codemotion Madrid 2019 - ¡GraalVM y Micronaut: compañeros perfectos!
Codemotion Madrid 2019 - ¡GraalVM y Micronaut: compañeros perfectos!Codemotion Madrid 2019 - ¡GraalVM y Micronaut: compañeros perfectos!
Codemotion Madrid 2019 - ¡GraalVM y Micronaut: compañeros perfectos!
 
Greach 2019 - Creating Micronaut Configurations
Greach 2019 - Creating Micronaut ConfigurationsGreach 2019 - Creating Micronaut Configurations
Greach 2019 - Creating Micronaut Configurations
 
VoxxedDays Bucharest 2019 - Alexa, nice to meet you
VoxxedDays Bucharest 2019 - Alexa, nice to meet youVoxxedDays Bucharest 2019 - Alexa, nice to meet you
VoxxedDays Bucharest 2019 - Alexa, nice to meet you
 
JavaDay Lviv 2019 - Micronaut in action!
JavaDay Lviv 2019 - Micronaut in action!JavaDay Lviv 2019 - Micronaut in action!
JavaDay Lviv 2019 - Micronaut in action!
 
CrossDvlup Madrid 2019 - Alexa, encantado de conocerte
CrossDvlup Madrid 2019 - Alexa, encantado de conocerteCrossDvlup Madrid 2019 - Alexa, encantado de conocerte
CrossDvlup Madrid 2019 - Alexa, encantado de conocerte
 

Último

Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 

Último (20)

Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

GGX 2014 - Grails and the real time world

  • 1. Iván López @ilopmar GRAILS AND THE REAL-TIME WORLD
  • 2. Hello! I am Iván López @ilopmar @madridgug http://greachconf.com
  • 3. Traditional architectures Request-response POST /register-user POST /register-user POST /register-user
  • 6. “ A problem postponed is a problem solved. Really?
  • 7. 1. Event Driven Architectures
  • 8. Event Driven Architecture ▷ Fire & Forget ▷ Decouple producer and consumer ▷ Immediate action in the consumer ▷ Real-time
  • 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. “ Can we do it better?
  • 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. 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. “ Don't keep your clients waiting unnecessarily! Can I defer it?
  • 14. Goals ▷ Loosely coupled architecture, easy to extend and evolve ▷ Build high performance and scalable systems ▷ Keep the business logic where “it belongs”
  • 15. What about Grails? ▷ Platform core ▷ Events plugin ▷ Executor plugin ▷ Grails 2.3 async
  • 16. Synchronous example // Send confirmation email def 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") } } }
  • 17. 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") } } }
  • 18. Asynchronous example // Executor def 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") } } }
  • 19. “ I love the smell of code in the morning
  • 20. What if we don't want this? ▷ Extract “dependencies” to configuration ▷ Change the application behaviour modifying the configuration
  • 21. Spring Integration Use inside Spring the well-known Enterprise Integration Patterns http://www.enterpriseintegrationpatterns.com/
  • 22. 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
  • 23. Message ▷ Payload ▷ Header ▷ Immutable
  • 24. Channel ▷ Point-to-point ▷ Publish-Subscribe
  • 25. Endpoints ▷ Transformer ▷ Filter ▷ Router ▷ Splitter ▷ Aggregator ▷ Service activator ▷ Channel-adapter ▷ Enricher ▷ Bridge ▷ ...
  • 26. Adapters ▷ JMS ▷ AMQP ▷ TCP ▷ UDP ▷ File ▷ FTP ▷ RMI ▷ HTTP (Rest) ▷ WS ▷ Mail ▷ JDBC ▷ XMPP ▷ Twitter ▷ RSS ▷ MongoDB ▷ Redis ▷ Gemfire ▷ Stream
  • 27. “ Talk is cheap. Show me the code.
  • 30. 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
  • 31. Thanks! Any questions? Iván López @ilopmar lopez.ivan@gmail.com https://github.com/lmivan http://kcy.me/1dwf7