LAMP和LEMP做Web Server到底怎么选?
LAMP
(Linux + Apache + MySQL/MariaDB + PHP) VS LEMP
(Linux + Engin X + MySQL/MariaDB + PHP-FPM)
青菜萝卜各有所爱,根据实际情况选择,不管Apache还是Nginx我在生产环境中都在用,它们也各有各自的特点,这篇文章的初衷是提供给那些爱折腾的朋友们参考,并非对任何一方有贬义,非得分出个雌雄的结论云云。
要说这两者,最核心的还是Apache的Nginx的选择,先看看
Apache和Nginx各自的优点
Nginx | Apache |
---|---|
轻量级、对内存资源消耗非常低 | 非常稳定、Bug很少 |
高并发,异步非阻塞型处理请求 | 对php的支持非常友好 |
社区活跃、高度模块化设计、模块编写简单 | 现有的模块非常非常多 |
社区观点
- Nginx适合处理静态,简单、高效;Apache适合处理动态,稳定、功能强
- Nginx是异步的,多个连接(万级别)可以对应一个进程;Apache是同步多进程模型,一个连接对应一个进程
- Nginx配置简洁;Apache复杂
- Nginx处理动态请求是鸡肋,一般动态请求要Apache去做,Nginx只适合静态和反向
性能对比
测试环境:Amazon EC2、Nginx + php-fpm、Apache Event MPM + mod_php、Wordpress
测试方法:使用压力测试工具Siege对Wordpress页面发起请求,30个并发请求持续一分钟
Title | Small EC2 instance with MPM prefork and mod_php | Small EC2 instance with event MPM and PHP-FPM |
---|---|---|
Used memory (Apache) | 525MB | 278MB (max) |
Transactions | 1606 hits | 2480 hits |
Availability | 89.92 % | 91.75 % |
Elapsed time | 59.08 secs | 59.10 secs |
Data transferred | 12.49 MB | 21.30 MB |
Response time | 0.89 secs | 0.69 secs |
Transaction rate | 27.18 trans/sec | 41.96 trans/sec |
Throughput | 0.21 MB/sec | 0.36 MB/sec |
Concurrency | 24.28 | 29.11 |
Successful transactions | 1411 | 2480 |
Failed transactions | 180 | 223 |
Longest transaction | 5.89 | 6.17 |
Shortest transaction | 0.11 | 0.11 |
相比之下,Nginx的优势还是很明显的:更少的内存开销;更高的数据处理能力;更可靠的事务处理效率
Bitnami总结:
总之,Apache event MPM模式提高了apache性能可以获得更高的并发,更少的内存。如果你要部署一个php应用你应该使用php-fpm来处理php请求。尤其是有限的512M和1G内存的服务器上,我们是强烈推荐的!
数据来源Bitnami
总结
至此,你可能对这LAMP和LEMP有了基础的认识了,大致应用方案有几下几种:
- 简单稳定(LAMP):最常见的Web Server套装,配置简单、稳定性高、对php支持好
- 性能压榨(LEMP):适用于服务器资源吃紧,内存少同时想支持超高并发
- 大型网站:使用Apache+Nginx搭配的方式,Nginx处理前端静态请求,配合Apache处理动态请求,还可以各自做集群