Architecting high traffic websites with rapid changes in data on AWS

551 views
383 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
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
551
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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…

×