Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite...
description
Transcript of Подталкиваем PHP к пределу возможностей, Michael Armstrong (lite...
Pushing PHP to the Limit:
Web Server PHP Performance Comparisons
LiteSpeed vs. Apache vs. NGINX
1.Overview of technology discussed2.Benchmarks3.Different PHP setups in LiteSpeed
Web Server (LSAPI)4.Questions
Breakdown of the presentation
Web Servers
● Apache (httpd)● NGINX● LiteSpeed Web Server (LSWS)● OpenLiteSpeed
Web servers (discussed)
OpenLiteSpeed:● Uses OpenLiteSpeed-native configs exclusively● Free and open source
LiteSpeed Web Server:● Can use Apache configs (control panel
compatible)● Paid license system
Differences between OpenLiteSpeed and LSWS
● Microsoft IIS● Tomcat● Lighty (lighttpd)● Cherokee● Others
Why not?IIS is only for Windows and nobody uses the rest of these. (Less than 0.5% of sites.)
Web servers (not discussed)
PHP
Because it is far and away the most used scripting language on the Internet.
(82% of sites according to the latest W3Techs survey.)
Why PHP?
● PHP is a scripting language● Web servers do not process PHP
directly ● PHP is processed by a PHP engine on
the backend● Web servers use a variety of SAPIs
to communicate with the PHP engine
Web server-PHP interaction
SAPIsServer Application Programming Interfaces
An interface for communicating with an application (like the PHP engine).
What is an SAPI?
1.mod_php (Apache)2.CGI (Apache)3.FCGI (Apache, NGINX, and LSWS)4.LSAPI (LSWS and Apache*)
SAPIs for PHP (discussed)
* mod_lsapi for Apache available only to CloudLinux users.
Running scripts as a separate user (often one user per virtual host).
suEXEC?
● Runs PHP as a module embedded in Apache processes
● Requires no interprocess communication
● Can use persistent processes● Fastest Apache implementation of
PHP● All scripts run as nobody● Requires Apache prefork
mod_php (DSO)
● Used by Apache● PHP run through external CGI
module● Creates a new process for each
request (lots of overhead)● Slow and unscalable● Can run suEXEC
CGI
● Used by Apache and NGINX● Runs PHP as an external instance● Created to be faster than CGI (less
overhead)● Persistent processes handle many
requests instead of creating a new process each time
● Saves CPU, but persistent processes can waste RAM
● Can run suEXEC
FCGI (FastCGI)
● Created because none of the previous SAPIs gave the performance and control we wanted
● External instance● Similar layout to FCGI, but optimized● Can run suEXEC
LSAPI (LiteSpeed SAPI)
● Utilizes web server request parsing results for less overhead
● Persistent processes dynamically forked to save resources
● Different modes of process handling for different needs
● Allows per-directory configuration overrides
LSAPI Optimizations
The Benchmarks
1. LSWS vs. NGINX for small PHP scripts (new and unreleased)
2. LSWS vs. OpenLiteSpeed vs. Apache vs. NGINX for small PHP scripts (previously published)
3. LSWS vs. Apache for WordPress (presented by cPanel at cPanel Conference 2014, measured speed and resource usage)
Three benchmarks
Benchmark 1LSWS vs. NGINX for small PHP scripts (new)
Server:● Intel Xeon E5-1620 Quad Core @ 3.60GHz ● 8GB RAM
Configs mostly defaults with small amount of optimization for NGINX. Full configs will be released on our site.
AB:ab_new -n 50000 -c 100
Setup
Benchmark 1 results (no keep alive)
Benchmark 1 results (keep alive)
LSWS outperformed NGINX:● by 26% with keep alive connections
off● by 91% with keep alive connections
on
Benchmark 1 takeaways
Benchmark 2LSWS vs. OpenLiteSpeed vs. Apache vs. NGINX for small PHP scripts (previously
published)
Server:● Intel Xeon E5-1620 Quad Core @ 3.60GHz
(limited to 1 core)● 8GB RAM
Configs mostly defaults. Full configs can be found on our site.
AB:ab_new -n 50000 -c 100
Setup
Benchmark 2 results(no keep alive)
Benchmark 2 results (keep alive)
● LSWS and OpenLiteSpeed outperformed all others
● Difference between LSWS and NGINX preserved
● Apache 2.2 with mod_PHP next fastest (about 50% slower than LSWS)
● LSAPI makes a 15-20% difference● All web servers did better with keep-alive
on
Benchmark 2 takeaways
Benchmark 3LSWS vs. Apache for WordPress
(courtesy of Tristan Wallace, cPanel)
VPS:● 1 core● 1GB RAM
Dedicated server:● 4 cores● 8GB RAM
Setup
● Speed difference shown again, even with other applications
● Resource advantage of event-driven architecture (VPSs with Apache couldn't even handle 50 concurrent connections)
● Resource advantage of LSAPI
Benchmark 3 takeaways
Benchmark WrapupWhat have we learned?
● Basically, LSWS and OpenLiteSpeed beat all comers by at least 25%
● The difference was most pronounced vs. Apache setups that use suEXEC
What happened?
● LSAPI is optimized● LSWS is built for performance and
geared especially for performance with LSAPI
Why?
If you wish to debate these benchmarks, please contact me or post to our forum. We are happy to try different settings if there is good reason to believe they will make a difference.
Forum: http://www.litespeedtech.com/support/forum/
Debate?
LSAPIWhat can you do with it?
● API for communication with an application backend
● Open source● Designed specifically for LSWS (for better
integration)● Highly optimized by default● Offers three different modes of handling PHP
processes for different needs● Allows for high-performance suEXEC setups● Available for PHP, Ruby, and Python
LiteSpeed Server API
http://www.litespeedtech.com/products/litespeed-sapi/php
1.Worker2.Daemon3.ProcessGroup
LSAPI PHP Modes
All can be suEXEC
● Default mode● Similar to PHP with CGI● New process each time PHP is
needed● Creating new processes has
overhead● Can save resources because there
are no more processes than needed● No effective suEXEC opcode caching
Worker Mode
● Forks all processes from a persistent parent process (even in suEXEC)
● Spawning child processes is faster than creating new processes
● Allows for somewhat more effective suEXEC opcode caching
Daemon Mode
WebAdmin console > Configuration > External App > your LSPHP external application:
1.Set Auto Start to "Yes".2.Set Run On Start Up to "suEXEC
Daemon".
Setting up Daemon Mode
● Similar to PHP-FPM pools (except easy to set up)● Really only for suEXEC settings● One parent process for each user● Parent process spawns child processes on
demand● Spawning child processes is faster than creating
new processes● Allows for per-user opcode caching in a suEXEC
setting● Extra parent processes consume extra resources● Not available for OpenLiteSpeed
ProcessGroup Mode
Add the following to an Apache configuration file:
<IfModule LiteSpeed>LSPHP_ProcessGroup onLSPHP_Workers 15</IfModule>
Setting up PHP ProcessGroup
● Event-driven PHP processing● HHVM integration
Future improvements to LSAPI
Conclusions
● LSWS and OpenLiteSpeed serve PHP 25-100% faster than other major web servers
● Partly due to LSAPI's optimization● Partly due to LSWS and
OpenLiteSpeed's optimized integration with LSAPI
Conclusions
● LSAPI = faster PHP● LSAPI's suEXEC implementation
allows for speed and security● LSAPI modes and config overrides
allow easy configuration for different uses
● Opcode caching even with suEXEC
Conclusions (LSAPI)