growing x20 without spending an extra penny on hosting

35
Growing X20 without spending an extra penny on hosting Dor Kalev, CTO @ FTBpro

Upload: dor-kalev

Post on 16-Jun-2015

108 views

Category:

Technology


2 download

DESCRIPTION

A year ago we started a big change in FTBpro. We completely changed the visual design, moved to a single page architecture and started exploring new ways to minimise load on our servers - both when serving our actual website, and mobile API responses.We'll focus on how scaling considerations are now an integral part of our architecture, which enabled us to serve 20x more traffic than we did 1 year ago, with the same setup and with no additional costs.

TRANSCRIPT

Page 1: Growing X20 without spending an extra penny on hosting

Growing X20 without spending an extra penny on hosting

Dor Kalev, CTO @ FTBpro

Page 2: Growing X20 without spending an extra penny on hosting

Largest fan-generated media platform in global football

130m pageviews / month

Page 3: Growing X20 without spending an extra penny on hosting

a Football fan #musthave1M+ mobile installs

Page 4: Growing X20 without spending an extra penny on hosting

Content is king

Page 5: Growing X20 without spending an extra penny on hosting

Single Page Application

Phantom.js renders pages on the server-side for SEO, crawlers and mobile web performance

Load Balancer

Memcached

Redis

Web 1 Web 2 Web 3

MySQL MongoDB ElasticSearch

Amazon Web Services

NginX +

Ruby on Rails

PhantomJS

Web 4

Page 6: Growing X20 without spending an extra penny on hosting

How do we scale post pages?

Page 7: Growing X20 without spending an extra penny on hosting

Each Render Server can return 1 client request at a time

1:1Client Server

Render

Page 8: Growing X20 without spending an extra penny on hosting

Linear correlation between clients and servers

1:1Client Server

Render

Client ServerRender

Page 9: Growing X20 without spending an extra penny on hosting

A cache server can handle over x10 more traffic

10:1:1

Cache Server Render

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Page 10: Growing X20 without spending an extra penny on hosting

Cache server still consumes CPU and with more traffic, more servers are needed

20:2:1

Cache

Server Render

Cache

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Page 11: Growing X20 without spending an extra penny on hosting

Accelerator like NGINX+MemCached or Varnish can be x100 more efficient than

plain App Server Cache100:1:1

Server Render

Accelerator

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

https://www.igvita.com/2008/02/11/nginx-and-memcached-a-400-boost/https://www.varnish-cache.org

Page 12: Growing X20 without spending an extra penny on hosting

200:2:1

Server Render

Accelerator

Accelerator

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Accelerator also runs on limited hardware and needs more CPU in order to scale

Page 13: Growing X20 without spending an extra penny on hosting

Enter CDN∞:1

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

CDN Server Render

Page 14: Growing X20 without spending an extra penny on hosting

ClientClient

My Tiny

Server

PoPCDN

SERVERCDN

SERVER

CDN SERVER

PoPCDN

SERVERCDN

SERVER

CDN SERVER

PoPCDN

SERVERCDN

SERVER

CDN SERVER

Client

Client Client Client Client Client

Client

What’s a CDN?

Page 15: Growing X20 without spending an extra penny on hosting

What’s a CDN?

• Content Delivery Network

• A set of autonomic distributed cache servers

• Serve cache from a location geographically close to the client

• e.g: Akamai, Cloudflare, Fastly, Highwinds, Edgecast, Cloudfront

Page 16: Growing X20 without spending an extra penny on hosting

Enter Trouble∞:1

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

Client

CDN Server Render

Page 17: Growing X20 without spending an extra penny on hosting

Fixing minor Typo? Need to Refresh Cache??

Page 18: Growing X20 without spending an extra penny on hosting

TTL vs. ON CHANGE

Cache Policy

Page 19: Growing X20 without spending an extra penny on hosting

Purge by URL can take over an hour on classic CDNs

Z Z Z

Page 20: Growing X20 without spending an extra penny on hosting

Purge by TTL - isn’t realtime & causes redundant server hits

CPU

LO

AD

0

7.5

15

22.5

30

TIME

1 2 3 4 5 (TTL) 6 7 8 9 (TTL) 10 11 12

Page 21: Growing X20 without spending an extra penny on hosting

multiply by all articlesC

PU L

OAD

0

7.5

15

22.5

30

TIME

1 2 3 4 5 (TTL) 6 7 8 9 (TTL) 10 11 12

Page 22: Growing X20 without spending an extra penny on hosting

TTL = Constant waste of CPUC

PU L

OAD

0

7.5

15

22.5

30

TIME

1 2 3 4 5 6 7 8 9 10 11 12

Page 23: Growing X20 without spending an extra penny on hosting

Better Solution?

Page 24: Growing X20 without spending an extra penny on hosting

abuse new CDN technologiesSuper Fast Purge + Smart API!

!!!!!

e.g. Fastly, EdgeCast

Page 25: Growing X20 without spending an extra penny on hosting

cache forever +purge on demand

0

7.5

15

22.5

30

1 (release) 2 3 4 5 6 7 8 9 (purge) 10 11 12

Page 26: Growing X20 without spending an extra penny on hosting

fast purge at ~10-45 seconds

Page 27: Growing X20 without spending an extra penny on hosting

Advantages

• ∞ scaling

• cheap

• fast

• keep the stack simple

Page 28: Growing X20 without spending an extra penny on hosting

Caveats

• Purging everything can lead to downtime, e.g. when deploying

• User Specific content can’t be cached with the entire page

• Downtime on massive Push Notifications

Page 29: Growing X20 without spending an extra penny on hosting

Massive Push Notification + cold CDN Cache = traffic goes to app servers

CPU

LO

AD

0

250

500

750

1000

TIME

1 (PN) 2 3 4 5 6 7 8 9 10 11 12

Page 30: Growing X20 without spending an extra penny on hosting

ClientClient

My Tiny

Server

PoPCDN

SERVERCDN

SERVER

CDN SERVER

PoPCDN

SERVERCDN

SERVER

CDN SERVER

PoPCDN

SERVERCDN

SERVER

CDN SERVER

Client

Client Client Client Client Client

Client

Render (or cache & serve) X number of calls in parallel = self-DDoS

Page 31: Growing X20 without spending an extra penny on hosting

ClientClient

CACHE

PoPCDN

SERVERCDN

SERVER

CDN SERVER

PoPCDN

SERVERCDN

SERVER

CDN SERVER

PoPCDN

SERVERCDN

SERVER

CDN SERVER

Client

Client Client Client Client Client

Client

Solution: Another local cache layer & Preload CDN (few CDNs have this feature, e.g. EdgeCast)

My Tiny

Server

Page 32: Growing X20 without spending an extra penny on hosting

CPU vs TRAFFIC

• 13:53 preloaded post to CDN • 13:55 PN sent • 13:57+ traffic stops @ CDN servers, no CPU throughput • 14:00 …

Page 33: Growing X20 without spending an extra penny on hosting

14:00 Laugh a maniacal laugh of satisfaction

Page 34: Growing X20 without spending an extra penny on hosting

Summary• CDN allows massive scale

• Smart CDN usage allows even more scale

• Scale + fresh content + low hosting prices is a do-able mission

!

Questions?

Page 35: Growing X20 without spending an extra penny on hosting

Read More…• Growing X20 without spending an extra penny on

hosting (The original blog post)http://tech.ftbpro.com/post/78969626647/growing-x20-without-spending-an-extra-penny-on-hosting

• Single Page Applications Done Righthttp://tech.ftbpro.com/post/84720180206/single-page-applications-done-right

• Count von Count - Real time counting DBhttp://tech.ftbpro.com/post/73212710968/count-von-count-a-real-time-counting-database

• The Dark Side of Single Page Applicationshttp://tech.ftbpro.com/post/66182501420/the-dark-side-of-single-page-applications-rails

OSS: http://github.com/ftbproBLOG: http://tech.ftbpro.com