Successfully reported this slideshow.
Your SlideShare is downloading. ×

Projectpaas drupaljam 2013 rotterdam

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 64 Ad

More Related Content

Similar to Projectpaas drupaljam 2013 rotterdam (20)

Advertisement

Projectpaas drupaljam 2013 rotterdam

  1. 1. A little less conversation • Maurits Lawende • Bert Boerland • @projectpaas • https://www.facebook.com/projectpaas 140
  2. 2. Define PerformanceDefine Performance • SnelheidSnelheid • BeschikbaarheidBeschikbaarheid • StabiliteitStabiliteit
  3. 3. Non FunctionalNon Functional RequirementRequirement •Meer contentMeer content •Meer gebruikersMeer gebruikers •Meer hitsMeer hits •Meer codeMeer code •...zelfde hardware...zelfde hardware
  4. 4. AgendaAgenda • Waarom performanceWaarom performance • Wat is performanceWat is performance • Wat doet ProjectPAASWat doet ProjectPAAS • Hoe doet ProjectPAASHoe doet ProjectPAAS • Tooling en tipsTooling en tips • FreebeeFreebee
  5. 5. Waarom performance
  6. 6. Waarom performance
  7. 7. Waarom performance
  8. 8. Waarom performance
  9. 9. Waarom performance
  10. 10. Waarom performanceWaarom performance Als je een business case hebt voor een websiteAls je een business case hebt voor een website ben je deze kwijt als je te langzaam bent...ben je deze kwijt als je te langzaam bent...
  11. 11. Touch downTouch down • Acroniemensoep:Acroniemensoep: • RUM, HAR, EC2,CDN, WCO, FEO,RUM, HAR, EC2,CDN, WCO, FEO, SPDYSPDY • BS BingoBS Bingo • Frontend, Backend, Request reduction,Frontend, Backend, Request reduction, data URI, Sprite, closure compiler,data URI, Sprite, closure compiler, reverse proxyreverse proxy
  12. 12. Time to glassTime to glass • 0,1 seconde, voelt als instant0,1 seconde, voelt als instant • 1.0 seconde, in de flow1.0 seconde, in de flow • 10,0 seconde, aandachtslimiet10,0 seconde, aandachtslimiet • ““perceptie van snelheid”perceptie van snelheid”
  13. 13. 80% frontend80% frontend 20% backend20% backendPerformance is enkel100% relevant in de browserPerformance is enkel100% relevant in de browser
  14. 14. Bij mij is ‘ie wel snelBij mij is ‘ie wel snel
  15. 15. Want ik ben centrumWant ik ben centrum van de wereldvan de wereld
  16. 16. Maar we zijn toch heelMaar we zijn toch heel snel?snel?
  17. 17. Gecachde waterval
  18. 18. MetricsMetrics • Als je het niet kan metenAls je het niet kan meten kan je het niet verbeteren.kan je het niet verbeteren. • ProjectPAAS meet 100 metrics, analyseertProjectPAAS meet 100 metrics, analyseert en rapporteert hieroveren rapporteert hierover
  19. 19. FrontendFrontend (20%)(20%) 100% browser100% browser MiddleMiddle (30%)(30%) BackendBackend (50%)(50%)
  20. 20. Wat doet uWat doet u • Installeer d.o/project/paas op dev serverInstalleer d.o/project/paas op dev server • Configureer op portaal (basic auth, 100Configureer op portaal (basic auth, 100 populaire URL’s, tijd...)populaire URL’s, tijd...) • Wacht 6 uurWacht 6 uur
  21. 21. Wat doen wij?Wat doen wij? • Controlen module werking / keyControlen module werking / key • Starten EC2 instantie(s)Starten EC2 instantie(s) • Meten 100+ metrics (met / zonder,Meten 100+ metrics (met / zonder, screenshots, latency....)screenshots, latency....) • Analyseren tegen baselineAnalyseren tegen baseline • Doen aanbeveling in PDF (plus files)Doen aanbeveling in PDF (plus files) • Mailen uMailen u
  22. 22. Tooling ‘n TipsTooling ‘n Tips Tools voor infrastructuur - ec2 - lamp - python - nodejs - java - drupal 7 - latex - twig - graphviz - flot (graphs) Tools voor metingen en analyse - custom client module - phantom - custom proxy in python - kyotocabinet (storage voor proxy) - R project (statistics) - imagemagick - pngcrush - optipng - csstidy - openssl - libjpeg - cairo (graphics library) - closure compiler - ab - sabberworm (css analyse) - yslow - shadow
  23. 23. DNSDNS NetworkNetwork
  24. 24. Nu.nl spot the SPOF
  25. 25. TC: 352 elementen 72 domains 72 domains
  26. 26. CDN / ParallelCDN / Parallel - Vroeger meer hits - Toen dichter bij / minder latency - Nu met name anti dDOS - default cookieloos - niet default sneller
  27. 27. BandbreedteBandbreedte Mbps heeftMbps heeft nietsniets met snelheid te makenmet snelheid te maken
  28. 28. WebWeb
  29. 29. Best hit is no hitBest hit is no hit (less is more)(less is more) (less is more)(less is more) SPDY (compressie, binair) Multipart response Servers dichtbij (CDN) Minder requests
  30. 30. Apache multipartApache multipart responseresponse Content-Type: multipart/mixed; boundary="..." Onderseund in recente versies FF, Chrome + iE < 7 Niet hoe HTTP werkt, 'multipart requests' bestaan niet (vraag A op, geef ABC terug) 0.000184% usage volgens Mozilla team Geen ondersteuning in Apache / NginX
  31. 31. Cache expiration jungleCache expiration jungle - Cache Control - Expires - Last Modified - ETag - Age - Pragma
  32. 32. Gebruik geen HTTPS!Gebruik geen HTTPS! Tuurlijk wel Maar default 24-32% trager! Apache heeft standaard 28 chipher suits 9 max nodig HTTPS niet in varnish zonder SSL offloader
  33. 33. Gebruik HTTPS!Gebruik HTTPS! SPDY Wordt standaard HTTP/2.0? In gebruik alle sites van google en facebook Vereist certificaat (443) (wildcard?) Niet te troubleshooten
  34. 34. LoveLove
  35. 35. Drupal Memory usageDrupal Memory usage drush php-eval "echo format_size(memory_get_usage());" 52.09 MB
  36. 36. PHP Memory usagePHP Memory usage Integer is 4 bytes. Maar... typedef union _zvalue_value { long lval; // long/bools double dval; // doubles/floats struct { // strings char *val; // The string int len; // length } str; HashTable *ht; // arrays (hash tables) zend_object_value obj; //objects } zvalue_value; struct _zval_struct { zvalue_value value; zend_uint refcount__gc; // for the GC, refs to this value zend_uchar type; //item type zend_uchar is_ref__gc; // is a ref (&) };
  37. 37. PHP Memory usagePHP Memory usage zvalue_value: 16 bytes zval: 8 bytes Garbage Collection: 8 bytes (PHP 5.4) Zend Memory Managers: 16 bytes PHP 5.3: 40 bytes PHP 5.4: 48 bytes
  38. 38. PHP Memory usagePHP Memory usage BucketsBuckets BucketsBucketsBevat de key, pointers naar data, vorige, volgende, eerste, laatste element.. Totaal: 96 bytes Array van 10 int's heeft 40 bytes data. 1 zval met 10 buckets en 10 zvals voor data Totaal: 1488 bytes (PHP 5.4) 37.2 x meer dan in C
  39. 39. Drupal memory usageDrupal memory usage - Modules / include files (± 100 tot 500 KB) - Theme registry (± 10 MB) - Locale cache (± 1 MB) - Static cache (± 1 MB) - Variables (< 100 KB)
  40. 40. MySQL is slimMySQL is slim Relationele databases: DBMS bepaald hoe de data het beste opgehaald kan worden DBMS weet niet hoe we de data gebruiken DOM
  41. 41. Pagina moet ladenPagina moet laden binnen 2 secondebinnen 2 seconde • MySQL zal slow query af makenMySQL zal slow query af maken • Ook als deze 2 uur duurt...Ook als deze 2 uur duurt...
  42. 42. CardinaliteitCardinaliteit Aantal verschillende waarden in een kolom. Indexen worden meestal niet gebruikt wanneer cardinaliteit laag is (bijv. 10% van aantal rijen). Gaat uit van gelijke verdeling! InnoDB doet analyse op selectivity: hoeveel rijen blijven er over na filtering?
  43. 43. Union vs ORUnion vs OR SELECT ... WHERE (a) OR (b) SELECT ... WHERE (a) UNION SELECT ... WHERE (b)
  44. 44. TrickyTricky - Grootste deel van de filtering in joined tables - Order by op joined tables - Order by i.c.m. seq. scan - Joins op kolom zonder index (of mogelijkheid tot het gebruik daarvan)
  45. 45. Free ride?Free ride? Eerste die nu een easter-egg vindt op projectpaas.com en hierover twittert krijgt gratis “pluto” test!
  46. 46. Vragen?Vragen? • Harder, • Faster, • Stronger, • Better. (our work is never over)

×