A little less conversation
•Maurits Lawende
•Bert Boerland
•@projectpaas
•https://www.facebook.com/projectpaas
140
Define Define PerformancePerformance
•SnelheidSnelheid
•BeschikbaarheidBeschikbaarheid
•StabiliteitStabiliteit
Non Functional Non Functional RequirementRequirement
•Meer contentMeer content
•Meer gebruikersMeer gebruikers
•Meer hitsMeer hits
•Meer codeMeer code
•...zelfde hardware...zelfde hardware
AgendaAgenda•Waarom performanceWaarom performance
•Wat is performance Wat is performance
•Wat doet ProjectPAASWat doet ProjectPAAS
•Hoe doet ProjectPAASHoe doet ProjectPAAS
•Tooling en tipsTooling en tips
•FreebeeFreebee
Waarom performance
Waarom performance
Waarom performance
Waarom performance
Waarom performance
Waarom Waarom performanceperformance
Als je een business case hebt voor een Als je een business case hebt voor een websitewebsite
ben je deze kwijt als je te langzaam ben je deze kwijt als je te langzaam bent...bent...
Touch downTouch down
•Acroniemensoep:Acroniemensoep:
•RUM, HAR, EC2,CDN, WCO, FEO, RUM, HAR, EC2,CDN, WCO, FEO, SPDYSPDY
•BS BingoBS Bingo
•Frontend, Backend, Request Frontend, Backend, Request reduction, data URI, Sprite, reduction, data URI, Sprite, closure compiler, reverse proxyclosure compiler, reverse proxy
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”
80% frontend80% frontend 20% backend20% backendPerformance is enkel100% relevant in de browserPerformance is enkel100% relevant in de browser
Bij mij is ‘ie wel Bij mij is ‘ie wel snelsnel
Want ik ben Want ik ben centrum van de centrum van de
wereldwereld
Maar we zijn toch Maar we zijn toch heel snel?heel snel?
Gecachde waterval
MetricsMetrics
•Als je het niet kan metenAls je het niet kan metenkan je het niet verbeteren.kan je het niet verbeteren.
•ProjectPAAS meet 100 metrics, ProjectPAAS meet 100 metrics, analyseert en rapporteert hieroveranalyseert en rapporteert hierover
FrontendFrontend(20%)(20%)
100% browser100% browser
MiddleMiddle(30%)(30%)
BackendBackend(50%)(50%)
Wat doet uWat doet u
• Installeer d.o/project/paas op dev Installeer d.o/project/paas op dev serverserver
•Configureer op portaal (basic auth, Configureer op portaal (basic auth, 100 populaire URL’s, tijd...)100 populaire URL’s, tijd...)
•Wacht 6 uurWacht 6 uur
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 Doen aanbeveling in PDF (plus files)files)
•Mailen u Mailen u
Tooling ‘n TipsTooling ‘n TipsTools 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
DNSDNS
NetworkNetwork
Nu.nl spot the SPOF
TC: 352 elementen72 domains
CDN / ParallelCDN / Parallel
- Vroeger meer hits- Toen dichter bij / minder latency- Nu met name anti dDOS- default cookieloos- niet default sneller
BandbreedteBandbreedte
Mbps heeft Mbps heeft nietsniets met snelheid te met snelheid te makenmaken
WebWeb
Best hit is no hitBest hit is no hit(less is more)(less is more)
SPDY (compressie, binair)Multipart responseServers dichtbij (CDN)Minder requests
Apache multipart Apache 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 teamGeen ondersteuning in Apache / NginX
Cache expiration Cache expiration junglejungle
- Cache Control- Expires- Last Modified- ETag- Age- Pragma
Gebruik geen Gebruik geen HTTPS!HTTPS!
Tuurlijk welMaar default 24-32% trager!Apache heeft standaard 28 chipher suits9 max nodigHTTPS niet in varnish zonder SSL offloader
Gebruik HTTPS!Gebruik HTTPS!
SPDYWordt standaard HTTP/2.0?In gebruik alle sites van google en facebookVereist certificaat (443) (wildcard?)Niet te troubleshooten
LoveLove
Drupal Memory Drupal Memory usageusage
drush php-eval \"echo format_size(memory_get_usage());"
52.09 MB
PHP Memory usagePHP Memory usageInteger is 4 bytes. Maar...typedef union _zvalue_value {
long lval; // long/boolsdouble dval; // doubles/floatsstruct { // 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 valuezend_uchar type; //item typezend_uchar is_ref__gc; // is a ref (&)
};
PHP Memory usagePHP Memory usage
zvalue_value: 16 byteszval: 8 bytesGarbage Collection: 8 bytes (PHP 5.4)Zend Memory Managers: 16 bytes
PHP 5.3: 40 bytesPHP 5.4: 48 bytes
PHP Memory usagePHP Memory usageBucketsBuckets
Bevat 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 dataTotaal: 1488 bytes (PHP 5.4)37.2 x meer dan in C
Drupal memory Drupal memory usageusage
- Modules / include files (± 100 tot 500 KB)- Theme registry (± 10 MB)- Locale cache (± 1 MB)- Static cache (± 1 MB)- Variables (< 100 KB)
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
Pagina moet laden Pagina 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...
CardinaliteitCardinaliteitAantal 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?
Union vs ORUnion vs OR
SELECT ... WHERE (a) OR (b)
SELECT ... WHERE (a)UNIONSELECT ... WHERE (b)
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)
Free ride?Free ride?
Eerste die nu een easter-egg vindt op projectpaas.com en hierover twittert krijgt gratis “pluto” test!
Vragen?Vragen?•Harder,
•Faster,
•Stronger,
•Better.
(our work is never over)