how to scale your applications ? - #bzhcamp
TRANSCRIPT
![Page 1: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/1.jpg)
HOW TO SCALE YOUR APP SOME ADVICE FROM THE GUY WHO HANDLES YOUR APP UPTIME
QUENTIN ADAM AT
@WAXZCE2013
![Page 3: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/3.jpg)
And learn a lot of things about your code, apps, and good/bad design…
KEEP YOUR APPS ONLINE. MADE WITH NODE.JS, SCALA, JAVA, RUBY, PHP, PYTHON, GO…
![Page 4: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/4.jpg)
WHEN YOU NEED TO SCALE
THERE ARE 2 WAYS
![Page 5: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/5.jpg)
GROWING AND GROWING UNTIL YOU EXPLODE OR BECOME WEIRD
![Page 6: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/6.jpg)
OR SPLIT THE WORK AND MAKE YOUR SOFTWARE WORK AS A TEAM
![Page 7: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/7.jpg)
Build an army of fat app
YOU CAN DO BOTH
![Page 8: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/8.jpg)
SO WE NEED TO BE ABLE TO DISPATCH THE WORK
SCALE OUT
• Many workers doing the same thing
• No SPOF
• Growing is more easy
• Introduce best practice
SCALE UP
• 1 Fat instance
• 1 Fat application
• SPOF (single point of failure)
• Hard to maintain
• Always has a limit
• Short term meaning
BEST LONG
TERM
SOLUTION
![Page 9: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/9.jpg)
IF YOU ONLY SCALE UP, YOU GONNA HAVE A BAD TIME
![Page 10: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/10.jpg)
SO, HOW TO SCALE OUT ?JUST SOME FACTS
![Page 11: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/11.jpg)
SPLIT PROCESS AND STORAGE
Storage• Databases• Files• Sessions• Events• …
Code• Can be replicated• Stateless• Process
![Page 12: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/12.jpg)
Picking one instance or another doesn’t matter
STATELESSNESS IS THE KEY
![Page 13: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/13.jpg)
CONSIDER MORE THINGS AS DATA• User account
• Users data
• Files
• Sessions
• Events
![Page 14: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/14.jpg)
TRUST YOUR MIDDLEWARE
![Page 15: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/15.jpg)
USE AN EVENT BROKER TO MODULARIZE YOUR APP
![Page 16: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/16.jpg)
USE AN EVENT BROKER TO MODULARIZE YOUR APP
• AMQP
• Celery
• 0MQ
• Redis
• JMS
• Even some http chunk or websocket
• Some case : hadoop, akka…
• …
![Page 17: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/17.jpg)
CRON + FS IS NEITHER AN EVENT QUEUE NOR A JOB SCHEDULER
![Page 18: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/18.jpg)
CHOOSE YOUR DATASTORE WISELYYOU CAN SHOULD USE MANY DATASTORES
![Page 19: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/19.jpg)
DATASTORE CHOICES ARE DRIVEN BY USAGE
Make decisions based on
needs
Do I need atomicity of requests ?
Do I need concurrent access ?
Do I mostly read or write ?
Do I need relational ?
Do I need big storage capacity ?
Do I need high
availability ?
![Page 20: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/20.jpg)
USE ONLINE DATABASE / BE READY TO TEST IN JUST A FEW MINUTES NO NEED TO TRASH YOUR COMPUTER
![Page 21: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/21.jpg)
{P, DB, S} aaS
USE OPS FREE SOLUTION TO LEARN AND START
![Page 22: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/22.jpg)
COMMON MISTAKES
![Page 23: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/23.jpg)
DO NOT USE THE FILE SYSTEM AS A DATASTORE
File system are POSIX compliant
• POSIX is ACID• POSIX is powerful but is a bottleneck • File System is the nightmare of ops • File System creates coupling (host provider/OS/language)• SPOF-free multi tenant File System is a unicorn
STORE IN DATABASE, OR IN A DATASTORE LIKE S3/RIAKCS DEDICATED TO FILE MANAGEMENT
![Page 24: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/24.jpg)
DO NOT USE THE FILE SYSTEM AS A DATASTORE
![Page 25: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/25.jpg)
LOGS IN FILES I HATE IT
![Page 26: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/26.jpg)
USE STREAMING I/O TO STREAM DATA DIRECTLY TO DATABASE
HTTP Post dataTemporarily store as file
or in memory
Store it into your storage
backend
Say OK to client
![Page 27: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/27.jpg)
USE STREAMING I/O TO STREAM DATA DIRECTLY TO DATABASE
HTTP Post data
Directly stream your data to
Storage backend
Say OK to client
![Page 28: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/28.jpg)
DO NOT USE MEMORY AS DATABASELIKE : SHARED / GLOBAL VARIABLE, CACHE “IN THE CODE”, INTENSIVE SESSION USAGE…
![Page 29: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/29.jpg)
DO NOT USE A VARIABLE FOR MORE THAN ONE REQUEST
![Page 30: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/30.jpg)
F(X) = X * 2F(2) = 4^ WE ASSUME THATFOR SAME INPUT, SAME OUTPUT
![Page 31: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/31.jpg)
IT’S LIKE MATH FUNCTION
![Page 32: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/32.jpg)
Example : GET should not change data on server
RESPECT HTTP
![Page 33: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/33.jpg)
data will be lost
CODE WILL FAIL
![Page 34: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/34.jpg)
CAREFUL USE OF DARK MAGIC
![Page 35: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/35.jpg)
DON’T BE THAT GUY
![Page 36: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/36.jpg)
DO NOT USE A TECHNOLOGY BECAUSE YOU <3 IT OR BECAUSE IT’S HYPE : USE IT BECAUSE IT FITS YOUR NEEDS
BALANCE YOUR LEARNING CURVE WITH THE TIME SAVED
![Page 37: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/37.jpg)
DO NOT CREATE MONSTERS
![Page 38: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/38.jpg)
MAKE HARD COMPUTATION ASYNC
![Page 39: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/39.jpg)
SPLIT THE CODE : MODULES
• Smallest code base
• Deploy as service for each other
• Focus on best technology for a problem
![Page 40: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/40.jpg)
SMALLEST CODE BASE POSSIBLE FOR EACH PROGRAM
![Page 41: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/41.jpg)
EACH MODULE IS VIEWED AS A SERVICE BY OTHERSHTTP OR AMQP COMUNICATION
OR AS A CLIENT
![Page 42: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/42.jpg)
USE EVENT BROKER TO MODULARIZE YOUR APP• AMQP
• Celery
• 0MQ
• Redis
• JMS
• Some case : hadoop, akka…
• …
CRON is not an event queue
![Page 43: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/43.jpg)
FOCUS ON THE BEST TOOL TO SOLVE YOUR PROBLEM
![Page 44: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/44.jpg)
SCALE YOUR TEAMMODULARIZE YOUR TEAM
![Page 45: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/45.jpg)
THE POWER OF REWRITE EVERYTHING
![Page 46: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/46.jpg)
SMALL CODE BASE + MULTIPLE TECHNOLOGIES = LEGACY KILLER
![Page 47: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/47.jpg)
REWRITE IS QUICK BECAUSE YOU KNOW ALL THE PROBLEMS BEFORE IT HAPPENS
![Page 48: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/48.jpg)
HAPPY DEVELOPER WORKS BETTER : ARE YOU HAPPY WHEN YOU START YOUR IDE?
![Page 49: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/49.jpg)
DO NOT BUILD “THE SERVER” WITH NO DOC
![Page 50: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/50.jpg)
USE PROCESS DEPLOYMENT
![Page 51: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/51.jpg)
THE GOOD WAY OF DEPLOY AN APP :
git push
![Page 52: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/52.jpg)
EASY MOVING OR INCIDENT MANAGEMENT
![Page 53: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/53.jpg)
KEEP CALM UNDER FIRE
![Page 54: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/54.jpg)
ALWAYS USE A REVERSE PROXY
Y U NO USE ONE ?
![Page 55: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/55.jpg)
TRICK WITH OTHERS PROTOCOLS
![Page 56: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/56.jpg)
TRACK BUG & GET METRICS
![Page 57: How to scale your applications ? - #bzhcamp](https://reader036.vdocuments.net/reader036/viewer/2022062312/554bb28fb4c905b8618b5b42/html5/thumbnails/57.jpg)
I’m @waxzce on twitter
I’m the CEO of
A PaaS provider, give it a try ;-)
THX FOR LISTENING & QUESTIONS TIME