SCALING GILT
From Monolith Ruby App
to
Distributed Scala Micro-Services
#NYCTECHTALKS
Yoni (Jonathan) Goldberg

Lead Engineer - GILT
Podium => http://bit.ly/podiumapp
ABOUT ME
- Leading the Popeye Team
- Sale Personalization, Loyalty, SEO
Post-purchase, Login/Registration flows
- MIT CS BS/Meng | Google | IBM | IDF
- Brooklyn | Coffee | Arduino | Running | Kite Surfing |
Online Collaboration | Poker

Excited to be part of the NYC Tech community
THE LESSONS AND CHALLENGES THAT
WE HAD/HAVE WITH
MICRO-SERVICE ARCHITECTURE
Gilt from monolith ruby app to microservice scala service architecture
WHAT IS GILT?
Flash Sales Business
Founded in 2007
Top 50 Internet-Retailer
~150 Engineers
Gilt from monolith ruby app to microservice scala service architecture
ANOTHER WAY TO LOOK AT GILT
Three day traffic pattern
THE CLASSIC
STARTUP STORY
THE EARLY DAYS
2007 - Ruby on Rails the hottest new thing
The goal was to get to market fast
Gilt from monolith ruby app to microservice scala service architecture
WE WERE ABLE TO HANDLE OUR
TRAFFIC PRETTY WELL
UNTIL LOUBOUTIN CAME TO GILT
TECHNOLOGY PAIN POINTS - 2009
Spike required to launch 1,000s of ruby processes
Postgres was overloaded
Routing traffic between ruby processes sucked
|Note to self| - hide from the ruby fan boys
DEV PAIN POINTS
1000 Models/Controllers, 200K LOC, 100s of jobs
Lots of contributors + no ownership
Difficult deployments with long integration cycles
Hard to identify root causes
WE NEEDED TO SOLVE
THE PROBLEM FAST
THREE THINGS HAPPENED
Started the transition to the JVM
M(a/i)cro-Service Era Started
Dedicated data stores
WHY JVM?
Widely adopted
Stable
Better support for concurrency
Better GC vs MRI
FIRST 10 SERVICES
Gilt from monolith ruby app to microservice scala service architecture
We solved 90% of our arch scaling problem
But not the Dev points
PAIN POINTS
Spike required to launch 1,000s of ruby processes
Postgres was overloaded
Routing traffic between ruby processes sucked
New services became semi-monolithic
1000 Models/Controllers, 200K LOC, 100s of jobs
Lots of contributors + no ownership
Difficult deployments with long integration cycles
WHY WE DOUBLED DOWN ON
MICRO-SERVICES
Empower teams and ownership
Smaller scope
Simpler and Easier deployments and rollbacks
MICRO SERVICE ARCHITECTURE
STARTED TO GET TRACTION
AS OF LAST WEEK WE HAVE MORE
THAN
450 SERVICES
APP BOOTSTRAP

rk bosrpamnwb
ae otta:di-e
#Bosrpaamnwbsrie
otta
di-e evc
rk bosrpbblndc
ae otta:ayo-os
#Bosrpabblndc srie
otta
ayo-os evc
rk bosrpcin-evrcr #Bosrpacin-evrcr sr
ae otta:letsre-oe
otta
letsre-oe ev
rk bosrpjre-aa
ae otta:esyjv
#Bosrpajre-aasrie
otta
esyjv evc
rk bosrpjre-cl
ae otta:esysaa
#Bosrpajre-cl srie
otta
esysaa evc
rk bosrppa
ae otta:ly
#Bosrpapa srie
otta
ly evc
rk bosrppa-ibid
ae otta:lyu-ul
#Bosrpapa-ibidsrie
otta
lyu-ul evc
rk bosrpstlbay
ae otta:b-irr
#Bosrpastlbaysrie
otta
b-irr evc
rk bosrpshm
ae otta:cea
#Bosrpashm srie
otta
cea evc
WE BEGAN THE TRANSITION TO SCALA
AND PLAY
LOSA - Lots Of Small Apps
Same motivation and benefits of Micro-Service
Architecture
Gilt from monolith ruby app to microservice scala service architecture
NEW CHALLENGES
Dev/Integration Environments
Who owns this service!?
Monitoring
Deployments and Testing (Functional/Integration)
ON DEV/INTEGRATION ENVIRONMENTS
The hardware is not strong enough
No one wants to compile 20 services
EACH TEAM HAS A STAGING ENV
SRIEPRS[
EVC_OT=
40,#itn-evc
01 lsigsrie
83,#v-srst
25 scue-e
92,#v-refl
40 scfe-al
79,#v-oat
85 scLyly
85,#e-oat
15 wblyly
91,#e ivnoysau
40 wb netr tts
79,#di-oat
88 amnlyly
79,#oiiain
89 ntfcto
70,#og
12 rue
93,#v-opnn
50 sccmoet
60,#v-atitsbi
82 scwils-umt
46,#v-cinsl
06 scato-ae
..
..
PR_OWR_RSSRIEPRSmp{|ot
OTFRADAG=EVC_OT.a
pr|
[-' "{ot:oahs:{ot"
'L, #pr}lclot#pr}]
}

ee([wsh- - - -} PR_OWR_RS G_OT.l
xc*%{s a C N n, OTFRADAG, WHS]f
STAGING DIFFICULTIES:
Hard to keep all the services up to date
Maxed our staging env capacities
Requires to have internet connection for some of the
services (e.g LOSA-apps)
The Future
DOCKER

An extension to Linux Containers (LXC)
Decentralization
Simple Configurations
Much lighter than a VM
Immutable
Supports services and platforms
ON OWNERSHIP
"code stays much longer than people" - SB
CODE OWNERSHIP
CURRENT APPROACH
Code Review!Code Review!Code Review!
Team owns services, not individual developers
Ownership transfer
Gilt from monolith ruby app to microservice scala service architecture
Gilt from monolith ruby app to microservice scala service architecture
DATA OWNERSHIP
WE TRANSITIONED TO MICRO-DBS
Third of the services have their own
MongoDB
Postgres
Voldemort
MANAGE MICRO-RELATIONAL DBS
SCHEMA EVOLUTION MANAGER
https://github.com/gilt/schema-evolution-manager
PRINCIPLES OF
SCHEMA EVOLUTION MANAGER
Can manage the schema evolutions in a Git repo
Schema changes are deployed as tar flies
No rollbacks
Schema changes are required to be incremental
eh "raetberlae (ditgr">nwsl
co cet al eess i nee)
e.q
smad.nwsl#rae agtcmi
e-d /e.q Cetd
i omt
smds #gnrtstetregshm-o-ann...a.
e-it
eeae h a . ceaincno002tr
#Spadutro yu sre
c n na n or evr
c shm-o-ann002
d ceaincno-..
smapyhs -lclot-nm incno -ue incn
e-pl ot -oahs -ae o-ann -sr o-an
ON MONITORING
Gilt from monolith ruby app to microservice scala service architecture
THE TOOLS WE USE

graphite / openTSDB
Gilt from monolith ruby app to microservice scala service architecture
Gilt from monolith ruby app to microservice scala service architecture
Gilt from monolith ruby app to microservice scala service architecture
Gilt from monolith ruby app to microservice scala service architecture
Gilt from monolith ruby app to microservice scala service architecture
ON DEPLOYMENTS
AND TESTING
(FUNCTIONAL/INTEGRATION)
"Testing is HARD" - the dev that sits on your left
THE CHALLENGES THAT WE FACED:
Hard to execute functional tests between services
Frustrating to deploy semi-manually (Capistrano)
Scary to deploy other teams services
SBT
Motivation: Scala adaption
Complex Scala syntax
Cool features: ~test, shell, console
Hard to debug
GILT-SBT-BUILD
Simple config for all the services
Pulls many plugins:
[nexus, testing, RPMs, run scripts, Monitoring,
SemVer, ...]
Custom commands (e.g 'sbt release')
ojc BidetnsCinSreCrPoetwt Dpnece {
bet ul xed letevroerjc ih eednis
vlnm ='v-aeatvto'
a ae
scsl-ciain
vlcrDp =..
a oees
..
vlsreDp =..
a evres
.
vlcinDp =..
a letes
.
oerd vlinannrc =InannFsTak
vrie a ocnoTak
oCno.atrc
}
ION-CANNON + SBT
Run functional/Selenium tests on dedicated Env
Supports Canary releases
Easy rollbacks
Integrated health checks
Gilt from monolith ruby app to microservice scala service architecture
MAIN TAKEAWAYS
Simplicity - Do you really need it?
We feel that it was the right choice for us
MicroServices promise works for most cases
As of 2014 - You will need to invest in Tools!
PODIUM TIME
We are hiring...
Keep in touch:
jgoldberg@gilt.com
www.yonigoldberg.com

More Related Content

PDF
Microservices Practitioner Summit Jan '15 - Scaling Uber from 1 to 100s of Se...
PDF
Quarterly Technology Briefing, Manchester, UK September 2013
PPTX
Final_Presentation
PDF
Grails Monolith to Microservice to FaaS
PDF
Taming the Monolith - Microservices Meetup Hamburg
PPTX
An introduction to Microservices
PDF
Breaking the monolith at jobandtalent - AWS Summit Barcelona 2015
PDF
Microservice Architecture
Microservices Practitioner Summit Jan '15 - Scaling Uber from 1 to 100s of Se...
Quarterly Technology Briefing, Manchester, UK September 2013
Final_Presentation
Grails Monolith to Microservice to FaaS
Taming the Monolith - Microservices Meetup Hamburg
An introduction to Microservices
Breaking the monolith at jobandtalent - AWS Summit Barcelona 2015
Microservice Architecture

Viewers also liked (7)

PDF
Monolith to Microservices - O’Reilly Oscon
PDF
Evolving toward Microservices - O’Reilly SACON Keynote
PPTX
Software Architectures, Week 3 - Microservice-based Architectures
PPTX
From the Monolith to Microservices - CraftConf 2015
PPTX
Pragmatic Microservices
PDF
Cloud Native Java Microservices
PDF
software architecture
Monolith to Microservices - O’Reilly Oscon
Evolving toward Microservices - O’Reilly SACON Keynote
Software Architectures, Week 3 - Microservice-based Architectures
From the Monolith to Microservices - CraftConf 2015
Pragmatic Microservices
Cloud Native Java Microservices
software architecture
Ad

Similar to Gilt from monolith ruby app to microservice scala service architecture (20)

PDF
Scaling Gilt: from Monolithic Ruby Application to Distributed Scala Micro-Ser...
PDF
Building a Modern Microservices Architecture at Gilt: The Essentials
PDF
Red Hat Agile integration workshop - Atlanta
PDF
Agile integration workshop Atlanta
PDF
Yatoto-technical
PDF
Denver Cloud Foundry Meetup - February 2016
PDF
Oracle code bogota-Handle the Complexity of Migrate to Microservices from Mon...
PPTX
SH 1 - SES 4 - Microservices - Andrew Morgan TLV.pptx
PDF
Oracle Code Javaday Sao Paulo Monolith_to Microservices
PDF
#JavadayEcuador Monolith to Microservices
PDF
Paris FOD meetup - koordinator
PDF
30 billion requests per day with a NoSQL architecture (2013)
PDF
RightScale Roadtrip Boston: Accelerate to Cloud
PDF
Oracle Code One San Francisco - Monolith to microservices
PDF
Gojko's 5 rules for super responsive Serverless applications
PDF
Legacy Code: Evolve or Rewrite?
PDF
Effective Kubernetes - Is Kubernetes the new Linux? Is the new Application Se...
PDF
2018 MONOLITICH TO MICROSERVICES - Conferencia Javeros colombia
PDF
GeeCON Microservices 2015 scaling micro services at gilt
PDF
La Redoute Quality Engineering Transformation
Scaling Gilt: from Monolithic Ruby Application to Distributed Scala Micro-Ser...
Building a Modern Microservices Architecture at Gilt: The Essentials
Red Hat Agile integration workshop - Atlanta
Agile integration workshop Atlanta
Yatoto-technical
Denver Cloud Foundry Meetup - February 2016
Oracle code bogota-Handle the Complexity of Migrate to Microservices from Mon...
SH 1 - SES 4 - Microservices - Andrew Morgan TLV.pptx
Oracle Code Javaday Sao Paulo Monolith_to Microservices
#JavadayEcuador Monolith to Microservices
Paris FOD meetup - koordinator
30 billion requests per day with a NoSQL architecture (2013)
RightScale Roadtrip Boston: Accelerate to Cloud
Oracle Code One San Francisco - Monolith to microservices
Gojko's 5 rules for super responsive Serverless applications
Legacy Code: Evolve or Rewrite?
Effective Kubernetes - Is Kubernetes the new Linux? Is the new Application Se...
2018 MONOLITICH TO MICROSERVICES - Conferencia Javeros colombia
GeeCON Microservices 2015 scaling micro services at gilt
La Redoute Quality Engineering Transformation
Ad

Recently uploaded (20)

PDF
sustainability-14-14877-v2.pddhzftheheeeee
PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
PDF
Developing a website for English-speaking practice to English as a foreign la...
PDF
Hybrid model detection and classification of lung cancer
PDF
Architecture types and enterprise applications.pdf
PPTX
Tartificialntelligence_presentation.pptx
PDF
WOOl fibre morphology and structure.pdf for textiles
PPTX
The various Industrial Revolutions .pptx
PPT
What is a Computer? Input Devices /output devices
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
CloudStack 4.21: First Look Webinar slides
PDF
Unlock new opportunities with location data.pdf
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PPTX
Chapter 5: Probability Theory and Statistics
PDF
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
PDF
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
PDF
Enhancing emotion recognition model for a student engagement use case through...
PPTX
Modernising the Digital Integration Hub
PDF
A contest of sentiment analysis: k-nearest neighbor versus neural network
sustainability-14-14877-v2.pddhzftheheeeee
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
Developing a website for English-speaking practice to English as a foreign la...
Hybrid model detection and classification of lung cancer
Architecture types and enterprise applications.pdf
Tartificialntelligence_presentation.pptx
WOOl fibre morphology and structure.pdf for textiles
The various Industrial Revolutions .pptx
What is a Computer? Input Devices /output devices
Assigned Numbers - 2025 - Bluetooth® Document
CloudStack 4.21: First Look Webinar slides
Unlock new opportunities with location data.pdf
Final SEM Unit 1 for mit wpu at pune .pptx
Chapter 5: Probability Theory and Statistics
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
Enhancing emotion recognition model for a student engagement use case through...
Modernising the Digital Integration Hub
A contest of sentiment analysis: k-nearest neighbor versus neural network

Gilt from monolith ruby app to microservice scala service architecture

  • 1. SCALING GILT From Monolith Ruby App to Distributed Scala Micro-Services #NYCTECHTALKS Yoni (Jonathan) Goldberg Lead Engineer - GILT Podium => http://bit.ly/podiumapp
  • 2. ABOUT ME - Leading the Popeye Team - Sale Personalization, Loyalty, SEO Post-purchase, Login/Registration flows - MIT CS BS/Meng | Google | IBM | IDF - Brooklyn | Coffee | Arduino | Running | Kite Surfing | Online Collaboration | Poker Excited to be part of the NYC Tech community
  • 3. THE LESSONS AND CHALLENGES THAT WE HAD/HAVE WITH MICRO-SERVICE ARCHITECTURE
  • 5. WHAT IS GILT? Flash Sales Business Founded in 2007 Top 50 Internet-Retailer ~150 Engineers
  • 7. ANOTHER WAY TO LOOK AT GILT Three day traffic pattern
  • 9. THE EARLY DAYS 2007 - Ruby on Rails the hottest new thing The goal was to get to market fast
  • 11. WE WERE ABLE TO HANDLE OUR TRAFFIC PRETTY WELL
  • 13. TECHNOLOGY PAIN POINTS - 2009 Spike required to launch 1,000s of ruby processes Postgres was overloaded Routing traffic between ruby processes sucked |Note to self| - hide from the ruby fan boys
  • 14. DEV PAIN POINTS 1000 Models/Controllers, 200K LOC, 100s of jobs Lots of contributors + no ownership Difficult deployments with long integration cycles Hard to identify root causes
  • 15. WE NEEDED TO SOLVE THE PROBLEM FAST
  • 16. THREE THINGS HAPPENED Started the transition to the JVM M(a/i)cro-Service Era Started Dedicated data stores
  • 17. WHY JVM? Widely adopted Stable Better support for concurrency Better GC vs MRI
  • 20. We solved 90% of our arch scaling problem But not the Dev points
  • 21. PAIN POINTS Spike required to launch 1,000s of ruby processes Postgres was overloaded Routing traffic between ruby processes sucked New services became semi-monolithic 1000 Models/Controllers, 200K LOC, 100s of jobs Lots of contributors + no ownership Difficult deployments with long integration cycles
  • 22. WHY WE DOUBLED DOWN ON MICRO-SERVICES Empower teams and ownership Smaller scope Simpler and Easier deployments and rollbacks
  • 24. AS OF LAST WEEK WE HAVE MORE THAN 450 SERVICES
  • 25. APP BOOTSTRAP rk bosrpamnwb ae otta:di-e #Bosrpaamnwbsrie otta di-e evc rk bosrpbblndc ae otta:ayo-os #Bosrpabblndc srie otta ayo-os evc rk bosrpcin-evrcr #Bosrpacin-evrcr sr ae otta:letsre-oe otta letsre-oe ev rk bosrpjre-aa ae otta:esyjv #Bosrpajre-aasrie otta esyjv evc rk bosrpjre-cl ae otta:esysaa #Bosrpajre-cl srie otta esysaa evc rk bosrppa ae otta:ly #Bosrpapa srie otta ly evc rk bosrppa-ibid ae otta:lyu-ul #Bosrpapa-ibidsrie otta lyu-ul evc rk bosrpstlbay ae otta:b-irr #Bosrpastlbaysrie otta b-irr evc rk bosrpshm ae otta:cea #Bosrpashm srie otta cea evc
  • 26. WE BEGAN THE TRANSITION TO SCALA AND PLAY LOSA - Lots Of Small Apps Same motivation and benefits of Micro-Service Architecture
  • 28. NEW CHALLENGES Dev/Integration Environments Who owns this service!? Monitoring Deployments and Testing (Functional/Integration)
  • 29. ON DEV/INTEGRATION ENVIRONMENTS The hardware is not strong enough No one wants to compile 20 services
  • 30. EACH TEAM HAS A STAGING ENV SRIEPRS[ EVC_OT= 40,#itn-evc 01 lsigsrie 83,#v-srst 25 scue-e 92,#v-refl 40 scfe-al 79,#v-oat 85 scLyly 85,#e-oat 15 wblyly 91,#e ivnoysau 40 wb netr tts 79,#di-oat 88 amnlyly 79,#oiiain 89 ntfcto 70,#og 12 rue 93,#v-opnn 50 sccmoet 60,#v-atitsbi 82 scwils-umt 46,#v-cinsl 06 scato-ae .. .. PR_OWR_RSSRIEPRSmp{|ot OTFRADAG=EVC_OT.a pr| [-' "{ot:oahs:{ot" 'L, #pr}lclot#pr}] } ee([wsh- - - -} PR_OWR_RS G_OT.l xc*%{s a C N n, OTFRADAG, WHS]f
  • 31. STAGING DIFFICULTIES: Hard to keep all the services up to date Maxed our staging env capacities Requires to have internet connection for some of the services (e.g LOSA-apps)
  • 33. DOCKER An extension to Linux Containers (LXC) Decentralization Simple Configurations Much lighter than a VM Immutable Supports services and platforms
  • 34. ON OWNERSHIP "code stays much longer than people" - SB
  • 36. CURRENT APPROACH Code Review!Code Review!Code Review! Team owns services, not individual developers Ownership transfer
  • 40. WE TRANSITIONED TO MICRO-DBS Third of the services have their own MongoDB Postgres Voldemort
  • 41. MANAGE MICRO-RELATIONAL DBS SCHEMA EVOLUTION MANAGER https://github.com/gilt/schema-evolution-manager
  • 42. PRINCIPLES OF SCHEMA EVOLUTION MANAGER Can manage the schema evolutions in a Git repo Schema changes are deployed as tar flies No rollbacks Schema changes are required to be incremental
  • 43. eh "raetberlae (ditgr">nwsl co cet al eess i nee) e.q smad.nwsl#rae agtcmi e-d /e.q Cetd i omt smds #gnrtstetregshm-o-ann...a. e-it eeae h a . ceaincno002tr #Spadutro yu sre c n na n or evr c shm-o-ann002 d ceaincno-.. smapyhs -lclot-nm incno -ue incn e-pl ot -oahs -ae o-ann -sr o-an
  • 46. THE TOOLS WE USE graphite / openTSDB
  • 52. ON DEPLOYMENTS AND TESTING (FUNCTIONAL/INTEGRATION) "Testing is HARD" - the dev that sits on your left
  • 53. THE CHALLENGES THAT WE FACED: Hard to execute functional tests between services Frustrating to deploy semi-manually (Capistrano) Scary to deploy other teams services
  • 54. SBT Motivation: Scala adaption Complex Scala syntax Cool features: ~test, shell, console Hard to debug
  • 55. GILT-SBT-BUILD Simple config for all the services Pulls many plugins: [nexus, testing, RPMs, run scripts, Monitoring, SemVer, ...] Custom commands (e.g 'sbt release')
  • 56. ojc BidetnsCinSreCrPoetwt Dpnece { bet ul xed letevroerjc ih eednis vlnm ='v-aeatvto' a ae scsl-ciain vlcrDp =.. a oees .. vlsreDp =.. a evres . vlcinDp =.. a letes . oerd vlinannrc =InannFsTak vrie a ocnoTak oCno.atrc }
  • 57. ION-CANNON + SBT Run functional/Selenium tests on dedicated Env Supports Canary releases Easy rollbacks Integrated health checks
  • 59. MAIN TAKEAWAYS Simplicity - Do you really need it? We feel that it was the right choice for us MicroServices promise works for most cases As of 2014 - You will need to invest in Tools!
  • 60. PODIUM TIME We are hiring... Keep in touch: jgoldberg@gilt.com www.yonigoldberg.com