improving the performance of your web app

65
Improving the Performance of your Web Application Joe Stump, Lead Architect, Digg.com

Upload: joe-stump

Post on 06-May-2015

5.667 views

Category:

Technology


2 download

DESCRIPTION

These are the slides from my FOWA workshop on how to scale your web apps.

TRANSCRIPT

Page 1: Improving The Performance of Your Web App

Improving the Performance of your

Web ApplicationJoe Stump, Lead Architect, Digg.com

Page 2: Improving The Performance of Your Web App

Introductions

Page 3: Improving The Performance of Your Web App

Users want access to all of their crap at all times. I, personally, don’t find your dog funny or cute, but I’ll be damned if I’m the one who’ll stand in the way of you posting it and others consuming it.

“Web 2.0 sucks (for scaling).”Joe Stump, Lead Architect, Digg.com

Page 4: Improving The Performance of Your Web App

Backend Considerations Language considerations Scaling out Caching strategies Content storage and delivery Parallel data requests Near time data processing Partitioning data

Page 5: Improving The Performance of Your Web App

Frontend Considerations

Reduce HTTP requests Avoid inline JavaScript and CSS Compression and Minification Learn to love HTTP/1.1

Page 6: Improving The Performance of Your Web App

“PHP doesn’t scale.”Cal Henderson, Director of Development, Flickr.com

Languages don’t scale Bytecode caching (PHP, Python, etc) Robust library & driver support Active developer communities

Page 7: Improving The Performance of Your Web App

What language do you use? Why? Does it help you or hurt to use it?

Discussion!

Page 8: Improving The Performance of Your Web App

Your mom lied; don’t share.

Decentralize data, storage, processing, etc. Increased redundancy Scaling becomes simple; add more boxes

Page 9: Improving The Performance of Your Web App

Scaling Up

Page 10: Improving The Performance of Your Web App

Scaling Up

Page 11: Improving The Performance of Your Web App

Scaling Up

Page 12: Improving The Performance of Your Web App

Scaling Out

Page 13: Improving The Performance of Your Web App

Scaling Out

Page 14: Improving The Performance of Your Web App

Scaling Out

Page 15: Improving The Performance of Your Web App

Scaling Out

Page 16: Improving The Performance of Your Web App

Scaling Out

Page 17: Improving The Performance of Your Web App

Scaling Out

Page 18: Improving The Performance of Your Web App

Scaling Out

Page 19: Improving The Performance of Your Web App

Scaling Out

Page 20: Improving The Performance of Your Web App

Scaling Out

Page 21: Improving The Performance of Your Web App

Scaling Out

Page 22: Improving The Performance of Your Web App

How do I scale easily?

1.Caching

2.Caching

3.Caching!

Page 23: Improving The Performance of Your Web App

What are my options?

Disk based caching (e.g. Cache_Lite) In memory caching (e.g. APC, Memcached) Cloud caching (e.g. MogileFS, S3)

Page 24: Improving The Performance of Your Web App

Disk based caching Stupid simple Cheap Fairly easy to scale out Dynamic images Slower than others Use fast disks! RAM disks are faster

Page 25: Improving The Performance of Your Web App

APC (PHP)

Bytecode caching In memory user cache Insanely fast Not centralized or shared

Page 26: Improving The Performance of Your Web App

Memcache

If you’re not using this you’re crazy Easy to set up and use Insanely fast over the network Scales to insane heights Failover, widely supported, etc. Centralized and shared across site

Page 27: Improving The Performance of Your Web App

Mogile FS

File and data store Runs over WebDAV Scales out infinitely (in theory) Serialize data, store in file Centralized and shared across site

Page 28: Improving The Performance of Your Web App

Amazon S3

File and data store Runs over HTTP Scales out infinitely (in theory) Serialize data, store in file Centralized and shared across site Costs money Widely supported in all languages Check out ThruDB

Page 29: Improving The Performance of Your Web App

Are you using caching? Why not? If so, what’s your strategy?

Discussion!

Page 30: Improving The Performance of Your Web App

Content Storage/Delivery

What are your storage needs? Is it critical YOU store them? How costly is it to store in-house? Can you do it for free? (YAY! Mooching!)

Page 31: Improving The Performance of Your Web App

i can has free storage?

YouTube for video Scribd for documents Flickr for images

Page 32: Improving The Performance of Your Web App

Cloud Services (S3)

Simple to get up and running No hardware maintenance Costs money, but not as much as you think

Page 33: Improving The Performance of Your Web App

NFS

Simple to set up and get running Costs money, requires colocation, etc. Does. Not. Scale. Did I mention it doesn’t scale? Stop gap solution at best

Page 34: Improving The Performance of Your Web App

Mogile FS

Somewhat complicated to set up Costs money, requires colocation, etc. Scales exceptionally well Used at Digg, LiveJournal, others Check out File_Mogile by Digg (PEAR)

Page 35: Improving The Performance of Your Web App

Roll Your Own

File storage IS your business Highly specialized and customized Costs money, requires colocation, etc. Last resort

Page 36: Improving The Performance of Your Web App

CDN

Completely outsource it Costs a ton of money Out of your control Scales and scales and scales

Page 37: Improving The Performance of Your Web App

What are you using for storage? What’s worked for you? What’s failed epically?

Discussion!

Page 38: Improving The Performance of Your Web App

Parallel Data Requests

Access your data in parallel Make data access asynchronous (WHAT?!) Loosely couple your data access layer All for the low, low price of FREE!*

*Offer only available for hardcore nerds looking for street cred.

Page 39: Improving The Performance of Your Web App

HTTP

Parallel Asynchronous Non-blocking Loosely coupled Free foot massages!

Page 40: Improving The Performance of Your Web App
Page 41: Improving The Performance of Your Web App

HTTP

Page 42: Improving The Performance of Your Web App

Gearman

Parallel Asynchronous Scales well

Page 43: Improving The Performance of Your Web App

Which format to use for exchange? Anyone doing this already? Amazon, Google, Yahoo!

Discussion!

Page 44: Improving The Performance of Your Web App

Near time processing

Does this need to be done NOW? Offload to background processes Offloading must be a no op Feeds, Facebook, crawling, etc.

Page 45: Improving The Performance of Your Web App

Cron

Run every minute or two Simple Great for batch jobs Not decentralized, locking issues

Page 46: Improving The Performance of Your Web App

Gearman

Fire and forget Simple Scales well Digg Images Nearly instant Decentralized No guarantees

Page 47: Improving The Performance of Your Web App

Queues

Grid Engine by Sun Starling by Twitter Others?

Page 48: Improving The Performance of Your Web App

Amzon’s EC2

Near limitless computing resources Remember; don’t share Awesome for bots, crawling, etc.

http://open.blogs.nytimes.com/2007/11/01/self-service-prorated-super-computing-fun/

Page 49: Improving The Performance of Your Web App

What’s low(er) priority? Where would you implement this?

Discussion!

Page 50: Improving The Performance of Your Web App

Partitioning Data

Horizontal v. Vertical Not all data lives in a single place Hash records to partitions App smart / logical sharding

Page 51: Improving The Performance of Your Web App

Horizontal

Usersid int(11)username char(15)password char(15)email char(45)

Usersid int(11)username char(15)password char(15)email char(45)

Usersid int(11)username char(15)password char(15)email char(45)

192.168.0.1 192.168.0.3192.168.0.2

Page 52: Improving The Performance of Your Web App

Hashing your dataoh hai! were’s mai dataz?!

Page 53: Improving The Performance of Your Web App

How?

Put 10,000 users per partition Partition users alphabetically Partition home listings by zip code Partition products by SKU

Page 54: Improving The Performance of Your Web App

Vertical

Usersid int(11)username char(15)password char(15)email char(45)

UsersPrfid int(11)fname char(50)lname char(50)url char(255)

UsersStgid int(11)cmts_pg tinyint(2)cmts_lvl tinyint(1)cmts_prf tinyint(1)

192.168.0.1 192.168.0.3192.168.0.2

Page 55: Improving The Performance of Your Web App

Why?

Avoid altering large tables Save time during insert Many small tables v. one large table Lazy loading of rarely used data

Page 56: Improving The Performance of Your Web App

Natural partitions in your data? How would you hash your data?

Discussion!

Page 57: Improving The Performance of Your Web App

Reduce HTTP Requests

Bundle JavaScript and CSS Use sprites for images Reduce images / outside objects

Page 58: Improving The Performance of Your Web App

Reduce HTTP Requests

Bundle JavaScript and CSS Use sprites for images Reduce images / outside objects

Page 59: Improving The Performance of Your Web App

Avoid inline JS/CSS

External = Cached

Inline = Not Cached

Page 60: Improving The Performance of Your Web App

Compression / Minify

Enable Gzip compression sitewide Use minification software on JS jQuery/Prototype Minified

Page 61: Improving The Performance of Your Web App

Learn to Love HTTP/1.1

Cache-Control: public/private Connection: close Expires: Thu, 28 Feb 2008 16:00:00 GMT

Page 62: Improving The Performance of Your Web App

Conclusions

Share nothing, decentralize, redundancy Caching, caching, caching, caching Reduce, recycle and reuse

Page 63: Improving The Performance of Your Web App

Resources

High Performance Web SitesEssential Knowledge for Front-End Engineersby Steve Souders

Serving JavaScript Fasthttp://www.thinkvitamin.com/features/webapps/serving-javascript-fastby Cal Henderson, Director of Development, Flickr.com

Page 64: Improving The Performance of Your Web App

Questions?!

Page 65: Improving The Performance of Your Web App

Contact/Flame Me

Joe [email protected]://joestump.net