Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Containerizing your monolith
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Jano González
October 30, 2019
Programming
0
480
Containerizing your monolith
My presentation @ LISA19
Jano González
October 30, 2019
Tweet
Share
More Decks by Jano González
See All by Jano González
Migrando a Microservicios
janogonzalez
1
330
Extracting services from a monolith
janogonzalez
3
280
¿Después de 10 años, realmente entiendo esta industria?
janogonzalez
3
510
Microservices in Practice
janogonzalez
7
710
Two programmers in one
janogonzalez
1
220
The Bipolar Programmer
janogonzalez
4
640
Ruby for your two internal programmers
janogonzalez
4
290
Ruby for Java minds
janogonzalez
4
1.1k
How Ruby Programmed Me
janogonzalez
11
540
Other Decks in Programming
See All in Programming
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
510
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
440
Understanding Apache Lucene - More than just full-text search
spinscale
0
140
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
350
S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く
ya_ma23
0
1.2k
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
210
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
290
実践ハーネスエンジニアリング #MOSHTech
kajitack
7
4.9k
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
250
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
370
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
420
Tamach-sre-3_ANDPAD-shimaison93
mane12yurks38
0
200
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.2k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
120
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
WCS-LA-2024
lcolladotor
0
500
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.2k
Building Adaptive Systems
keathley
44
3k
Context Engineering - Making Every Token Count
addyosmani
9
780
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
68
38k
HDC tutorial
michielstock
1
590
Optimizing for Happiness
mojombo
378
71k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
190
Transcript
Containerizing your monolith Jano González (@janogonzalez)
Introduction
What’s SoundCloud
> 200M Tracks > 20M Creators Many SoundCloud Rappers What’s
SoundCloud
2017-2018 Migration Keep moving Motivation
What’s the balance? Motivation
Our migration to microservices The monolith Containerizing the monolith Conclusion
Contents
Our migration to microservices
$ rails new soundcloud How we started
Around 2012
Around 2012
Around 2012
Around 2012
After
After
But what about deployment?
Component Environment Zone Deployment Our abstractions
Deployment The process
The monolith
Track User Playlist The monolith Core entities
360 Chef provisioned bare-metal machines Rails 2.3 Capistrano deployment The
monolith The technology
The monolith The architecture Public API Internal API Public API
Strangler Internal API caching/ strangler Another BFF Many microservices Public Web Workers
The monolith The components Public API MoshiMoshi (Internal API) Public
Web Assets MoshiMoshi Comments (Internal API) Workers Cron Shell Migration
The monolith The hosts component statsd-exporter mtail statsd passenger- exporter
…
Utilization Deployment Lack of confidence The monolith The issues
Containerizing the monolith
Throw it into Kubernetes
Congrats, your monolith is a microservice now
Thank You!
1.5 Engineers 1 year until the last bit was cleaned
up The project
The first milestone
Docker development container Tests on GoCD The first milestone
The proof of concept
First staging component The proof of concept Does it even
work?
The proof of concept PR O BLEM ! Init script
Nginx Passenger Passenger Process Rails App ??? Where are my env variables?
The proof of concept Env variables with The Perl Hack™
SO LU TIO N
Productionizing
Deployment Monitoring Logs Productionizing Does it run where it matters?
Productionizing Anatomy of a traffic serving pod component statsd statsd-exporter
passenger- exporter mtail twemproxy twemproxy-cu twemproxy- exporter init
Don’t choke service discovery Be allocatable Productionizing Sizing the pods
CPU units for main container Passenger processes Productionizing Sizing the
pods 3 16
Productionizing PR O BLEM ! Stdout v/s the log metrics
exporter Component STDOUT Log aggregator File??? Mtail
Productionizing Mtail with The Rotatelogs Hack™ SO LU TIO N
Productionizing Public API
Orchestration Productionizing Public API
Productionizing Public API PR O BLEM ! DNS latency and
our excessive usage Component Service Service Service
Productionizing Public API CoreDNS and the DNS Hack™ SO LU
TIO N
Productionizing Internal API
Highest throughput Productionizing Internal API
Productionizing Internal API PR O BLEM ! Latency was too
high
Productionizing Internal API Optimize GC and make cheaper SQL queries
SO LU TIO N
Productionizing Internal API PR O BLEM ! Errors spikes during
deployment
Productionizing Internal API The preStop Trick™ SO LU TIO N
Productionizing Internal API PR O BLEM ! Errors spikes during
deployment (still???)
Productionizing Internal API The Pre Start Trick™ SO LU TIO
N
The rest
• Workers • Cron jobs • Shell / Migration hosts
• Cleanup! The rest
Finishing
Current status
On-prem Cloud Current status Number of pods ~1000 ~140
On-prem RPS Cloud RPS Current status Traffic 25K 3K
Current status Many deploys
Conclusions
One Infrastructure One Delivery Process Conclusions What we solved
Step by step Controlled rollouts Managing expectations Conclusions How we
did it
Improved utilization Increased confidence Enabling new initiatives Conclusions Benefits
Assess current progress Evaluate costs and benefits Conclusions Should you
do it?
Thank You!
@janogonzalez https://soundcloud.com/janogonzalez