Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| schaalbare-website [2017/04/28 16:54] – [Do's en dont's voor een schaalbare website] matthias | schaalbare-website [2026/05/27 14:01] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ===== Do's en dont's voor een schaalbare website ===== | ===== Do's en dont's voor een schaalbare website ===== | ||
| + | \\ | ||
| + | {{: | ||
| + | \\ | ||
| Do's | Do's | ||
| Line 8: | Line 10: | ||
| - Voor grote files zoals video' | - Voor grote files zoals video' | ||
| - Gebruik voor de front-end een performance benchmark-tool | - Gebruik voor de front-end een performance benchmark-tool | ||
| - | - Gebruik optimalisaties voor de backend | + | |
| + | | ||
| Line 15: | Line 18: | ||
| - Uitgaande calls naar andere websites | - Uitgaande calls naar andere websites | ||
| - de applicatieserver alle inkomende requests af laten handelen. | - de applicatieserver alle inkomende requests af laten handelen. | ||
| - | |||
| - | Lees vooral eerst het verhaaltje over | ||
| - | [[.: | ||
| + | Voor de liefhebbers hebben wij een wat meer in-depth uitleg over [[.: | ||
| + | \\ | ||
| + | Specifiek voor Wordpress heeft Nginx een [[https:// | ||
| ==== (front-)Proxies ==== | ==== (front-)Proxies ==== | ||
| Line 26: | Line 29: | ||
| Achter deze front proxies bevinden zich de applicatie servers (workers), | Achter deze front proxies bevinden zich de applicatie servers (workers), | ||
| hier draaien de ruby, php, java, applicaties. | hier draaien de ruby, php, java, applicaties. | ||
| - | __De proxies kunnen statische content (plaatjes | + | __De proxies kunnen statische content (plaatjes, css etc.) direct zelf uitserveren__; |
| zaken die ze niet zelf af kunnen handelen moeten ze doorzetten naar de | zaken die ze niet zelf af kunnen handelen moeten ze doorzetten naar de | ||
| workers/ | workers/ | ||
| - | geoptimaliseerd | + | geschikt |
| __maar ze zijn niet ingericht om veel verbindingen tegelijkertijd open te hebben | __maar ze zijn niet ingericht om veel verbindingen tegelijkertijd open te hebben | ||
| - | staan.__ | + | staan.__ |
| \\ \\ | \\ \\ | ||
| Line 42: | Line 45: | ||
| \\ \\ | \\ \\ | ||
| **Optimale Applicatieserver/ | **Optimale Applicatieserver/ | ||
| - | Als er werk door een worker gedaan moet worden is het belangrijk dat deze dit zo snel mogelijk doet. Want het aantal | + | Als er werk door een worker gedaan moet worden is het belangrijk dat deze dit zo snel mogelijk doet. Want het aantal |
| workers is maar beperkt; hoe korter een webserver slot in een worker bezet wordt gehouden voor het afhandelen van een request, hoe meer requests een | workers is maar beperkt; hoe korter een webserver slot in een worker bezet wordt gehouden voor het afhandelen van een request, hoe meer requests een | ||
| worker per seconde kan afhandelen. Zolang een worker geen externe afhankelijkheden heeft, is de snelheid waarmee deze requests kan afhandelen | worker per seconde kan afhandelen. Zolang een worker geen externe afhankelijkheden heeft, is de snelheid waarmee deze requests kan afhandelen | ||
| puur beperkt door de CPU snelheid van het systeem waar de worker op draait. Als een worker request moet doen naar een database of andere website is die ' | puur beperkt door de CPU snelheid van het systeem waar de worker op draait. Als een worker request moet doen naar een database of andere website is die ' | ||
| - | **Database queries.** | + | ===== Dont's ===== |
| + | |||
| + | **Inefficiente | ||
| Stel bijvoorbeeld dat een worker een query naar een database doet. Op zich heel | Stel bijvoorbeeld dat een worker een query naar een database doet. Op zich heel | ||
| normaal natuurlijk. __Maar terwijl de worker op antwoord van de | normaal natuurlijk. __Maar terwijl de worker op antwoord van de | ||
| Line 83: | Line 88: | ||
| Hoe valt dit nou allemaal te voorkomen? | Hoe valt dit nou allemaal te voorkomen? | ||
| + | |||
| + | ===== Do's ===== | ||
| === Site statisch maken === | === Site statisch maken === | ||
| Door zoveel mogelijk werk aan de proxies te laten wordt al een hoop gewonnen. | Door zoveel mogelijk werk aan de proxies te laten wordt al een hoop gewonnen. | ||
| Zorg ervoor dat plaatjes direct door de proxies uitgeserveerd kunnen worden, | Zorg ervoor dat plaatjes direct door de proxies uitgeserveerd kunnen worden, | ||
| - | zonder dat dit door HTTP hoeft. | + | zonder dat dit door PHP hoeft. |
| Idem voor platte html, stylesheets e.d. | Idem voor platte html, stylesheets e.d. | ||
| + | Daarom zorgen wij er standaard voor dat files met de extensies *.gif, *.html, *.htm, *.jpg, *.png, *.css, *.js, *.txt, *.swd, *.flv, *.xml, *.ico, *.pdf, *.gz, *.mp3 door de proxy uitgeserveerd worden. | ||
| + | |||
| + | === Data pre-renderen === | ||
| + | Data die wel wijzigt, maar voor alle bezoekers hetzelfde is kan | ||
| + | ge-pre-rendered worden. Dat wil zeggen dat er een achtergrondproces | ||
| + | ("een cronjob" | ||
| + | rendered en ergens neerzet waar deze als statische data uitgeserveerd | ||
| + | kan worden. Op die manier hoeft deze data niet voor elke indiciduele | ||
| + | bezoeker apart gerendered te worden, wat veel belasting scheelt. | ||
| === File Caching + herschrijfregels === | === File Caching + herschrijfregels === | ||
| Line 118: | Line 134: | ||
| Goed werkende HTTP Caching is mogelijk vanaf apache-2.4, maar het is onze ervaring dat Nginx de caching nog effectiever afhandelt. | Goed werkende HTTP Caching is mogelijk vanaf apache-2.4, maar het is onze ervaring dat Nginx de caching nog effectiever afhandelt. | ||
| * De [[# | * De [[# | ||
| + | |||
| + | === Gebruik voor de front-end een performance benchmark-tool === | ||
| + | |||
| + | Op [[https:// | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | Belangrijke kanttekeningen voor deze tools: alleen de frontend performance wordt gemeten; niet de backend. De schaalbaarheid wordt hier niet mee gemeten. Sterker nog er worden aanbevelingen gedaan die de schaalbaarheid verslechteren zoals mod_gzip/ | ||
| + | |||
| + | === Gebruik optimalisaties voor je CMS === | ||
| + | Bijvoorbeeld: | ||
| + | * [[https:// | ||
| + | Er zijn voor veel populaire CMS'en modules beschikbaar die plaatjes kunnen optimaliseren of resizen, caching kunnen doen en andere optimalisaties. | ||
| === Memcached === | === Memcached === | ||
| Line 123: | Line 154: | ||
| zeer geschikt om zware database queries in te cachen, om zo de load | zeer geschikt om zware database queries in te cachen, om zo de load | ||
| op de database te verminderen en daarmee de workers sneller te maken. | op de database te verminderen en daarmee de workers sneller te maken. | ||
| + | |||