This presentation was the basis for a panel discussion about how to optimize Magento for maximum performance. The panel was part of the Day 1 technical breakout sessions during Magento's Imagine eCommerce Conference, held February 7-9, 2011 in Los Angeles.
2. Typical Magento Cluster
Web nodes
Database servers
Load balancers and cache servers
Some things to investigate before start:
1. Number of users
2. Hardware
3. Operating systems, hosting company
4. Session and cache storages (memcached, apc, etc.)
5. Does it make sense to use clouds or virtualization?
3. Web Nodes
Web nodes are CPU-bound, I/O is not very important
Code and images needs to be separated. Why NFS is a bad idea.
Use PHP accelerator (APC, eaccelerator, xcache)
The most important APC settings
Apache or nginx + fast CGI?
Dedicated image servers
Dedicated admin node
Session storage
4. Apache vs Nginx + FastCGI
Apache nginx + FastCGI
+Pretty standard and well tested with + Static files are served very fast
Magento
+ Clean architecture, application server
+ .htaccess support is separated from HTTP server
– Using one fork per connection for + Ability to use built-in load balancing,
static and dynamic files (if prefork mpm caching, reverse proxy and SSL
is in use) offloading
– Uses a lot of memory for useless + Nginx now hosts nearly 7.50%
functionality (20.5M) of all domains worldwide
5. Web Load Balancing Schemes
1. Nginx as HTTP server + for static files + apache as php
backends (reverse proxy scheme, mod_rpaf)
2. Nginx as HTTP server and load balancer + PHP scrips
using FastCGI protocol
3. Varnish as load balancer and proxy server for static
images, apache or nginx+fcgi as application nodes
4. Other options (hardware load balancers, ha-proxy,
lighthttpd, etc.)
6. PHP FastCGI Process Manager (PHP-FPM)
Adaptive process spawning
Basic statistics (ala Apache’s mod_status)
Advanced process management with graceful stop/start
Ability to start workers with different uid/gid/chroot
Emergency restart in case of accidental opcode cache destruction
Support for a “slowlog”
And much more...
7. Session Storage
Session handlers (file, memcache, memcached)
Best options for single server and cluster
Memcache – different clients (memcache, libmemcached)
Problems with pecl-memcache 2.xx, session locking
Other notes (replication)
8. MySQL Server
Setup replication
Use MySQL 5.1 + INNODB HA Plugin or 5.5 or Percona XtraDB server
Use row based based replication (5.1+ only)
Use big enough innodb pool
Storage – different drives for the binary log and data, investigate
Solid State Drive (SSD)
Do not forget to enable slow query log
Setup realtime monitoring tools (mytop, innotop) before server goes
down
Configure slave in Magento local.xml
Do not use mysqldump on production servers
9. Monitoring
It is very important to setup monitoring before launching
the web service
Nagios and CACTI – a perfect open source solution
Services to monitor
Apache (traffic, availability)
MySQL (requests per count, replication, type of the requests,
cache statistic, number of active connections, time of the longest reqest)
Memcached (eviction count, hit rate)
System: interface speed, I/O stat, CPU usage, etc.
ATOP – powerful SA replacement, very recommended
NFS shares if used
More sensors...
10. Conclusion
Most of the recommendations for Magento are typical for
any high-loaded AMP project
Web is changing fast. It is recommended to investigate new
technologies and use modern tools
It does make a sense to setup all monitoring tools before
any problems and do regular system audit
Magento is always working to improve the speed and
provide new options for safe and reliable hosting