how to scale your applications ? - #bzhcamp

57
HOW TO SCALE YOUR APP SOME ADVICE FROM THE GUY WHO HANDLES YOUR APP UPTIME QUENTIN ADAM AT @ WAXZCE 2013

Upload: quentin-adam

Post on 08-May-2015

523 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: How to scale your applications ? - #bzhcamp

HOW TO SCALE YOUR APP SOME ADVICE FROM THE GUY WHO HANDLES YOUR APP UPTIME

QUENTIN ADAM AT

@WAXZCE2013

Page 2: How to scale your applications ? - #bzhcamp

MY DAY TO DAY WORK : CLEVER CLOUD, MAKE YOUR APP RUN ALL THE TIME

Page 3: How to scale your applications ? - #bzhcamp

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

WHEN YOU NEED TO SCALE

THERE ARE 2 WAYS

Page 5: How to scale your applications ? - #bzhcamp

GROWING AND GROWING UNTIL YOU EXPLODE OR BECOME WEIRD

Page 6: How to scale your applications ? - #bzhcamp

OR SPLIT THE WORK AND MAKE YOUR SOFTWARE WORK AS A TEAM

Page 7: How to scale your applications ? - #bzhcamp

Build an army of fat app

YOU CAN DO BOTH

Page 8: How to scale your applications ? - #bzhcamp

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

IF YOU ONLY SCALE UP, YOU GONNA HAVE A BAD TIME

Page 10: How to scale your applications ? - #bzhcamp

SO, HOW TO SCALE OUT ?JUST SOME FACTS

Page 11: How to scale your applications ? - #bzhcamp

SPLIT PROCESS AND STORAGE

Storage• Databases• Files• Sessions• Events• …

Code• Can be replicated• Stateless• Process

Page 12: How to scale your applications ? - #bzhcamp

Picking one instance or another doesn’t matter

STATELESSNESS IS THE KEY

Page 13: How to scale your applications ? - #bzhcamp

CONSIDER MORE THINGS AS DATA• User account

• Users data

• Files

• Sessions

• Events

Page 14: How to scale your applications ? - #bzhcamp

TRUST YOUR MIDDLEWARE

Page 15: How to scale your applications ? - #bzhcamp

USE AN EVENT BROKER TO MODULARIZE YOUR APP

Page 16: How to scale your applications ? - #bzhcamp

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

CRON + FS IS NEITHER AN EVENT QUEUE NOR A JOB SCHEDULER

Page 18: How to scale your applications ? - #bzhcamp

CHOOSE YOUR DATASTORE WISELYYOU CAN SHOULD USE MANY DATASTORES

Page 19: How to scale your applications ? - #bzhcamp

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

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

{P, DB, S} aaS

USE OPS FREE SOLUTION TO LEARN AND START

Page 22: How to scale your applications ? - #bzhcamp

COMMON MISTAKES

Page 23: How to scale your applications ? - #bzhcamp

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

DO NOT USE THE FILE SYSTEM AS A DATASTORE

Page 25: How to scale your applications ? - #bzhcamp

LOGS IN FILES I HATE IT

Page 26: How to scale your applications ? - #bzhcamp

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

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

DO NOT USE MEMORY AS DATABASELIKE : SHARED / GLOBAL VARIABLE, CACHE “IN THE CODE”, INTENSIVE SESSION USAGE…

Page 29: How to scale your applications ? - #bzhcamp

DO NOT USE A VARIABLE FOR MORE THAN ONE REQUEST

Page 30: How to scale your applications ? - #bzhcamp

F(X) = X * 2F(2) = 4^ WE ASSUME THATFOR SAME INPUT, SAME OUTPUT

Page 31: How to scale your applications ? - #bzhcamp

IT’S LIKE MATH FUNCTION

Page 32: How to scale your applications ? - #bzhcamp

Example : GET should not change data on server

RESPECT HTTP

Page 33: How to scale your applications ? - #bzhcamp

data will be lost

CODE WILL FAIL

Page 34: How to scale your applications ? - #bzhcamp

CAREFUL USE OF DARK MAGIC

Page 35: How to scale your applications ? - #bzhcamp

DON’T BE THAT GUY

Page 36: How to scale your applications ? - #bzhcamp

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

DO NOT CREATE MONSTERS

Page 38: How to scale your applications ? - #bzhcamp

MAKE HARD COMPUTATION ASYNC

Page 39: How to scale your applications ? - #bzhcamp

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

SMALLEST CODE BASE POSSIBLE FOR EACH PROGRAM

Page 41: How to scale your applications ? - #bzhcamp

EACH MODULE IS VIEWED AS A SERVICE BY OTHERSHTTP OR AMQP COMUNICATION

OR AS A CLIENT

Page 42: How to scale your applications ? - #bzhcamp

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

FOCUS ON THE BEST TOOL TO SOLVE YOUR PROBLEM

Page 44: How to scale your applications ? - #bzhcamp

SCALE YOUR TEAMMODULARIZE YOUR TEAM

Page 45: How to scale your applications ? - #bzhcamp

THE POWER OF REWRITE EVERYTHING

Page 46: How to scale your applications ? - #bzhcamp

SMALL CODE BASE + MULTIPLE TECHNOLOGIES = LEGACY KILLER

Page 47: How to scale your applications ? - #bzhcamp

REWRITE IS QUICK BECAUSE YOU KNOW ALL THE PROBLEMS BEFORE IT HAPPENS

Page 48: How to scale your applications ? - #bzhcamp

HAPPY DEVELOPER WORKS BETTER : ARE YOU HAPPY WHEN YOU START YOUR IDE?

Page 49: How to scale your applications ? - #bzhcamp

DO NOT BUILD “THE SERVER” WITH NO DOC

Page 50: How to scale your applications ? - #bzhcamp

USE PROCESS DEPLOYMENT

Page 51: How to scale your applications ? - #bzhcamp

THE GOOD WAY OF DEPLOY AN APP :

git push

Page 52: How to scale your applications ? - #bzhcamp

EASY MOVING OR INCIDENT MANAGEMENT

Page 53: How to scale your applications ? - #bzhcamp

KEEP CALM UNDER FIRE

Page 54: How to scale your applications ? - #bzhcamp

ALWAYS USE A REVERSE PROXY

Y U NO USE ONE ?

Page 55: How to scale your applications ? - #bzhcamp

TRICK WITH OTHERS PROTOCOLS

Page 56: How to scale your applications ? - #bzhcamp

TRACK BUG & GET METRICS

Page 57: How to scale your applications ? - #bzhcamp

I’m @waxzce on twitter

I’m the CEO of

A PaaS provider, give it a try ;-)

THX FOR LISTENING & QUESTIONS TIME