projectpaas drupaljam 2013 rotterdam

Post on 25-Jun-2015

3.097 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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)

top related