how to scale your applications ? - #bzhcamp
TRANSCRIPT
HOW TO SCALE YOUR APP SOME ADVICE FROM THE GUY WHO HANDLES YOUR APP UPTIME
QUENTIN ADAM AT
@WAXZCE2013
MY DAY TO DAY WORK : CLEVER CLOUD, MAKE YOUR APP RUN ALL THE TIME
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…
WHEN YOU NEED TO SCALE
THERE ARE 2 WAYS
GROWING AND GROWING UNTIL YOU EXPLODE OR BECOME WEIRD
OR SPLIT THE WORK AND MAKE YOUR SOFTWARE WORK AS A TEAM
Build an army of fat app
YOU CAN DO BOTH
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
IF YOU ONLY SCALE UP, YOU GONNA HAVE A BAD TIME
SO, HOW TO SCALE OUT ?JUST SOME FACTS
SPLIT PROCESS AND STORAGE
Storage• Databases• Files• Sessions• Events• …
Code• Can be replicated• Stateless• Process
Picking one instance or another doesn’t matter
STATELESSNESS IS THE KEY
CONSIDER MORE THINGS AS DATA• User account
• Users data
• Files
• Sessions
• Events
TRUST YOUR MIDDLEWARE
USE AN EVENT BROKER TO MODULARIZE YOUR APP
USE AN EVENT BROKER TO MODULARIZE YOUR APP
• AMQP
• Celery
• 0MQ
• Redis
• JMS
• Even some http chunk or websocket
• Some case : hadoop, akka…
• …
CRON + FS IS NEITHER AN EVENT QUEUE NOR A JOB SCHEDULER
CHOOSE YOUR DATASTORE WISELYYOU CAN SHOULD USE MANY DATASTORES
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 ?
USE ONLINE DATABASE / BE READY TO TEST IN JUST A FEW MINUTES NO NEED TO TRASH YOUR COMPUTER
{P, DB, S} aaS
USE OPS FREE SOLUTION TO LEARN AND START
COMMON MISTAKES
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
DO NOT USE THE FILE SYSTEM AS A DATASTORE
LOGS IN FILES I HATE IT
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
USE STREAMING I/O TO STREAM DATA DIRECTLY TO DATABASE
HTTP Post data
Directly stream your data to
Storage backend
Say OK to client
DO NOT USE MEMORY AS DATABASELIKE : SHARED / GLOBAL VARIABLE, CACHE “IN THE CODE”, INTENSIVE SESSION USAGE…
DO NOT USE A VARIABLE FOR MORE THAN ONE REQUEST
F(X) = X * 2F(2) = 4^ WE ASSUME THATFOR SAME INPUT, SAME OUTPUT
IT’S LIKE MATH FUNCTION
Example : GET should not change data on server
RESPECT HTTP
data will be lost
CODE WILL FAIL
CAREFUL USE OF DARK MAGIC
DON’T BE THAT GUY
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
DO NOT CREATE MONSTERS
MAKE HARD COMPUTATION ASYNC
SPLIT THE CODE : MODULES
• Smallest code base
• Deploy as service for each other
• Focus on best technology for a problem
SMALLEST CODE BASE POSSIBLE FOR EACH PROGRAM
EACH MODULE IS VIEWED AS A SERVICE BY OTHERSHTTP OR AMQP COMUNICATION
OR AS A CLIENT
USE EVENT BROKER TO MODULARIZE YOUR APP• AMQP
• Celery
• 0MQ
• Redis
• JMS
• Some case : hadoop, akka…
• …
CRON is not an event queue
FOCUS ON THE BEST TOOL TO SOLVE YOUR PROBLEM
SCALE YOUR TEAMMODULARIZE YOUR TEAM
THE POWER OF REWRITE EVERYTHING
SMALL CODE BASE + MULTIPLE TECHNOLOGIES = LEGACY KILLER
REWRITE IS QUICK BECAUSE YOU KNOW ALL THE PROBLEMS BEFORE IT HAPPENS
HAPPY DEVELOPER WORKS BETTER : ARE YOU HAPPY WHEN YOU START YOUR IDE?
DO NOT BUILD “THE SERVER” WITH NO DOC
USE PROCESS DEPLOYMENT
THE GOOD WAY OF DEPLOY AN APP :
git push
EASY MOVING OR INCIDENT MANAGEMENT
KEEP CALM UNDER FIRE
ALWAYS USE A REVERSE PROXY
Y U NO USE ONE ?
TRICK WITH OTHERS PROTOCOLS
TRACK BUG & GET METRICS
I’m @waxzce on twitter
I’m the CEO of
A PaaS provider, give it a try ;-)
THX FOR LISTENING & QUESTIONS TIME