"Fast but not Loose" -- Typesafe client/server architecture at Gilt Groupe

Post on 15-Jan-2015

1.084 views 0 download

Tags:

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 of "Fast but not Loose" -- Typesafe client/server architecture at Gilt Groupe

Fast but Not Loose:Typesafe Clients in a

Distributed Service Architecture, a retrospective

Eric BowmanVP Architecture @ Gilt Groupe

@ebowmanebowman@gilt.com

#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/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