High-Performance Websites - PHPUG and WebPerformanceUG
Arne Blankerts, Stefan Priebsch - High-Performance Websites
This talk contains information about architecture.
Classical Architecture
When have done this for quite a while.
Browser->WebServer->PHP-Database
This works best in the past. General solution was to add more hardware and that leads to more errors.
- monolithic architecture
- normalized data (in database)
- pull-principle (browser is build per request)
- full page cache is bad
- edge site include (for varnish/ESI) is also not the best solution
We are fast when:
- no real workload per request
- everything from memory
- denomalized data
- snippets
How Often Does Data Change (From Rare To Often)?
Based on the example of a shop system.
- catalog
- product information
- price
- availability
Who Changes Data?
- editor
- product manager
- receipt of goods / outgoing goods
New Architecture (CQRS-Architecture)
- images and static content is deliverd by static content webserver
- only dynamic part is done by php
- snippets are deliverd, not full pages
PHP->Key-Value-Store->Backend-Process->Database
or
PHP->Web-Service->Database
Benefit of key-value-store (for example redis) is, that the database itself can die and the only thing that happens is, that the entries are becoming obsolete.
But What About Filternavigation?
Use a searchengine that returns simple a collection of product keys. Use this product keys and ask the key value store to fetch product data.
But What About Personalization?
- use snippets with variables and default values
- fetch this snippet in the key value store
- thanks to "time to death" feature provided by many key-value-stores, you can easily define "special offers" per day and so on
Nice meetup, incredible how many people are attending already.