Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Australia’s #1 horse racing website
Our Brands

PuntersParadise.com.au

BestOdds.com.au

+ over 110 individual content websites

rleague.com
Stupid shit we do
More stupid shit we do
Why AWS?
Normal 30 days
12 month traffic
PuntersParadise.com.au

Melbourne Cup Day 2012
•  13,350	
  concurrent	
  users	
  
peak	
  load	
  
	
  
•  550,000	
  un...
PuntersParadise.com.au

Our year on year growth

Visits	
  
2009	
  

572,000	
  

2010	
  

796,000	
  

2011	
  

1,731,...
Melbourne Cup Uptime History

2008
2009
2010
2011
2012

Migrated to AWS
about here
The early days.
Immediate wins

We killed our pets and started producing cattle
Automated builds
Performance issues were obvious
Tech was ...
Our Basic Stack

ELB
Cache Servers
ELB
Web Servers

ElastiCache
RDS
Odds Comparison
Our Basic Stack

ELB
Cache Servers
ELB
Web Servers

ElastiCache
RDS

Feed Server
On any given day..

8-10 races per meeting
On any given day..

Average of 12 race meetings per day
On any given day..

+ 45 sporting games
On any given day..

+ 8 greyhound meetings x 10 races
On any given day..

x2 bet types (win/place or sport margin/outrights)
On any given day..

x12 bookmakers!
On any given day..

Odds can change every few seconds
Two problems here.

Processing

Delivery
Our first attempt

while(true)
{
//some magic in here
$market = getMarketInQueue();
//web requests to XML/JSON feeds
$mark...
How it works

//this sucks. Doesn’t feel right.
$market->saveOddsToMySQL();
Push that puppy

while(true)
{
//some magic in here
$market = getMarketInQueue();
//web requests to XML/JSON feeds
$market...
Push that puppy
"2081715-Average-FixedWin": {
"2081715-Average-FixedWin": {
"sid": 2081715,
"sid": 2081715,
"bt": "2081715...
Our Full Stack

ELB
Cache Servers
ELB
Web Servers

DynamoDB

Pusher.com

ElastiCache
RDS

Feed Servers
Whats next?

ELB
Cache Servers
ELB

Autoscale!

Web Servers

DynamoDB

Pusher.com

ElastiCache

Autoscale!
RDS

Feed Serve...
AWS Reference Architecture

Too easy. Let’s just do that..
Autoscaling the feedserver
Controller

Feed Server

Feed Server
Autoscaling the feedserver
Controller

Feed Server

Feed Server
Autoscaling the feedserver

Feed Server

Feed Server

Feed Server
Autoscaling the feedserver

Feed Server 1

Feed Server 2

Feed Server 3
Autoscaling the feedserver
Autoscaling the feedserver
Autoscaling the feedserver
Our advice

Let everything get hit by a bus
Empower the worker, not the boss
Utilise the AWS API as much as possible
It’s ...
One last cool thing…
Upcoming SlideShare
Loading in …5
×

Architecting high traffic websites with rapid changes in data on AWS

693 views

Published on

Presented by CEO, Luc Pettett

Australia's largest horse racing website and social network for punters. PP runs over 110 websites from an agile and highly pragmatic architecture on AWS. Using solutions such as EC2, RDS, DynamoDB & CloudFormation, with up to 1 million unique visitors per month and 18 million odds fluctuations every day, dexterous and extremely durable architecture is key to the group's success.

Published in: Technology, Business
  • Be the first to comment

  • Be the first to like this

Architecting high traffic websites with rapid changes in data on AWS

  1. 1. Australia’s #1 horse racing website
  2. 2. Our Brands PuntersParadise.com.au BestOdds.com.au + over 110 individual content websites rleague.com
  3. 3. Stupid shit we do
  4. 4. More stupid shit we do
  5. 5. Why AWS?
  6. 6. Normal 30 days
  7. 7. 12 month traffic
  8. 8. PuntersParadise.com.au Melbourne Cup Day 2012 •  13,350  concurrent  users   peak  load     •  550,000  uniques  in  a  few   hours     •  Almost  3  x  more  visitors   than  Flemington   racecourse   •  Residents  of  Darwin  loose   internet    
  9. 9. PuntersParadise.com.au Our year on year growth Visits   2009   572,000   2010   796,000   2011   1,731,000   2012   3,008,000   2013   3M  +  so  far  
  10. 10. Melbourne Cup Uptime History 2008 2009 2010 2011 2012 Migrated to AWS about here
  11. 11. The early days.
  12. 12. Immediate wins We killed our pets and started producing cattle Automated builds Performance issues were obvious Tech was there Survived 1st Melbourne Cup!
  13. 13. Our Basic Stack ELB Cache Servers ELB Web Servers ElastiCache RDS
  14. 14. Odds Comparison
  15. 15. Our Basic Stack ELB Cache Servers ELB Web Servers ElastiCache RDS Feed Server
  16. 16. On any given day.. 8-10 races per meeting
  17. 17. On any given day.. Average of 12 race meetings per day
  18. 18. On any given day.. + 45 sporting games
  19. 19. On any given day.. + 8 greyhound meetings x 10 races
  20. 20. On any given day.. x2 bet types (win/place or sport margin/outrights)
  21. 21. On any given day.. x12 bookmakers!
  22. 22. On any given day.. Odds can change every few seconds
  23. 23. Two problems here. Processing Delivery
  24. 24. Our first attempt while(true) { //some magic in here $market = getMarketInQueue(); //web requests to XML/JSON feeds $market->hitUpBookmakers(); //save to DB $market->saveOddsToMySQL(); }
  25. 25. How it works //this sucks. Doesn’t feel right. $market->saveOddsToMySQL();
  26. 26. Push that puppy while(true) { //some magic in here $market = getMarketInQueue(); //web requests to XML/JSON feeds $market->hitUpBookmakers(); //ahhh. That feels better $market->saveOddsToDynamoDB(); //like a boss $market->pushOddsToPusher(); }
  27. 27. Push that puppy "2081715-Average-FixedWin": { "2081715-Average-FixedWin": { "sid": 2081715, "sid": 2081715, "bt": "2081715-Average-FixedWin": { "FixedWin", "bt": "FixedWin", "b": "Average", "sid": 2081715, "2081715-Average-FixedWin": { "f": [ "b": "Average", "FixedWin", "bt": "sid": 2081715, "f": [ [ "b": "Average","FixedWin", "bt": [ 1381882761, "f": [ "b": "Average", 1381882761, 1 [ "f": [ 1 ] 1381882761, [ ] ], 1 1381882761, ], "p": null, ] 1 "p": null, "ps": null ], ] "ps": null "p": null, ], "ps": null "p": null, "ps": null From DynamoDB Pushed Message Template language
  28. 28. Our Full Stack ELB Cache Servers ELB Web Servers DynamoDB Pusher.com ElastiCache RDS Feed Servers
  29. 29. Whats next? ELB Cache Servers ELB Autoscale! Web Servers DynamoDB Pusher.com ElastiCache Autoscale! RDS Feed Servers
  30. 30. AWS Reference Architecture Too easy. Let’s just do that..
  31. 31. Autoscaling the feedserver Controller Feed Server Feed Server
  32. 32. Autoscaling the feedserver Controller Feed Server Feed Server
  33. 33. Autoscaling the feedserver Feed Server Feed Server Feed Server
  34. 34. Autoscaling the feedserver Feed Server 1 Feed Server 2 Feed Server 3
  35. 35. Autoscaling the feedserver
  36. 36. Autoscaling the feedserver
  37. 37. Autoscaling the feedserver
  38. 38. Our advice Let everything get hit by a bus Empower the worker, not the boss Utilise the AWS API as much as possible It’s easy. We can all do it.
  39. 39. One last cool thing…

×