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

86
Fast but Not Loose: Typesafe Clients in a Distributed Service Architecture, a retrospective Eric Bowman VP Architecture @ Gilt Groupe @ebowman [email protected] #gotoaar #gilttech #gotocon Monday, September 30, 13

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

Page 1: "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

@[email protected]

#gotoaar #gilttech#gotocon

Monday, September 30, 13

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

Monday, September 30, 13

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

Monday, September 30, 13

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

•Scala

•Play

•PostgreSQL

•MongoDB

•Voldemort

•Kafka

•Aster Data

•Mahout

•Jersey

•SBT

•Docker

•Continuous Delivery

Microservices

Monday, September 30, 13

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

http://upload.wikimedia.org/wikipedia/commons/7/79/Operation_Upshot-Knothole_-_Badger_001.jpg

Monday, September 30, 13

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

Monday, September 30, 13

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

Monday, September 30, 13

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

Monday, September 30, 13

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

Monday, September 30, 13

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

Monday, September 30, 13

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

Monday, September 30, 13

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

Monday, September 30, 13

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

http://blog.verwilst.be/wp-content/uploads/2008/12/java.gif

Monday, September 30, 13

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

user_service order_service payment_service product_service cart_service

swift

pagegen

Monday, September 30, 13

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

http://megmurph.com/wp-content/uploads/2013/03/success-1.jpg

Monday, September 30, 13

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

Front End

Service X

Service Y

Service Z

Monday, September 30, 13

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

Front End

Service X

Service Y

Service Z

Monday, September 30, 13

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

Front End

Service X

Service Y

Service Z

Content from Service X

Content from Service Y

Content from Z

Monday, September 30, 13

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

Front-End Tier

Service Tier

Data Tier

Monday, September 30, 13

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

Front-End Tier

Service Tier

Data Tier

CachingLight Computation

Orchestration

Monday, September 30, 13

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

Front-End Tier

Service Tier

Data Tier

CachingLight Computation

Orchestration

CachingHeavier Computation

Separation of Concerns

Monday, September 30, 13

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

Front-End Tier

Service Tier

Data Tier

CachingLight Computation

Orchestration

CachingHeavier Computation

Separation of Concerns

Data Access(Disk/SSD/RAM)

Monday, September 30, 13

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

•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

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

Data Source

Service

JDBC ➾ HashMap ➾ JSON

http://gilt.com

Javascript Application

Front End

JSON ➾ HashMap ➾ JSON

Monday, September 30, 13

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

Chaos Grows Quickly

Data Source

Service

JDBC ➾ HashMap ➾ JSON

http://gilt.com

Javascript Application

Front End

JSON ➾ HashMap ➾ JSON

Monday, September 30, 13

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

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

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

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

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

http://www.recruitmenttakeout.com/wp-content/uploads/2013/04/brian.png

Monday, September 30, 13

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

•Fast

•Service Decomposition

•Implicit core model was good

Monday, September 30, 13

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

•Org Scaling

•APIs

•Implicit core model was ... implicit

Monday, September 30, 13

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

A data model and APIs for services

Monday, September 30, 13

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

A data model and APIs for services

(aka, RPC)

Monday, September 30, 13

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

http://git-scm.com/images/logos/downloads/Git-Logo-2Color.png

core service

core service

core service

core service

Legacy

Monday, September 30, 13

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

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

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

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

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

service

client

core

Monday, September 30, 13

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

service

client

core

•RESTful•Scala clients•All APIs futures-based•Case class schema

Monday, September 30, 13

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

service

client

core

client

core

service

Compile/RuntimeDependency

Monday, September 30, 13

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

ConsumerServiceClient

Core Core

“Embassy Soil”

Monday, September 30, 13

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

ConsumerServiceClient

Core Core

•Easy functional testing•Service response capture•Test linking•Upgradable•Emergent Regression•Automated upgrades•Compile farmers

Monday, September 30, 13

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

ConsumerServiceClient

Core Core

Monday, September 30, 13

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

•Environment ⊕ Config•Live updates•Indirection•Circuit Breaker

ConsumerServiceClient

Core Core

Monday, September 30, 13

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

Monday, September 30, 13

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

“All of this is completely wrong.”*

*Not an actual quoteMonday, September 30, 13

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

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

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

1.The network is reliable

https://blogs.oracle.com/jag/resource/Fallacies.html

Monday, September 30, 13

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

1.The network is reliable

https://blogs.oracle.com/jag/resource/Fallacies.html

Resolved

Monday, September 30, 13

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

2.Latency is zero

https://blogs.oracle.com/jag/resource/Fallacies.html

Monday, September 30, 13

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

2.Latency is zero

https://blogs.oracle.com/jag/resource/Fallacies.html

Resolved

Monday, September 30, 13

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

3.Bandwidth is infinite

https://blogs.oracle.com/jag/resource/Fallacies.html

Monday, September 30, 13

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

3.Bandwidth is infinite

https://blogs.oracle.com/jag/resource/Fallacies.html

Resolved

Monday, September 30, 13

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

4.The network is secure

https://blogs.oracle.com/jag/resource/Fallacies.html

Monday, September 30, 13

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

4.The network is secure

https://blogs.oracle.com/jag/resource/Fallacies.html

Resolved

Monday, September 30, 13

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

5.Topology doesn't change

https://blogs.oracle.com/jag/resource/Fallacies.html

Monday, September 30, 13

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

5.Topology doesn't change

https://blogs.oracle.com/jag/resource/Fallacies.html

Resolved

Monday, September 30, 13

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

6.There is one administrator

https://blogs.oracle.com/jag/resource/Fallacies.html

Monday, September 30, 13

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

6.There is one administrator

https://blogs.oracle.com/jag/resource/Fallacies.html

Resolved

Monday, September 30, 13

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

7.Transport cost is zero

https://blogs.oracle.com/jag/resource/Fallacies.html

Monday, September 30, 13

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

7.Transport cost is zero

https://blogs.oracle.com/jag/resource/Fallacies.html

Resolved

Monday, September 30, 13

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

8.The network is homogeneous

https://blogs.oracle.com/jag/resource/Fallacies.html

Monday, September 30, 13

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

8.The network is homogeneous

https://blogs.oracle.com/jag/resource/Fallacies.html

Resolved

Monday, September 30, 13

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

“Still Wrong.”*

*Possibly an actual quoteMonday, September 30, 13

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

Convenience Over Correctness

http://steve.vinoski.net/blog/2008/07/01/convenience-over-correctness/Monday, September 30, 13

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

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

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

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

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

“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

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

“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

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

However...

Monday, September 30, 13

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

•No machine generated stubs•Embassy-Oriented Programming•Lots of indirection•Type-system support for failures

However...

Monday, September 30, 13

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

What Actually Sucks about RPC:

Monday, September 30, 13

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

What Actually Sucks about RPC:•Remote objects •Failures•Idempotency

Monday, September 30, 13

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

Ignoring all that was Too Easy.

Monday, September 30, 13

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

Monday, September 30, 13

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

Batch Jobs

Monday, September 30, 13

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

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

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

Law of Instrument

Monday, September 30, 13

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

Pulling data.

Monday, September 30, 13

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

Pushing code.

Monday, September 30, 13

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

SOA, Reloaded

Monday, September 30, 13

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

SOA, Reloaded•CRUD•Event Streams•Batch Processing•Lambda Architecture•CQRS

Monday, September 30, 13

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

Client

Service

DB

Monday, September 30, 13

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

Client

Fast Storage

Service

Kafka

Data Warehouse

Batch Jobs

DB

CEP

Clickstream data

Monday, September 30, 13

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

http://tech.gilt.com

join us.new york & dublin

Monday, September 30, 13