php环境一般性web服务器搭建选择

一、web服务器的选择

  1. Apache
  2. nginx
  3. iis

Apache简介(百度百科

        Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python解释器编译到服务器中。

Nginx简介百度百科

Nginx ("engine x") 是一个高性能的HTTP反向代理服务器,也是一个IMAP/POP3/SMTP服务器Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款 轻量级Web 服务器/ 反向代理服务器及 电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少, 并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、 京东新浪网易腾讯淘宝等。

iis简介(百度百科)

        iis是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。最初是Windows NT版本的可选包,随后内置在Windows 2000、Windows XP Professional和Windows Server 2003一起发行,但在Windows XP Home版本上并没有IIS。IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。

优缺点

Nginx:

轻量级,同样起web 服务,比apache 占用更少的内存及资源

抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

高度模块化的设计,编写模块相对简单

社区活跃,各种高性能模块出品迅速啊

严格来说不是Nginx在跑PHP,Nginx只做转发给php-fpm,是php-fpm在维持PHP跑…
php-fpm现在稳定性算可以了,但还是无法释放内存,所以一般的配置是500次后子进程不接收任务,本身任务完成自己结束掉,另开个新的继续跑,这个任务就是php-fpm在管理…

IIS:

图型管理界面,管理方便
IIS和Apache就是作为模块跑,释放内存什么的自动的,但IIS那货跑PHP这种东西还是不太靠谱,这是相对Nginx和Apache来说,所以别考虑IIS了…

Apache:

rewrite ,比nginx 的rewrite 强大

模块超多,基本想到的都可以找到

少bug ,nginx 的bug 相对较多

超稳定

Apache性能挺好,以前一直用。但现在Nginx的发展很NB了,促进了php-fpm的发展也很完善稳定了,php-fpm是大家都力捧的东西,不用考虑作为模块跑的兼容之类(很多PHP扩展偶尔会出问题),未来是主流PHP的运行方式,占用内存也小。Apache的太庞大,不解决一些痛点导致Nginx的崛起。比如我关心的Apache下的限速只有cband还比较好用,但是第三方做的,虽然也不错,但经常这个版本不支持,那个版本支持。而Nginx此类功能已经作为基本功能自带了,而且非常强大…

Win下:
如果Win平台下就别用Nginx了,因为Win下没php-fpm管理PHP进程,所以只能用php-cgi,而php-cgi没有进程管理,所以偶尔出现错误进程死掉你的PHP就挂了,就要手工启动进程。你也可以自己写个监测程序来管理,这一般维护服务器的人也没法做到的。而Linux/BSD下php-fpm可以设定好参数自动启动几个进程,请求多少次淘汰并重启新进程,另外还有好多种其他方式管理PHP进程,一切都是php-fpm自动进行管理的。至于Win下Nginx使用原生Win32 API,用select实现,而Win下比较先进的技术I/O Completion Ports据我所知有第三方做过,但官方Nginx貌似还没有用IOCP,所以性能肯定没有Linux的epoll和BSD的kqueue好。其实感觉Win搭服务器大部分就是个企业站,没多少访问量,如果海量访问大部分都用Linux/BSD来做集群了。关键点是Win下没有php-fpm,所以Win下就不要用Nginx了…
其实关于不推荐用Win服务器还有一点:你的Win服务器是正版吗?可能大部分服务器都不是,但万一遇到得罪别人被举报,还有大公司上市之类的,被查的可能性还是有的…

Win下我本机开发测试一直用Apache,因为Apache用了10多年,熟悉Apache,也稳定,作为服务来跑基本不用管,开发机用Apache更加省事,你对IIS熟悉或者有情怀可用IIS,否则推荐用Apache,基本不会出啥问题。运行起来也非常稳定。但我现在Win开发机测试用Nginx+php-cgi,哈哈,保持统一,我测试又没事,偶尔一个月出现一两次调试PHP代码的时候PHP进程死掉,进服务启动下就好。Win下生产环境你别用Nginx,用Apache吧…

结论:

服务器如果用asp/.net就用Win,否则尽量要用Linux或BSD,如果需要性能最大化一定要用Linux或BSD…

Win下首推Apache+PHP,其次IIS+PHP…

Linux或BSD下首推用Nginx+PHP,其次用Apache+PHP…

PHP推荐用PHP7,爽就一个字,理由就不说了,到处都有介绍升级到PHP7的爽…
 
参考文献
 
二、数据库选择
  1. mysql
  2. Oracle
  3. SQL Server

mysql简介(百度百科)

        MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

Oracle简介(百度百科)

        Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。

SQL Server(百度百科

        SQL Server 是一个关系数据库管理系统。它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2版本。在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。Sybase 则较专注于SQL Server在UNⅨ操作系统上的应用。

关系型数据库对比

MySql数据库 :

优点: 1.支持5000万条记录的数据仓库

2.适应于所有的平台

3.是开源软件,版本更新较快

4.性能很出色。纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式MyISAM。MyISAM数据库 与磁盘非常地兼容而不占用过多的CPU和内存。MySQL可以运行于Windows 系统而不会发生冲突,在UNIX或类似UNIX系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。因为MySQL在内部里很多时候都使用64位的整数处理。

5.价格便宜

缺点: 缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能

 

 

MsSqlserver数据库:

优点: 1.真正的客户机/服务器体系结构

2.图形化的用户界面,使系统管理和数据库管理更加直观、简单

3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地

4.与WinNT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等,SQL Server也可以很好地与Microsoft BackOffice产品集成。

5.有很好的伸缩性,可以跨平台使用。

6.提供数据仓库功能,这个功能只在Oracle和其他 昂贵的DBMS中才有。

7.处理速度方面比Oracle快一些,和两者的协议有关.

 

Oracle数据库:

优点: 1.Oracle的稳定性要比Sql server好。

2.Oracle在导数据工具sqlload.exe功能比Sqlserver的Bcp功能强大,Oracle可以按照条件把文本文件数据导入.

3.Oracle的安全机制比Sql server好。

4.Sql server的易用性和友好性方面要比Oracle好。

5.在处理大数据方面Oracle会更稳定一些。

6.Sql Server在数据导出方面功能更强一些。

缺点: 价格昂贵

参考文献
 
其他类型数据库
Redis( 百度百科
        Redis是一个开源的使用ANSI  C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
memcached( 百度百科
        Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的 hashmap。其 守护进程(daemon )是用 C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
区别

1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;

2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;

3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;

4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10;

5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从;

6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化);

7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;

8、Redis支持数据的备份,即master-slave模式的数据备份;

9、应用场景不一样:Redis出来作为NoSQL数据库使用外,还能用做消息队列、数据堆栈和数据缓存等;Memcached适合于缓存SQL语句、数据集、用户临时性数据、延迟查询数据和session等。

 

 

个人总结一下,有持久化需求或者对数据结构和处理有高级要求的应用,选择redis,其他简单的key/value存储,选择memcache。

参考文献
redis和memcached的区别(总结)  http://www.cnblogs.com/timothy-lai/p/5786502.html
memcached 和 redis 的区别与选择  http://www.cnblogs.com/xw2169/p/6017146.html

猜你喜欢

转载自nbczw8750.iteye.com/blog/2374191