SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
Reactive Retail 
Big Retail Goes Reactive at Walmart 
NOVEMBER 2014 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Agenda 
Introduction 
Walmart.ca re-architecture 
Move to Functional Programming 
Technical Tips & Features 
Experiences and Impressions 
Outlook 
Q&A 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
About Nurun 
AREAS OF EXPERTISE 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
12 
San Francisco 
Atlanta 
Nancy 
Shanghai 
Quebec Turin 
Montreal 
Paris 
Milan 
Toronto 
Chicoutimi 
Madrid 
1,200+ 
Employees 
14 Years 
In Business 
Retail 
Automotive 
Financial Services 
Media & Entertainment 
Fashion & Beauty 
Utilities 
Government 
Telecommunications 
Travel & Hospitality 
Health & Pharma 
3 
We are a global design & 
technology consultancy 
with 12 offices worldwide.
Introduction 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Introduction 
TYPICAL LARGE ECOMMERCE ENVIRONMENTS 
CDN 
JSPs 
E-Commerce 
Platform 
RDBMS 
Product content management 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Introduction 
TYPICAL LARGE ECOMMERCE ENVIRONMENTS 
CDN 
JSPs 
E-Commerce 
Platform Search & 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
merchandizing 
RDBMS 
Product content management
Introduction 
INCUMBENT PLATFORM 
• ATG, Oracle 
• Fairly monolithic 
• Rapidly evolving 
merchandising needs 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Introduction 
INCUMBENT PLATFORM 
• ATG, Oracle 
• Fairly monolithic 
• Rapidly evolving 
merchandising needs 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Introduction 
INCUMBENT PLATFORM 
• ATG, Oracle 
• Fairly monolithic 
• Rapidly evolving 
merchandising needs 
• Scalability issues 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Retail priorities 
EFFICIENT & SCALABLE 
Need to handle large volumes 
RESILIENT 
Downtime is expensive 
FLEXIBLE & MAINTAINABLE 
Business requirements change 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Need to go Reactive to be … 
RESPONSIVE 
Customer experience, brand promise 
RESILIENT 
Handle failure at multiple levels 
ELASTIC 
Handle traffic spikes (without breaking the bank) 
MESSAGE-DRIVEN 
Enable all of the above 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Walmart.ca Re-architecture 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Walmart.ca re-architecture 
JSPs 
ATG 
Oracle 
Product content management 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Walmart.ca re-architecture 
REST API 
JSPs 
ATG 
Oracle 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
REST API 
Endeca search & 
merchandizing 
Product content management
Walmart.ca re-architecture 
JSPs 
ATG 
Oracle 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
REST API 
Endeca search & 
merchandizing 
Akka, Redis 
Product content management
Walmart.ca re-architecture 
JSPs 
ATG 
Oracle 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
JSON 
REST API 
Endeca search & 
merchandizing 
Play 
Akka, Redis 
Product content management
Walmart.ca re-architecture 
JSON 
REST API 
ATG 
Oracle 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
JSON 
REST API 
Endeca search & 
merchandizing 
Play 
Akka, Redis 
Product content management
Walmart.ca re-architecture 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
No. 1 +20% 
Canada’s first responsively 
designed e-commerce site 
for a big box retailer 
+98% 
Increase in conversion in the 
first 4 weeks after launch 
Increase in mobile orders 
-36% 
Decrease in average page 
load time 
Awarded 
BEST E-COMMERCE SITE in large 
retailers by 
Retail Council of Canada
Walmart.ca re-architecture 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
No. 1 +20% 
Canada’s first responsively 
designed e-commerce site 
for a big box retailer 
+98% 
Increase in conversion in the 
first 4 weeks after launch 
Increase in mobile orders 
-36% 
Decrease in average page 
load time 
NO SYSTEM OUTAGES! 
Awarded 
BEST E-COMMERCE SITE in large 
retailers by 
Retail Council of Canada
Move to Functional Programming 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Move to Functional Programming 
● Majority of the team are developers with a Java background 
● Play provides an easy entry path to Scala / Reactive / Functional: 
§ Based on familiar MVC patterns 
§ Can start with Java style, mutation, blocking 
§ Incrementally transition to Scala style, immutable, non-blocking 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Move to Functional Programming 
1. No nulls (use Option) 
2. No vars, mutable state* 
3. Use higher-order functions (map, flatMap, filter, for-yield, etc.) 
4. Business logic should be side-effect free (testability!) 
5. Create and use strong types 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
*unless well justified (e.g. much clearer), and as small a scope as possible
Move to Functional Programming 
● Code should be a clear and concise as possible 
● Types should be express intent and fit tightly 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Move to Functional Programming: Strong Types 
sealed trait Language 
case object English extends Language 
case object French extends Language 
def formatPrice(price: Price, lang: Language) = lang match { 
case English => … 
case French => … 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
} 
implicit val binder = new PathBindable[Language] { 
… 
}
Technical Tips & Features 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Tips & Features: Caching Futures (on-heap) 
● Several concurrent requests for same data 
● Whoever requests first initiates the Future (Promise) 
● No locking required (narrow window between first request and when 
Future is cached) 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Tips & Features: Handling JSON 
P lay Application Makes Heavy Use of JSON 
• Consumes JSON view advice from Endeca 
• Proxy & augment JSON data for web service calls 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Tips & Features: Play JSON macro 
Consuming JSON (e.g. Endeca cartridges) 
case class Product(id: Long, name: String, …) 
object Product { 
implicit val formats = Json.format[Product] 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
} 
Json.toJson(product) 
productJson.asOpt[Product]
Tips & Features: ‘Almost Default’ Reads/Writes 
OPEN CHALLENGE 
Sometime we want an ‘almost default’ Reads/Writes 
• e.g. use a default 
• Read/write a few fields in a particular way 
• e.g. format two dates in different ways 
• (Could Shapeless case class generics macro help?) 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Tips & Features: Proxying and Augmenting JSON 
Proxying JSON (e.g. most web services) 
• Might want to augment a JSON response 
• Don’t need to care about knowing the entire structure 
• Play JSON transformers 
• play-json-zipper can be helpful (github: mandubian) 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Tips & Features: Dependency Injection 
CONTROLLER DEPENDENCIES (SERVICES) 
• Use structural types for DI at the controller level 
• Create a services module for each request 
• Want access to request header (logging) 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Tips & Features: Dependency Injection 
THREADLOCAL 
• Inject dependencies in Global.getControllerInstance 
• Initialize services module in Global.onRouteRequest, add to 
ThreadLocal 
• Pick up this value in the getControllerInstance and provide it to our 
controller 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Tips & Features: Monadic Rendering 
Page Model 
• Template 
• Zones 
• Cartridges 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Rendering View Advice: Templates & Zones 
The business user selects a template: 
• Determines the page layout 
• Each template has ~12 zones 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Rendering View Advice: Cartridges 
… adds cartridges to the zones: 
• ~100 cartridges 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
ProductImage 
ProductDescription 
ProductPurchase
Rendering View Advice: Whole Page 
• Endeca fills in data (product info) 
• Play renders the cartridge as HTML 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Rendering View Advice: JSON to Visual Page 
• Tmpl1 
• Header 
• Car1 
• Car2 
• LeftNav 
• Car3 
• MainContent 
• Car4 
• Car5 
• Car6 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Rendering View Advice: JSON to HTML 
• Tmpl1 
• Header 
• Car1 
• Car2 
• LeftNav 
• Car3 
• MainContent 
• Car4 
• Car5 
• Car6 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
<body>! 
<div class=“header”>! 
! !…! 
</div>! 
<div class=“leftNav”>! 
! !…! 
</div>! 
!<div class=“main”>! 
! !…! 
</div>! 
</body>!
Rendering View Advice: Auxiliary Information 
• Tmpl1 
• Header 
• Car1 
• Car2 
• LeftNav 
• Car3 
• MainContent 
• Car4 
• Car5 
• Car6 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
<head>! 
! 
</head>! 
<body>! 
<div class=“header”>! 
! !…! 
</div>! 
<div class=“leftNav”>! 
! !…! 
</div>! 
!<div class=“main”>! 
! !…! 
</div>! 
! 
! 
</body>!
Rendering View Advice: Auxiliary Information 
• Tmpl1 
• Header 
• Car1 
• Car2 
• LeftNav 
• Car3 
• MainContent 
• Car4 
• Car5 
• Car6 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
<head>! 
! 
</head>! 
<body>! 
<div class=“header”>! 
! !…! 
</div>! 
<div class=“leftNav”>! 
! !…! 
</div>! 
!<div class=“main”>! 
! !…! 
</div>! 
! 
! 
</body>! 
CSS / JavaScript / RJS modules
Rendering View Advice: Auxiliary Information 
• Tmpl1 
• Header 
• Car1 
• Car2 
• LeftNav 
• Car3 
• MainContent 
• Car4 
• Car5 
• Car6 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
<head>! 
! 
</head>! 
<body>! 
<div class=“header”>! 
! !…! 
</div>! 
<div class=“leftNav”>! 
! !…! 
</div>! 
!<div class=“main”>! 
! !…! 
</div>! 
! 
! 
</body>! 
CSS / JavaScript / RJS modules 
JavaScript / RJS modules
Rendering View Advice: Auxiliary Information 
• Tmpl1 
• Header 
• Car1 
• Car2 
• LeftNav 
• Car3 
• MainContent 
• Car4 
• Car5 
• Car6 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
<head>! 
! 
</head>! 
<body>! 
<div class=“header”>! 
! !…! 
</div>! 
<div class=“leftNav”>! 
! !…! 
</div>! 
!<div class=“main”>! 
! !…! 
</div>! 
! 
! 
</body>! 
CSS / JavaScript / RJS modules 
JavaScript / RJS modules 
Cache control
Monadic Rendering: ValidatedBuilder Monad 
ValidatedBuilder[X] 
• “Parse/process” X 
• ≅ Future[(X, Boolean, Resources)] 
• Error flag: 
• Determine if page should be cached 
• Front-end resources 
• CSS 
• RequireJS modules 
• JavaScript snippets (+ page location requirements) 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Monadic Rendering: ValidatedBuilder Monad 
ValidatedBuilder[X] 
• map and flatMap handle combining and propagating validity and 
front-end resources 
• Code focuses on the essential task (JSON -> HTML) without clutter 
• Error prone ‘plumbing’ is handled by the monad abstraction 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Monadic Rendering: ValidatedBuilder Zone 
v al headerContent: VB[Seq[Cartridge]] = 
(viewAdvice  “header”) 
.as[Seq[JsValue]] // Seq[JsValue] 
.map(Cartridge.parse) // Seq[VB[Cartridge]] 
.vbSeq // VB[Seq[Cartridge]] 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Monadic Rendering: ValidatedBuilder Template 
val template: VB[Template] = for { 
header <- headerContent : VB[Seq[Cartridge]] 
leftNav <- leftNavContent 
… 
templateResult <- CayenneTemplate(header, leftNav, …) 
} yield templateResult 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Monadic Rendering: ValidatedBuilder Page 
for { 
content <- template.contents : Future[Template] 
resources <- template.resources : Future[Resources] 
isCacheable <- template.isValid : Future[Boolean] 
yield { 
val result = template.render(resources) 
if (isCacheable) 
result 
else 
result.withHeaders(noCache: _*) 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 
}
Tips & Features: Dynamic Configuration 
• Ops can make on the fly configuration changes 
• Enable/disable services and site features 
• Change endpoints 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Tips & Features: Dynamic Configuration 
• Sends configuration delta to Play (JSON object) 
• Play verifies the change (initialize services module) 
• Each request sees a snapshot of the configuration 
• Uses standard Play HOCON API 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Experience and Impressions 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Experience and Impressions 
● Never need to say “no” to a client due to technical limitations, 
● Heavily concurrency / parallelism, with very little headaches, 
● Aggressive refactorings are surprisingly easy (thank you strong types). 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Outlook 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Outlook 
NEW BREED OF PRODUCTS 
Reactive core 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Outlook 
NEW BREED OF PRODUCTS 
Reactive core 
Middleware 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Outlook 
NEW BREED OF PRODUCTS 
Reactive core 
Middleware 
Omnichannel CE 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Outlook 
NEW BREED OF PRODUCTS 
Reactive core 
Middleware 
Omnichannel CE 
Streaming big data 
Machine intelligence 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Outlook 
NEW BREED OF PRODUCTS 
Reactive core 
Middleware 
Omnichannel CE 
Streaming big data 
Machine intelligence 
CMS 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Outlook 
NEW BREED OF PRODUCTS 
Reactive core 
Middleware 
Omnichannel CE 
Streaming big data 
Machine intelligence 
CMS 
BAAS 
REsponsiveSS 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Outlook 
NEW BREED OF PRODUCTS 
Reactive core 
Middleware 
Omnichannel CE 
Streaming big data 
Machine intelligence 
CMS 
BAAS 
REsponsiveSS 
In store tech, IoT… 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
Q & A 
Ankur Mathur @anchormath 
Dana Harrington @danagharrington https://github.com/dana-harrington 
REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART

Contenu connexe

Tendances

Can Apache Kafka Replace a Database?
Can Apache Kafka Replace a Database?Can Apache Kafka Replace a Database?
Can Apache Kafka Replace a Database?
Kai Wähner
 
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0
Legacy Typesafe (now Lightbend)
 

Tendances (20)

Confluent Kafka and KSQL: Streaming Data Pipelines Made Easy
Confluent Kafka and KSQL: Streaming Data Pipelines Made EasyConfluent Kafka and KSQL: Streaming Data Pipelines Made Easy
Confluent Kafka and KSQL: Streaming Data Pipelines Made Easy
 
Can Apache Kafka Replace a Database?
Can Apache Kafka Replace a Database?Can Apache Kafka Replace a Database?
Can Apache Kafka Replace a Database?
 
From data stream management to distributed dataflows and beyond
From data stream management to distributed dataflows and beyondFrom data stream management to distributed dataflows and beyond
From data stream management to distributed dataflows and beyond
 
Pivoting Spring XD to Spring Cloud Data Flow with Sabby Anandan
Pivoting Spring XD to Spring Cloud Data Flow with Sabby AnandanPivoting Spring XD to Spring Cloud Data Flow with Sabby Anandan
Pivoting Spring XD to Spring Cloud Data Flow with Sabby Anandan
 
Kafka Summit SF 2017 - Riot's Journey to Global Kafka Aggregation
Kafka Summit SF 2017 - Riot's Journey to Global Kafka AggregationKafka Summit SF 2017 - Riot's Journey to Global Kafka Aggregation
Kafka Summit SF 2017 - Riot's Journey to Global Kafka Aggregation
 
Hybrid Kafka, Taking Real-time Analytics to the Business (Cody Irwin, Google ...
Hybrid Kafka, Taking Real-time Analytics to the Business (Cody Irwin, Google ...Hybrid Kafka, Taking Real-time Analytics to the Business (Cody Irwin, Google ...
Hybrid Kafka, Taking Real-time Analytics to the Business (Cody Irwin, Google ...
 
Building a Modern Microservices Architecture at Gilt: The Essentials
Building a Modern Microservices Architecture at Gilt: The EssentialsBuilding a Modern Microservices Architecture at Gilt: The Essentials
Building a Modern Microservices Architecture at Gilt: The Essentials
 
Scala eXchange: Building robust data pipelines in Scala
Scala eXchange: Building robust data pipelines in ScalaScala eXchange: Building robust data pipelines in Scala
Scala eXchange: Building robust data pipelines in Scala
 
Pragmatic CQRS with existing applications and databases (Digital Xchange, May...
Pragmatic CQRS with existing applications and databases (Digital Xchange, May...Pragmatic CQRS with existing applications and databases (Digital Xchange, May...
Pragmatic CQRS with existing applications and databases (Digital Xchange, May...
 
Data Streaming with Apache Kafka & MongoDB
Data Streaming with Apache Kafka & MongoDBData Streaming with Apache Kafka & MongoDB
Data Streaming with Apache Kafka & MongoDB
 
Typesafe Reactive Platform: Monitoring 1.0, Commercial features and more
Typesafe Reactive Platform: Monitoring 1.0, Commercial features and moreTypesafe Reactive Platform: Monitoring 1.0, Commercial features and more
Typesafe Reactive Platform: Monitoring 1.0, Commercial features and more
 
Event Sourcing, Stream Processing and Serverless (Ben Stopford, Confluent) K...
Event Sourcing, Stream Processing and Serverless (Ben Stopford, Confluent)  K...Event Sourcing, Stream Processing and Serverless (Ben Stopford, Confluent)  K...
Event Sourcing, Stream Processing and Serverless (Ben Stopford, Confluent) K...
 
Modern Cloud-Native Streaming Platforms: Event Streaming Microservices with A...
Modern Cloud-Native Streaming Platforms: Event Streaming Microservices with A...Modern Cloud-Native Streaming Platforms: Event Streaming Microservices with A...
Modern Cloud-Native Streaming Platforms: Event Streaming Microservices with A...
 
Kafka Summit NYC 2017 - Apache Kafka in the Enterprise: What if it Fails?
Kafka Summit NYC 2017 - Apache Kafka in the Enterprise: What if it Fails? Kafka Summit NYC 2017 - Apache Kafka in the Enterprise: What if it Fails?
Kafka Summit NYC 2017 - Apache Kafka in the Enterprise: What if it Fails?
 
Writing Blazing Fast, and Production-Ready Kafka Streams apps in less than 30...
Writing Blazing Fast, and Production-Ready Kafka Streams apps in less than 30...Writing Blazing Fast, and Production-Ready Kafka Streams apps in less than 30...
Writing Blazing Fast, and Production-Ready Kafka Streams apps in less than 30...
 
Real-World Pulsar Architectural Patterns
Real-World Pulsar Architectural PatternsReal-World Pulsar Architectural Patterns
Real-World Pulsar Architectural Patterns
 
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0
A Deeper Look Into Reactive Streams with Akka Streams 1.0 and Slick 3.0
 
Pakk Your Alpakka: Reactive Streams Integrations For AWS, Azure, & Google Cloud
Pakk Your Alpakka: Reactive Streams Integrations For AWS, Azure, & Google CloudPakk Your Alpakka: Reactive Streams Integrations For AWS, Azure, & Google Cloud
Pakk Your Alpakka: Reactive Streams Integrations For AWS, Azure, & Google Cloud
 
Building a Web Application with Kafka as your Database
Building a Web Application with Kafka as your DatabaseBuilding a Web Application with Kafka as your Database
Building a Web Application with Kafka as your Database
 
Apache Kafka and API Management / API Gateway – Friends, Enemies or Frenemies?
Apache Kafka and API Management / API Gateway – Friends, Enemies or Frenemies?Apache Kafka and API Management / API Gateway – Friends, Enemies or Frenemies?
Apache Kafka and API Management / API Gateway – Friends, Enemies or Frenemies?
 

En vedette

Integrate your mojo - Unity platform - Research Research ltd
Integrate your mojo - Unity platform - Research Research ltdIntegrate your mojo - Unity platform - Research Research ltd
Integrate your mojo - Unity platform - Research Research ltd
aadamishmael
 
NRF Big Show - FINAL
NRF Big Show - FINALNRF Big Show - FINAL
NRF Big Show - FINAL
Drew Green
 

En vedette (20)

Revitalizing Walmart's Aging Architecture for Web Scale
Revitalizing Walmart's Aging Architecture for Web ScaleRevitalizing Walmart's Aging Architecture for Web Scale
Revitalizing Walmart's Aging Architecture for Web Scale
 
Revitalizing Aging Architectures with Microservices
Revitalizing Aging Architectures with MicroservicesRevitalizing Aging Architectures with Microservices
Revitalizing Aging Architectures with Microservices
 
MUTATION - Multi-écrans : concevoir l’expérience sans perdre le consommateur
MUTATION - Multi-écrans : concevoir l’expérience sans perdre le consommateurMUTATION - Multi-écrans : concevoir l’expérience sans perdre le consommateur
MUTATION - Multi-écrans : concevoir l’expérience sans perdre le consommateur
 
MUTATION - Générer des affaires par le contenu : entre créativité et performance
MUTATION - Générer des affaires par le contenu : entre créativité et performanceMUTATION - Générer des affaires par le contenu : entre créativité et performance
MUTATION - Générer des affaires par le contenu : entre créativité et performance
 
CHI 2014
CHI 2014CHI 2014
CHI 2014
 
MUTATION - Objets et corps connectés : de la science-fiction dans nos réalité...
MUTATION - Objets et corps connectés : de la science-fiction dans nos réalité...MUTATION - Objets et corps connectés : de la science-fiction dans nos réalité...
MUTATION - Objets et corps connectés : de la science-fiction dans nos réalité...
 
Brick-and-Mortar vs. Online Only: How to Win the Omni-channel Battle Webinar
Brick-and-Mortar vs. Online Only: How to Win the Omni-channel Battle WebinarBrick-and-Mortar vs. Online Only: How to Win the Omni-channel Battle Webinar
Brick-and-Mortar vs. Online Only: How to Win the Omni-channel Battle Webinar
 
Integrate your mojo - Unity platform - Research Research ltd
Integrate your mojo - Unity platform - Research Research ltdIntegrate your mojo - Unity platform - Research Research ltd
Integrate your mojo - Unity platform - Research Research ltd
 
walmart closes up their shops in germany
walmart closes up their shops in germanywalmart closes up their shops in germany
walmart closes up their shops in germany
 
Android Platform Overview - Azercell Barama
Android Platform Overview - Azercell BaramaAndroid Platform Overview - Azercell Barama
Android Platform Overview - Azercell Barama
 
Unity 3d
Unity 3dUnity 3d
Unity 3d
 
Case study - Walmart (Philip Kotler 14th Edition, Chapter 3)
Case study - Walmart (Philip Kotler 14th Edition, Chapter 3)Case study - Walmart (Philip Kotler 14th Edition, Chapter 3)
Case study - Walmart (Philip Kotler 14th Edition, Chapter 3)
 
Reactive Programming in Spring 5
Reactive Programming in Spring 5Reactive Programming in Spring 5
Reactive Programming in Spring 5
 
Android Platform Architecture
Android Platform ArchitectureAndroid Platform Architecture
Android Platform Architecture
 
Wal mart case_study
Wal mart case_studyWal mart case_study
Wal mart case_study
 
Building a Reactive RESTful API with Akka Http & Slick
Building a Reactive RESTful API with Akka Http & SlickBuilding a Reactive RESTful API with Akka Http & Slick
Building a Reactive RESTful API with Akka Http & Slick
 
NRF Big Show - FINAL
NRF Big Show - FINALNRF Big Show - FINAL
NRF Big Show - FINAL
 
NRF Big Show
NRF Big ShowNRF Big Show
NRF Big Show
 
Unity 3d Basics
Unity 3d BasicsUnity 3d Basics
Unity 3d Basics
 
eCommerce Trends for 2015
eCommerce Trends for 2015eCommerce Trends for 2015
eCommerce Trends for 2015
 

Similaire à Big Retail Goes Reactive at Walmart

Coll presentation-typesafe-case study-walmart
Coll presentation-typesafe-case study-walmartColl presentation-typesafe-case study-walmart
Coll presentation-typesafe-case study-walmart
Dwayne Ingram
 
The Next Generation IT Department MUST HAVE CLOUD
The Next Generation IT Department MUST HAVE CLOUDThe Next Generation IT Department MUST HAVE CLOUD
The Next Generation IT Department MUST HAVE CLOUD
Rackspace
 
SimplifyStreamingArchitecture
SimplifyStreamingArchitectureSimplifyStreamingArchitecture
SimplifyStreamingArchitecture
Maheedhar Gunturu
 
Webinar Slides: High Volume MySQL HA: SaaS Continuous Operations with Terabyt...
Webinar Slides: High Volume MySQL HA: SaaS Continuous Operations with Terabyt...Webinar Slides: High Volume MySQL HA: SaaS Continuous Operations with Terabyt...
Webinar Slides: High Volume MySQL HA: SaaS Continuous Operations with Terabyt...
Continuent
 

Similaire à Big Retail Goes Reactive at Walmart (20)

Hadoop and the Relational Database: The Best of Both Worlds
Hadoop and the Relational Database: The Best of Both WorldsHadoop and the Relational Database: The Best of Both Worlds
Hadoop and the Relational Database: The Best of Both Worlds
 
Coll presentation-typesafe-case study-walmart
Coll presentation-typesafe-case study-walmartColl presentation-typesafe-case study-walmart
Coll presentation-typesafe-case study-walmart
 
The Next Generation IT Department MUST HAVE CLOUD
The Next Generation IT Department MUST HAVE CLOUDThe Next Generation IT Department MUST HAVE CLOUD
The Next Generation IT Department MUST HAVE CLOUD
 
Moving existing apps to the cloud
 Moving existing apps to the cloud Moving existing apps to the cloud
Moving existing apps to the cloud
 
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkCloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
 
Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1
 
Journey of Implementing Solr at Target: Presented by Raja Ramachandran, Target
Journey of Implementing Solr at Target: Presented by Raja Ramachandran, TargetJourney of Implementing Solr at Target: Presented by Raja Ramachandran, Target
Journey of Implementing Solr at Target: Presented by Raja Ramachandran, Target
 
Fearless From Monolith to Serverless with Dynatrace
Fearless From Monolith to Serverless with DynatraceFearless From Monolith to Serverless with Dynatrace
Fearless From Monolith to Serverless with Dynatrace
 
GraphQL Munich Meetup #1 - How We Use GraphQL At Commercetools
GraphQL Munich Meetup #1 - How We Use GraphQL At CommercetoolsGraphQL Munich Meetup #1 - How We Use GraphQL At Commercetools
GraphQL Munich Meetup #1 - How We Use GraphQL At Commercetools
 
SimplifyStreamingArchitecture
SimplifyStreamingArchitectureSimplifyStreamingArchitecture
SimplifyStreamingArchitecture
 
Become an IT Service Broker
Become an IT Service BrokerBecome an IT Service Broker
Become an IT Service Broker
 
Event-Driven Architecture (EDA)
Event-Driven Architecture (EDA)Event-Driven Architecture (EDA)
Event-Driven Architecture (EDA)
 
[db tech showcase Tokyo 2018] #dbts2018 #B33 『DBA 18.0 - Life after 18c』
[db tech showcase Tokyo 2018] #dbts2018 #B33 『DBA 18.0 - Life after 18c』[db tech showcase Tokyo 2018] #dbts2018 #B33 『DBA 18.0 - Life after 18c』
[db tech showcase Tokyo 2018] #dbts2018 #B33 『DBA 18.0 - Life after 18c』
 
The value of reactive
The value of reactiveThe value of reactive
The value of reactive
 
The Value of Reactive
The Value of ReactiveThe Value of Reactive
The Value of Reactive
 
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
 
Webinar Replay: How to Build a $10M SaaS Business Into a $6B Unicorn With MyS...
Webinar Replay: How to Build a $10M SaaS Business Into a $6B Unicorn With MyS...Webinar Replay: How to Build a $10M SaaS Business Into a $6B Unicorn With MyS...
Webinar Replay: How to Build a $10M SaaS Business Into a $6B Unicorn With MyS...
 
Webinar Slides: High Volume MySQL HA: SaaS Continuous Operations with Terabyt...
Webinar Slides: High Volume MySQL HA: SaaS Continuous Operations with Terabyt...Webinar Slides: High Volume MySQL HA: SaaS Continuous Operations with Terabyt...
Webinar Slides: High Volume MySQL HA: SaaS Continuous Operations with Terabyt...
 
How To Manage Sites At Scale With Acquia Cohesion and SiteFactory
How To Manage Sites At Scale With Acquia Cohesion and SiteFactoryHow To Manage Sites At Scale With Acquia Cohesion and SiteFactory
How To Manage Sites At Scale With Acquia Cohesion and SiteFactory
 
Evolve 2014 experience driven commerce
Evolve 2014 experience driven commerceEvolve 2014 experience driven commerce
Evolve 2014 experience driven commerce
 

Plus de Nurun

Objets et Corps Connectés de la Science-Fiction Dans Nos Réalités D’Affaires
Objets et Corps Connectés de la Science-Fiction Dans Nos Réalités D’AffairesObjets et Corps Connectés de la Science-Fiction Dans Nos Réalités D’Affaires
Objets et Corps Connectés de la Science-Fiction Dans Nos Réalités D’Affaires
Nurun
 
TV CONNECTÉE & SECOND ÉCRAN. LE DESIGN PARADOXAL
TV CONNECTÉE & SECOND ÉCRAN. LE DESIGN PARADOXALTV CONNECTÉE & SECOND ÉCRAN. LE DESIGN PARADOXAL
TV CONNECTÉE & SECOND ÉCRAN. LE DESIGN PARADOXAL
Nurun
 
Nurun lab sprint commuting
Nurun lab sprint   commutingNurun lab sprint   commuting
Nurun lab sprint commuting
Nurun
 
Nurun lab christmas sprint
Nurun lab   christmas sprintNurun lab   christmas sprint
Nurun lab christmas sprint
Nurun
 
L'avènement de nouveaux systèmes créatifs
L'avènement de nouveaux systèmes créatifsL'avènement de nouveaux systèmes créatifs
L'avènement de nouveaux systèmes créatifs
Nurun
 
Nurun Lab Insights - Television
Nurun Lab Insights - TelevisionNurun Lab Insights - Television
Nurun Lab Insights - Television
Nurun
 
Social Media Trends
Social Media TrendsSocial Media Trends
Social Media Trends
Nurun
 

Plus de Nurun (20)

E-TAIL QA: Approach to E-commerce testing in an Agile environment
E-TAIL QA: Approach to E-commerce testing in an Agile environmentE-TAIL QA: Approach to E-commerce testing in an Agile environment
E-TAIL QA: Approach to E-commerce testing in an Agile environment
 
The Future of Retail - Business Model Trend Report
The Future of Retail - Business Model Trend ReportThe Future of Retail - Business Model Trend Report
The Future of Retail - Business Model Trend Report
 
The Future of Retail - Marketing and Merchandising Trend Report
The Future of Retail - Marketing and Merchandising Trend ReportThe Future of Retail - Marketing and Merchandising Trend Report
The Future of Retail - Marketing and Merchandising Trend Report
 
Objets et Corps Connectés de la Science-Fiction Dans Nos Réalités D’Affaires
Objets et Corps Connectés de la Science-Fiction Dans Nos Réalités D’AffairesObjets et Corps Connectés de la Science-Fiction Dans Nos Réalités D’Affaires
Objets et Corps Connectés de la Science-Fiction Dans Nos Réalités D’Affaires
 
Creating Great Analog Souvenirs for a Digital Era
Creating Great Analog Souvenirs for a Digital EraCreating Great Analog Souvenirs for a Digital Era
Creating Great Analog Souvenirs for a Digital Era
 
TV CONNECTÉE & SECOND ÉCRAN. LE DESIGN PARADOXAL
TV CONNECTÉE & SECOND ÉCRAN. LE DESIGN PARADOXALTV CONNECTÉE & SECOND ÉCRAN. LE DESIGN PARADOXAL
TV CONNECTÉE & SECOND ÉCRAN. LE DESIGN PARADOXAL
 
RDV_Media 2012 - Context: A Personalization Engine
RDV_Media 2012 - Context: A Personalization EngineRDV_Media 2012 - Context: A Personalization Engine
RDV_Media 2012 - Context: A Personalization Engine
 
Rethinking online checkout
Rethinking online checkoutRethinking online checkout
Rethinking online checkout
 
Culture : sur place ou à emporter
Culture : sur place ou à emporterCulture : sur place ou à emporter
Culture : sur place ou à emporter
 
Nurun lab sprint commuting
Nurun lab sprint   commutingNurun lab sprint   commuting
Nurun lab sprint commuting
 
Nurun lab sprint commuting
Nurun lab sprint   commutingNurun lab sprint   commuting
Nurun lab sprint commuting
 
Nurun lab sprint commuting
Nurun lab sprint   commutingNurun lab sprint   commuting
Nurun lab sprint commuting
 
Nurun lab christmas sprint
Nurun lab   christmas sprintNurun lab   christmas sprint
Nurun lab christmas sprint
 
L'avènement de nouveaux systèmes créatifs
L'avènement de nouveaux systèmes créatifsL'avènement de nouveaux systèmes créatifs
L'avènement de nouveaux systèmes créatifs
 
Nurun Lab Insights - Television
Nurun Lab Insights - TelevisionNurun Lab Insights - Television
Nurun Lab Insights - Television
 
Nurun google+ overview
Nurun google+ overviewNurun google+ overview
Nurun google+ overview
 
Media in Canada
Media in CanadaMedia in Canada
Media in Canada
 
Avant de vous lancer dans la jungle électronique : évaluez la pertinence des ...
Avant de vous lancer dans la jungle électronique : évaluez la pertinence des ...Avant de vous lancer dans la jungle électronique : évaluez la pertinence des ...
Avant de vous lancer dans la jungle électronique : évaluez la pertinence des ...
 
Social Media Trends
Social Media TrendsSocial Media Trends
Social Media Trends
 
Brand Content Digital
Brand Content DigitalBrand Content Digital
Brand Content Digital
 

Dernier

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
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
vu2urc
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Dernier (20)

Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
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...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
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
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.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
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
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
 
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
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
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
 

Big Retail Goes Reactive at Walmart

  • 1. Reactive Retail Big Retail Goes Reactive at Walmart NOVEMBER 2014 REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 2. Agenda Introduction Walmart.ca re-architecture Move to Functional Programming Technical Tips & Features Experiences and Impressions Outlook Q&A REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 3. About Nurun AREAS OF EXPERTISE REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART 12 San Francisco Atlanta Nancy Shanghai Quebec Turin Montreal Paris Milan Toronto Chicoutimi Madrid 1,200+ Employees 14 Years In Business Retail Automotive Financial Services Media & Entertainment Fashion & Beauty Utilities Government Telecommunications Travel & Hospitality Health & Pharma 3 We are a global design & technology consultancy with 12 offices worldwide.
  • 4. Introduction REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 5. Introduction TYPICAL LARGE ECOMMERCE ENVIRONMENTS CDN JSPs E-Commerce Platform RDBMS Product content management REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 6. Introduction TYPICAL LARGE ECOMMERCE ENVIRONMENTS CDN JSPs E-Commerce Platform Search & REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART merchandizing RDBMS Product content management
  • 7. Introduction INCUMBENT PLATFORM • ATG, Oracle • Fairly monolithic • Rapidly evolving merchandising needs REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 8. Introduction INCUMBENT PLATFORM • ATG, Oracle • Fairly monolithic • Rapidly evolving merchandising needs REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 9. Introduction INCUMBENT PLATFORM • ATG, Oracle • Fairly monolithic • Rapidly evolving merchandising needs • Scalability issues REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 10. Retail priorities EFFICIENT & SCALABLE Need to handle large volumes RESILIENT Downtime is expensive FLEXIBLE & MAINTAINABLE Business requirements change REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 11. Need to go Reactive to be … RESPONSIVE Customer experience, brand promise RESILIENT Handle failure at multiple levels ELASTIC Handle traffic spikes (without breaking the bank) MESSAGE-DRIVEN Enable all of the above REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 12. Walmart.ca Re-architecture REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 13. Walmart.ca re-architecture JSPs ATG Oracle Product content management REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 14. Walmart.ca re-architecture REST API JSPs ATG Oracle REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART REST API Endeca search & merchandizing Product content management
  • 15. Walmart.ca re-architecture JSPs ATG Oracle REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART REST API Endeca search & merchandizing Akka, Redis Product content management
  • 16. Walmart.ca re-architecture JSPs ATG Oracle REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART JSON REST API Endeca search & merchandizing Play Akka, Redis Product content management
  • 17. Walmart.ca re-architecture JSON REST API ATG Oracle REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART JSON REST API Endeca search & merchandizing Play Akka, Redis Product content management
  • 18. Walmart.ca re-architecture REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART No. 1 +20% Canada’s first responsively designed e-commerce site for a big box retailer +98% Increase in conversion in the first 4 weeks after launch Increase in mobile orders -36% Decrease in average page load time Awarded BEST E-COMMERCE SITE in large retailers by Retail Council of Canada
  • 19. Walmart.ca re-architecture REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART No. 1 +20% Canada’s first responsively designed e-commerce site for a big box retailer +98% Increase in conversion in the first 4 weeks after launch Increase in mobile orders -36% Decrease in average page load time NO SYSTEM OUTAGES! Awarded BEST E-COMMERCE SITE in large retailers by Retail Council of Canada
  • 20. Move to Functional Programming REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 21. Move to Functional Programming ● Majority of the team are developers with a Java background ● Play provides an easy entry path to Scala / Reactive / Functional: § Based on familiar MVC patterns § Can start with Java style, mutation, blocking § Incrementally transition to Scala style, immutable, non-blocking REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 22. Move to Functional Programming 1. No nulls (use Option) 2. No vars, mutable state* 3. Use higher-order functions (map, flatMap, filter, for-yield, etc.) 4. Business logic should be side-effect free (testability!) 5. Create and use strong types REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART *unless well justified (e.g. much clearer), and as small a scope as possible
  • 23. Move to Functional Programming ● Code should be a clear and concise as possible ● Types should be express intent and fit tightly REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 24. Move to Functional Programming: Strong Types sealed trait Language case object English extends Language case object French extends Language def formatPrice(price: Price, lang: Language) = lang match { case English => … case French => … REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART } implicit val binder = new PathBindable[Language] { … }
  • 25. Technical Tips & Features REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 26. Tips & Features: Caching Futures (on-heap) ● Several concurrent requests for same data ● Whoever requests first initiates the Future (Promise) ● No locking required (narrow window between first request and when Future is cached) REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 27. Tips & Features: Handling JSON P lay Application Makes Heavy Use of JSON • Consumes JSON view advice from Endeca • Proxy & augment JSON data for web service calls REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 28. Tips & Features: Play JSON macro Consuming JSON (e.g. Endeca cartridges) case class Product(id: Long, name: String, …) object Product { implicit val formats = Json.format[Product] REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART } Json.toJson(product) productJson.asOpt[Product]
  • 29. Tips & Features: ‘Almost Default’ Reads/Writes OPEN CHALLENGE Sometime we want an ‘almost default’ Reads/Writes • e.g. use a default • Read/write a few fields in a particular way • e.g. format two dates in different ways • (Could Shapeless case class generics macro help?) REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 30. Tips & Features: Proxying and Augmenting JSON Proxying JSON (e.g. most web services) • Might want to augment a JSON response • Don’t need to care about knowing the entire structure • Play JSON transformers • play-json-zipper can be helpful (github: mandubian) REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 31. Tips & Features: Dependency Injection CONTROLLER DEPENDENCIES (SERVICES) • Use structural types for DI at the controller level • Create a services module for each request • Want access to request header (logging) REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 32. Tips & Features: Dependency Injection THREADLOCAL • Inject dependencies in Global.getControllerInstance • Initialize services module in Global.onRouteRequest, add to ThreadLocal • Pick up this value in the getControllerInstance and provide it to our controller REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 33. Tips & Features: Monadic Rendering Page Model • Template • Zones • Cartridges REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 34. Rendering View Advice: Templates & Zones The business user selects a template: • Determines the page layout • Each template has ~12 zones REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 35. Rendering View Advice: Cartridges … adds cartridges to the zones: • ~100 cartridges REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART ProductImage ProductDescription ProductPurchase
  • 36. Rendering View Advice: Whole Page • Endeca fills in data (product info) • Play renders the cartridge as HTML REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 37. Rendering View Advice: JSON to Visual Page • Tmpl1 • Header • Car1 • Car2 • LeftNav • Car3 • MainContent • Car4 • Car5 • Car6 REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 38. Rendering View Advice: JSON to HTML • Tmpl1 • Header • Car1 • Car2 • LeftNav • Car3 • MainContent • Car4 • Car5 • Car6 REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART <body>! <div class=“header”>! ! !…! </div>! <div class=“leftNav”>! ! !…! </div>! !<div class=“main”>! ! !…! </div>! </body>!
  • 39. Rendering View Advice: Auxiliary Information • Tmpl1 • Header • Car1 • Car2 • LeftNav • Car3 • MainContent • Car4 • Car5 • Car6 REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART <head>! ! </head>! <body>! <div class=“header”>! ! !…! </div>! <div class=“leftNav”>! ! !…! </div>! !<div class=“main”>! ! !…! </div>! ! ! </body>!
  • 40. Rendering View Advice: Auxiliary Information • Tmpl1 • Header • Car1 • Car2 • LeftNav • Car3 • MainContent • Car4 • Car5 • Car6 REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART <head>! ! </head>! <body>! <div class=“header”>! ! !…! </div>! <div class=“leftNav”>! ! !…! </div>! !<div class=“main”>! ! !…! </div>! ! ! </body>! CSS / JavaScript / RJS modules
  • 41. Rendering View Advice: Auxiliary Information • Tmpl1 • Header • Car1 • Car2 • LeftNav • Car3 • MainContent • Car4 • Car5 • Car6 REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART <head>! ! </head>! <body>! <div class=“header”>! ! !…! </div>! <div class=“leftNav”>! ! !…! </div>! !<div class=“main”>! ! !…! </div>! ! ! </body>! CSS / JavaScript / RJS modules JavaScript / RJS modules
  • 42. Rendering View Advice: Auxiliary Information • Tmpl1 • Header • Car1 • Car2 • LeftNav • Car3 • MainContent • Car4 • Car5 • Car6 REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART <head>! ! </head>! <body>! <div class=“header”>! ! !…! </div>! <div class=“leftNav”>! ! !…! </div>! !<div class=“main”>! ! !…! </div>! ! ! </body>! CSS / JavaScript / RJS modules JavaScript / RJS modules Cache control
  • 43. Monadic Rendering: ValidatedBuilder Monad ValidatedBuilder[X] • “Parse/process” X • ≅ Future[(X, Boolean, Resources)] • Error flag: • Determine if page should be cached • Front-end resources • CSS • RequireJS modules • JavaScript snippets (+ page location requirements) REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 44. Monadic Rendering: ValidatedBuilder Monad ValidatedBuilder[X] • map and flatMap handle combining and propagating validity and front-end resources • Code focuses on the essential task (JSON -> HTML) without clutter • Error prone ‘plumbing’ is handled by the monad abstraction REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 45. Monadic Rendering: ValidatedBuilder Zone v al headerContent: VB[Seq[Cartridge]] = (viewAdvice “header”) .as[Seq[JsValue]] // Seq[JsValue] .map(Cartridge.parse) // Seq[VB[Cartridge]] .vbSeq // VB[Seq[Cartridge]] REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 46. Monadic Rendering: ValidatedBuilder Template val template: VB[Template] = for { header <- headerContent : VB[Seq[Cartridge]] leftNav <- leftNavContent … templateResult <- CayenneTemplate(header, leftNav, …) } yield templateResult REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 47. Monadic Rendering: ValidatedBuilder Page for { content <- template.contents : Future[Template] resources <- template.resources : Future[Resources] isCacheable <- template.isValid : Future[Boolean] yield { val result = template.render(resources) if (isCacheable) result else result.withHeaders(noCache: _*) REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART }
  • 48. Tips & Features: Dynamic Configuration • Ops can make on the fly configuration changes • Enable/disable services and site features • Change endpoints REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 49. Tips & Features: Dynamic Configuration • Sends configuration delta to Play (JSON object) • Play verifies the change (initialize services module) • Each request sees a snapshot of the configuration • Uses standard Play HOCON API REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 50. Experience and Impressions REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 51. Experience and Impressions ● Never need to say “no” to a client due to technical limitations, ● Heavily concurrency / parallelism, with very little headaches, ● Aggressive refactorings are surprisingly easy (thank you strong types). REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 52. Outlook REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 53. Outlook NEW BREED OF PRODUCTS Reactive core REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 54. Outlook NEW BREED OF PRODUCTS Reactive core Middleware REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 55. Outlook NEW BREED OF PRODUCTS Reactive core Middleware Omnichannel CE REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 56. Outlook NEW BREED OF PRODUCTS Reactive core Middleware Omnichannel CE Streaming big data Machine intelligence REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 57. Outlook NEW BREED OF PRODUCTS Reactive core Middleware Omnichannel CE Streaming big data Machine intelligence CMS REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 58. Outlook NEW BREED OF PRODUCTS Reactive core Middleware Omnichannel CE Streaming big data Machine intelligence CMS BAAS REsponsiveSS REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 59. Outlook NEW BREED OF PRODUCTS Reactive core Middleware Omnichannel CE Streaming big data Machine intelligence CMS BAAS REsponsiveSS In store tech, IoT… REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART
  • 60. Q & A Ankur Mathur @anchormath Dana Harrington @danagharrington https://github.com/dana-harrington REACTIVE RETAIL BIG RETAIL GOES REACTIVE AT WALMART