"fast but not loose" -- typesafe client/server architecture at gilt groupe
DESCRIPTION
This is a talk about the evolution of Gilt's SOA stack, from Ruby to type-unsafe Java with hashmaps, to a full-blown typesafe, futures-based Scala API.TRANSCRIPT
Fast but Not Loose:Typesafe Clients in a
Distributed Service Architecture, a retrospective
Eric BowmanVP Architecture @ Gilt Groupe
#gotoaar #gilttech#gotocon
Monday, September 30, 13
Monday, September 30, 13
Monday, September 30, 13
•Scala
•Play
•PostgreSQL
•MongoDB
•Voldemort
•Kafka
•Aster Data
•Mahout
•Jersey
•SBT
•Docker
•Continuous Delivery
Microservices
Monday, September 30, 13
http://upload.wikimedia.org/wikipedia/commons/1/16/Ruby_on_Rails-logo.pnghttp://wiki.postgresql.org/wiki/File:PostgreSQL_logo.3colors.svgMonday, September 30, 13
http://logonoid.com/images/thumbs/christian-louboutin-logo.jpgMonday, September 30, 13
http://data.iluxdb.com/data/christian-louboutin-daffodile-160mm-python-masai-1130127cm09_001.jpg?dd80c0Monday, September 30, 13
http://upload.wikimedia.org/wikipedia/commons/7/79/Operation_Upshot-Knothole_-_Badger_001.jpg
Monday, September 30, 13
Monday, September 30, 13
Monday, September 30, 13
Monday, September 30, 13
Monday, September 30, 13
Monday, September 30, 13
Monday, September 30, 13
Monday, September 30, 13
http://blog.verwilst.be/wp-content/uploads/2008/12/java.gif
Monday, September 30, 13
user_service order_service payment_service product_service cart_service
swift
pagegen
Monday, September 30, 13
http://megmurph.com/wp-content/uploads/2013/03/success-1.jpg
Monday, September 30, 13
Front End
Service X
Service Y
Service Z
Monday, September 30, 13
Front End
Service X
Service Y
Service Z
Monday, September 30, 13
Front End
Service X
Service Y
Service Z
Content from Service X
Content from Service Y
Content from Z
Monday, September 30, 13
Front-End Tier
Service Tier
Data Tier
Monday, September 30, 13
Front-End Tier
Service Tier
Data Tier
CachingLight Computation
Orchestration
Monday, September 30, 13
Front-End Tier
Service Tier
Data Tier
CachingLight Computation
Orchestration
CachingHeavier Computation
Separation of Concerns
Monday, September 30, 13
Front-End Tier
Service Tier
Data Tier
CachingLight Computation
Orchestration
CachingHeavier Computation
Separation of Concerns
Data Access(Disk/SSD/RAM)
Monday, September 30, 13
•Runtime Temperature•Development Temperature
Front-End Tier
Service Tier
Data Tier
CachingLight Computation
Orchestration
CachingHeavier Computation
Separation of Concerns
Data Access(Disk/SSD/RAM)
Monday, September 30, 13
Data Source
Service
JDBC ➾ HashMap ➾ JSON
http://gilt.com
Javascript Application
Front End
JSON ➾ HashMap ➾ JSON
Monday, September 30, 13
Chaos Grows Quickly
Data Source
Service
JDBC ➾ HashMap ➾ JSON
http://gilt.com
Javascript Application
Front End
JSON ➾ HashMap ➾ JSON
Monday, September 30, 13
http://gilt.com
Javascript Application
Front End
JSON ➾ HashMap ➾ JSON
JSON ➾ HashMap ➾ JSON
JSON ➾ HashMap ➾ JSON
Service
JDBC ➾ HashMap ➾ JSONData Source
Service
JDBC ➾ HashMap ➾ JSONData Source
Service
JDBC ➾ HashMap ➾ JSONData Source
Monday, September 30, 13
http://gilt.com
Javascript Application
Front End
JSON ➾ HashMap ➾ JSON
JSON ➾ HashMap ➾ JSON
JSON ➾ HashMap ➾ JSON
Service
JDBC ➾ HashMap ➾ JSONData Source
Service
JDBC ➾ HashMap ➾ JSONData Source
Service
JDBC ➾ HashMap ➾ JSONData Source
Service
JSON ➾ HashMap ➾ JSON
JSON ➾ HashMap ➾ JSON
Monday, September 30, 13
http://www.recruitmenttakeout.com/wp-content/uploads/2013/04/brian.png
Monday, September 30, 13
•Fast
•Service Decomposition
•Implicit core model was good
Monday, September 30, 13
•Org Scaling
•APIs
•Implicit core model was ... implicit
Monday, September 30, 13
A data model and APIs for services
Monday, September 30, 13
A data model and APIs for services
(aka, RPC)
Monday, September 30, 13
http://git-scm.com/images/logos/downloads/Git-Logo-2Color.png
core service
core service
core service
core service
Legacy
Monday, September 30, 13
http://git-scm.com/images/logos/downloads/Git-Logo-2Color.png
core service
core service
core service
core service
Legacy
commons.jar
core clients
core data model
async client framework
Greenfield
Monday, September 30, 13
http://git-scm.com/images/logos/downloads/Git-Logo-2Color.png
core service
core service
core service
core service
Legacy
commons.jar
core clients
core data model
async client framework
Greenfield
•Users•Sales•Products•Skus•Assets•Targeting•Auth
Monday, September 30, 13
service
client
core
Monday, September 30, 13
service
client
core
•RESTful•Scala clients•All APIs futures-based•Case class schema
Monday, September 30, 13
service
client
core
client
core
service
Compile/RuntimeDependency
Monday, September 30, 13
ConsumerServiceClient
Core Core
“Embassy Soil”
Monday, September 30, 13
ConsumerServiceClient
Core Core
•Easy functional testing•Service response capture•Test linking•Upgradable•Emergent Regression•Automated upgrades•Compile farmers
Monday, September 30, 13
ConsumerServiceClient
Core Core
Monday, September 30, 13
•Environment ⊕ Config•Live updates•Indirection•Circuit Breaker
ConsumerServiceClient
Core Core
Monday, September 30, 13
Monday, September 30, 13
“All of this is completely wrong.”*
*Not an actual quoteMonday, September 30, 13
1.The network is reliable2.Latency is zero3.Bandwidth is infinite4.The network is secure5.Topology doesn't change6.There is one administrator7.Transport cost is zero8.The network is homogeneous
https://blogs.oracle.com/jag/resource/Fallacies.html
Monday, September 30, 13
1.The network is reliable
https://blogs.oracle.com/jag/resource/Fallacies.html
Monday, September 30, 13
1.The network is reliable
https://blogs.oracle.com/jag/resource/Fallacies.html
Resolved
Monday, September 30, 13
2.Latency is zero
https://blogs.oracle.com/jag/resource/Fallacies.html
Monday, September 30, 13
2.Latency is zero
https://blogs.oracle.com/jag/resource/Fallacies.html
Resolved
Monday, September 30, 13
3.Bandwidth is infinite
https://blogs.oracle.com/jag/resource/Fallacies.html
Monday, September 30, 13
3.Bandwidth is infinite
https://blogs.oracle.com/jag/resource/Fallacies.html
Resolved
Monday, September 30, 13
4.The network is secure
https://blogs.oracle.com/jag/resource/Fallacies.html
Monday, September 30, 13
4.The network is secure
https://blogs.oracle.com/jag/resource/Fallacies.html
Resolved
Monday, September 30, 13
5.Topology doesn't change
https://blogs.oracle.com/jag/resource/Fallacies.html
Monday, September 30, 13
5.Topology doesn't change
https://blogs.oracle.com/jag/resource/Fallacies.html
Resolved
Monday, September 30, 13
6.There is one administrator
https://blogs.oracle.com/jag/resource/Fallacies.html
Monday, September 30, 13
6.There is one administrator
https://blogs.oracle.com/jag/resource/Fallacies.html
Resolved
Monday, September 30, 13
7.Transport cost is zero
https://blogs.oracle.com/jag/resource/Fallacies.html
Monday, September 30, 13
7.Transport cost is zero
https://blogs.oracle.com/jag/resource/Fallacies.html
Resolved
Monday, September 30, 13
8.The network is homogeneous
https://blogs.oracle.com/jag/resource/Fallacies.html
Monday, September 30, 13
8.The network is homogeneous
https://blogs.oracle.com/jag/resource/Fallacies.html
Resolved
Monday, September 30, 13
“Still Wrong.”*
*Possibly an actual quoteMonday, September 30, 13
Convenience Over Correctness
http://steve.vinoski.net/blog/2008/07/01/convenience-over-correctness/Monday, September 30, 13
Database
Database Model
Service Backend
Service Model
Service Frontend
Client/Server Serialization Model
Client Backend
Client Data Model
Client Layer
Public Data Model
Monday, September 30, 13
Database
Database Model
Service Backend
Service Model
Service Frontend
Client/Server Serialization Model
Client Backend
Client Data Model
Client Layer
Public Data Model
•So many models•Corners are cut•Typesafe helps•Conflation?•Just the data
Monday, September 30, 13
“Works in Practice for some use cases”
Database
Database Model
Service Backend
Service Model
Service Frontend
Client/Server Serialization Model
Client Backend
Client Data Model
Client Layer
Public Data Model
•So many models•Corners are cut•Typesafe helps•Conflation?•Just the data
Monday, September 30, 13
“Works in Practice for some use cases”“No free silver bullet lunches.”
Database
Database Model
Service Backend
Service Model
Service Frontend
Client/Server Serialization Model
Client Backend
Client Data Model
Client Layer
Public Data Model
•So many models•Corners are cut•Typesafe helps•Conflation?•Just the data
Monday, September 30, 13
However...
Monday, September 30, 13
•No machine generated stubs•Embassy-Oriented Programming•Lots of indirection•Type-system support for failures
However...
Monday, September 30, 13
What Actually Sucks about RPC:
Monday, September 30, 13
What Actually Sucks about RPC:•Remote objects •Failures•Idempotency
Monday, September 30, 13
Ignoring all that was Too Easy.
Monday, September 30, 13
Monday, September 30, 13
Batch Jobs
Monday, September 30, 13
1.The network is reliable2.Latency is zero3.Bandwidth is infinite4.The network is secure5.Topology doesn't change6.There is one administrator7.Transport cost is zero8.The network is homogeneous
Monday, September 30, 13
Law of Instrument
Monday, September 30, 13
Pulling data.
Monday, September 30, 13
Pushing code.
Monday, September 30, 13
SOA, Reloaded
Monday, September 30, 13
SOA, Reloaded•CRUD•Event Streams•Batch Processing•Lambda Architecture•CQRS
Monday, September 30, 13
Client
Service
DB
Monday, September 30, 13
Client
Fast Storage
Service
Kafka
Data Warehouse
Batch Jobs
DB
CEP
Clickstream data
Monday, September 30, 13
http://tech.gilt.com
join us.new york & dublin
Monday, September 30, 13