站点拜访功能与Web服务器功能优化思路,本文所举例是一个小型的 Web 站点,部门数据系假设,如有类同,纯属偶合,仅起抛砖引玉之用。在实际任务中,假如碰到大站点,你可以参考此处的解析,改动优化方案。
一 站点简介一个社区论坛站点,使用 Discuz! 论坛程序构建,该程序使用主流的 PHP + MySQL 构造。
网站目前有近 5 万注册用户,绝大多数是内地的用户,活泼用户数在一半左右,每日平均 PV 在 15~20 万,独立拜访 IP 数在 8000 左右。
二 Web 服务器功能优化需求网站现部署在国外的服务器,租用虚拟主机来运营,由于拜访量对照大,所以常常会收到虚拟主机服务商的流量很大的告诉,要求管理下拜访量。另外,虚拟主机的服务器在美国,没有在内地租用虚拟主机的原因是内地网站在存案方面非常繁琐,在网站一开端运营时数据量和拜访量都对照小,所以对功能要求不高,数据量小,所以服务器在查询处置数据时速度对照快,也让人感到拜访速度不慢,现在跟着数据量和拜访量的不断上升,拜访速度已显著降落,到了需要改良拜访功能的时候了。
基于目前该社区网站的场合,提出的优化需求是,内地拜访速度需要提升一倍,目前首页加载时间需要 40 秒左右,但愿优化后能在 20 秒以内将首页加载完成。
另外提出网站数据能够每日自动备份一次,备份数据保存一个月的,以便随时恢复。
三 功能优化方案依据其网站的现状和优化需求,交融自己的经历,加上谷歌的搜索,同时与网站主不断确定沟通,终极得到以下功能优化方案:
1、由虚拟主机部署改为独立服务器部署虚拟主机受限对照多,无法自己自定义配置 Web 服务器,无法配置 PHP 动态缓存,而且独立服务器可以独享内存、处置器资源,不再受虚拟主机商对每个虚拟主机用户的内存和处置器资源占用限制。处置器资源和内存资源,对承受更多并发拜访有直接功能提升功效。
独立服务器,我们选用 Linode 2048 型号,2G 内存,4 核处置器(Linode 所有 VPS 都是四核处置器),80G 硬盘空间,800G 网络流量。
2、由 Windos 操纵系统改为 Linux 操纵系统网站采用的是 PHP + MySQL 程序,PHP 在 Windos 下的功能,受限于 IIS 需要通过 ISAPI 格式调用 PHP,所以功能不如 Linux 下 Apache 直接通过 PHP 模块辩白 PHP,更不如 Nginx 与 PHP-FPM 的功能,既然采用了独立服务器,操纵系统也可以自己确认,Linux 系统我们选用了认识的 Ubuntu Linux Server 1004(一年前还没有 1204),^-^。
3、Web 服务器使用 Nginx,而不采用 Apache选用 Nginx 而不用 Apache 的原因非常直接和干脆,由于站点里有许多静态的附件文件,在处置静态内容上,Nginx 功能是 Apache 的差不多 10 倍。
在 PHP 辩白和伪静态条例方面,Apache 要比 Nginx 强,但这不阴碍我们抛却它,为缓解这一点,我们在后面对 PHP 进行了动态缓存。
对 PHP 查询进举动态缓存,采用 eAccelerator 这个加速器
PHP 加速器是一个为了提高 PHP 执行效率,从而缓存起 PHP 的操纵码,这样 PHP 后面执行就不用分析转换了,可以直接调用 PHP 操纵码,这样速度上就提高了不少。
eAccelerator 是一个开源 PHP 加速器,优化和动态内容缓存,提高了 PHP 脚本的缓存功能,使得 PHP 脚本在编译的状态下,对服务器的开销几乎彻底打消。 它还有对脚本起优化作用,以加快其执行效率。使得的 PHP 程序代码执效率能提高 1-10 倍,这个加速还是非常显著的。
具体地,我们计划对 eAccelerator 进行以下设置优化:
缓存采用物理内存来进行,不采用磁盘来缓存。我们知道内存的读写功能是硬盘的 N 倍,所以在内存资源可以规划场合下,强烈建议采用内存来保留 eAccelerator 的缓存内容。
缓存大小设置为 32MB,这个值是操纵系统默认支持最大的缓存容量。固然可以通过改动配置文件来加大这个值,但我们觉得没有必须,所以就抛却了。
4、Nginx 功能优化选用了 Nginx,固然它的功能很好,但我们仍然需要对它进行功能优化,在这个案例中,我们做了以下优化:
采用 8 个进程,每个进程大约需要 20M 内存耗损,这里一共采用了 150M 左右的内存。
充裕采用主服务器的 CPU 内核:四核,采用 CPU 粘性配置选项(orker_cpu_affinity),每核处置器分配两个进程。
开启 gzip 压缩性能:gzip 压缩对 JS, CSS, XML 压缩功效非常好,能压缩一半,即减少一倍的传输时间;对图片文件,JPG 已经压缩过的,它的压缩功能要少一些。
图片本地缓存 1 天:网站上的图片许多,通常一张图片上传后,不会频繁的改动,只会频繁的拜访,所以将图片放在 Nginx 缓存里,可以减少服务器拜访加载次数,提升拜访速度。
JS、CSS 文件本地缓存 7 天:这两种网页文件,平时都不会去改动它,将它缓存起来,可以减少加载次数,提升拜访速度。为什么这两种文件不和图片一起设置缓存有效期,是斟酌了差异文件的改动频率不一样。
Nginx 日志每日切割一次:这个优化项能大大减小 Nginx 日志文件的大小,途经一周的察看,每日的日志文件是 50M 左右,假如不是每日切割,用月切割,那一个月的日志文件就是几个 G,要 Web 服务器在内存里加载这么大的文件,系统本身内存不够用,就天然会用到磁盘来缓存,这就阴碍功能。每日 50M 左右,在内存上彻底可以顺利加载,这样 Nginx 在处置拜访时,可以快速的保留拜访日志。
途经上述几个优化项目,Nginx 这边一共需要占用 200M 左右内存资源。
5、对 PHP CGI 进程功能进行优化Nginx 没有 PHP 模块,所以它对 PHP 的支持是通过 PHP-FPM 来实现的,PHP-FPM 是跑进程来处置并发请愿,在这个案例中,我们配置了 20 个进程,每个进程差不多占用 20M 左右内存资源,一共是 400M 左右。
同时,PHP-FPM 与 Nginx 交互机制,选用 Linux Socket 模式而不是 TCP 协议端口,Socks 是系统级处置模式,socks 也就是一个文件连接,而 TCP 协议端口,需要途经网络协议处置,功能不如前者,所以我们抉择了前者。
6、MySQL 数据库功能优化由于网站主程序是选用他人开发的开源程序,所以对数据库查询的程序优化我们无法处置,只能从 MySQL 本身寻找突破口。
我们可以想像一下,对于论坛网站,通常看贴、查贴的拜访量要远大于创造贴子、回复贴子的拜访量,体现在 MySQL 数据库上,就是读表与查询表数据的连接处置更多。
因此我们要抉择对读表、查询功能更好的存储引擎,交融以前了解的知识,MySQL 缺省的 MyISAM 引擎就是被设计为合适处置读频率远大于写频率的环境,查询效率相当可观,而且内存占用很少,这也与我们租用低内存配置的 VPS 相符。
具体到 MySQL 配置参数的优化上,受限于服务器上内存资源本身有限,就直接使用缺省的中型环境配置文件。
7、内容分发网络利用站点每日十多万的拜访,上万独立 IP 拜访,察看先前的拜访统计,拜访来自内地各个地域,采用多种网络连接拜访进来,为保证来自各网络的用户拜访速度,同时也减少对网站服务器的请愿,我们使用了 CDN 来分发静态内容,这样各地的用户可以就近拜访到已缓存在 CDN 上的文件,CDN 服务商会在静态内容第一次拜访时缓存到他们全国各地的服务器上,当第二次拜访时,用户实际是没有连接到网站服务器上获取文件的,而是直接从 CDN 服务器上获取,可以显著的提升网站功能。
要优化 Web 服务器的功能,我们先来看看 Web 服务器在 eb 页面处置上的步骤:Web 阅读器向一个特定的服务器发出 Web 页面请愿;
Web 服务器收取到 eb 页面请愿后,寻找所请愿的 eb 页面,并将所请愿的 Web 页面传送给 Web 阅读器;
Web 阅读器收取到所请愿的 eb 页面内容,并将它显示出来。
上面三个步骤都关系 Web 服务器,但实际 Web 服务器功能相关最大的是在第 2 步,这里 Web 服务器需要寻找来自阅读器所请愿的 Web 页面内容。
我们知道,Web 页面内容有静态的,也有动态的,静态的内容,eb 服务器可以直接将结局发回给阅读器,对于动态内容,则通常需要交给利用服务器先处置,由利用服务器返回结局。
当然,也有 Web 服务器本身可以处置动态内容的,例如 IIS 就可以自已辩白处置 ASP, ASPNET 这两种微软的动态网页脚本语言。
从上面简要的解析里,我们大致可以得到这样的结论,阴碍 Web 页面拜访的阴碍因素会有这几个:1、Web 服务器从磁盘中读取静态页面内容的速度,也即时间;
2、Web 服务器判定请愿内容是静态还是动态内容的时间;
3、Web 服务器转发请愿给利用服务器的时间;
4、利用服务器处置(辩白)动态内容所需的时间;
5、Web 服务器返回 Web 内容给阅读器的响应时间;
6、Web 服务器收取来自阅读器请愿的处置功能;
7、Web 拜访请愿数据在网络上传输的时间:包括从阅读器到服务器,和从服务器到阅读器两部门;
8、阅读器本地计算和渲染 Web 内容的时间,即收取内容后显现内容的时间。
上面 8 项很容易懂得,也很直接,其实还有以下几项也是关乎 Web 页面拜访速度体会的因素,你可以思索下是否如此?或者说是否会阴碍到页面拜访功能。
Web 服务器执行安全手段查验的时间,或者说功能;
Web 服务器读取日志文件、写日志内容、关闭对日志文件拜访的时间,先读后写再关闭,这三步中的读与写又涉及到磁盘拜访功能因素;
同时与 Web 服务器连接会话的客户端数目大小,即并发拜访量多大。
我们可以将上面几项阴碍因素抽像出来,那么就是:1、Web 服务器磁盘功能;
2、Web 服务器与利用服务器交互的功能;
3、利用服务器处置动态内容的功能,或者说动态内容利用处置功能;
4、客户端与 Web 服务器的连接速度,即网络传输功能;
5、Web 阅读器辩白和渲染 Web 内容的功能;
6、Web 拜访并发功能。
反应到我们进行功能优化,可以入手的角度就有:1、增加带宽,包括服务器和客户端两边的 Internet 连接带宽;
2、加快动态内容的处置功能;
3、尽可能多地采用静态内容,这样 Web 服务器就可以无需请愿利用服务器,直接将 Web 内容发给阅读器端,这里可以入手的方案又有:
4、动态内容缓存
5、动态内容静态化
6、多台服务器负载均衡同时处置大批的并发拜访;
7、提升服务器磁盘拜访功能,也即通常所说的 IO 功能;
8、减少网页中的 HTTP 请愿数;
9、更改更好功能的 Web 服务器;
10、合乎逻辑部署服务器,在离客户端更近的场所部署服务器,已经证实可以显著地提升拜访功能。
结算:我相信你对优化 Web 服务器有一定的思路了,你可以从硬件层面、软件层面、Web 代码三个层面去优化。
网站现部署在国外的服务器,租用虚拟主机来运营,由于拜访量对照大,所以常常会收到虚拟主机服务商的流量很大的告诉,要求管理下拜访量。另外,虚拟主机的服务器在美国,没有在内地租用虚拟主机的原因是内地网站在存案方面非常繁琐,在网站一开端运营时数据量和拜访量都对照小,所以对功能要求不高,数据量小,所以服务器在查询处置数据时速度对照快,也让人感到拜访速度不慢,现在跟着数据量和拜访量的不断上升,拜访速度已显著降落,到了需要改良拜访功能的时候了。
基于目前该社区网站的场合,提出的优化需求是,内地拜访速度需要提升一倍,目前首页加载时间需要 40 秒左右,但愿优化后能在 20 秒以内将首页加载完成。
另外提出网站数据能够每日自动备份一次,备份数据保存一个月的,以便随时恢复。
三 功能优化方案依据其网站的现状和优化需求,交融自己的经历,加上谷歌的搜索,同时与网站主不断确定沟通,终极得到以下功能优化方案:
1、由虚拟主机部署改为独立服务器部署虚拟主机受限对照多,无法自己自定义配置 Web 服务器,无法配置 PHP 动态缓存,而且独立服务器可以独享内存、处置器资源,不再受虚拟主机商对每个虚拟主机用户的内存和处置器资源占用限制。处置器资源和内存资源,对承受更多并发拜访有直接功能提升功效。
独立服务器,我们选用 Linode 2048 型号,2G 内存,4 核处置器(Linode 所有 VPS 都是四核处置器),80G 硬盘空间,800G 网络流量。
2、由 Windos 操纵系统改为 Linux 操纵系统网站采用的是 PHP + MySQL 程序,PHP 在 Windos 下的功能,受限于 IIS 需要通过 ISAPI 格式调用 PHP,所以功能不如 Linux 下 Apache 直接通过 PHP 模块辩白 PHP,更不如 Nginx 与 PHP-FPM 的功能,既然采用了独立服务器,操纵系统也可以自己确认,Linux 系统我们选用了认识的 Ubuntu Linux Server 1004(一年前还没有 1204),^-^。
3、Web 服务器使用 Nginx,而不采用 Apache选用 Nginx 而不用 Apache 的原因非常直接和干脆,由于站点里有许多静态的附件文件,在处置静态内容上,Nginx 功能是 Apache 的差不多 10 倍。
在 PHP 辩白和伪静态条例方面,Apache 要比 Nginx 强,但这不阴碍我们抛却它,为缓解这一点,我们在后面对 PHP 进行了动态缓存。
对 PHP 查询进举动态缓存,采用 eAccelerator 这个加速器
PHP 加速器是一个为了提高 PHP 执行效率,从而缓存起 PHP 的操纵码,这样 PHP 后面执行就不用分析转换了,可以直接调用 PHP 操纵码,这样速度上就提高了不少。
eAccelerator 是一个开源 PHP 加速器,优化和动态内容缓存,提高了 PHP 脚本的缓存功能,使得 PHP 脚本在编译的状态下,对服务器的开销几乎彻底打消。 它还有对脚本起优化作用,以加快其执行效率。使得的 PHP 程序代码执效率能提高 1-10 倍,这个加速还是非常显著的。
具体地,我们计划对 eAccelerator 进行以下设置优化:
缓存采用物理内存来进行,不采用磁盘来缓存。我们知道内存的读写功能是硬盘的 N 倍,所以在内存资源可以规划场合下,强烈建议采用内存来保留 eAccelerator 的缓存内容。
缓存大小设置为 32MB,这个值是操纵系统默认支持最大的缓存容量。固然可以通过改动配置文件来加大这个值,但我们觉得没有必须,所以就抛却了。
4、Nginx 功能优化选用了 Nginx,固然它的功能很好,但我们仍然需要对它进行功能优化,在这个案例中,我们做了以下优化:
采用 8 个进程,每个进程大约需要 20M 内存耗损,这里一共采用了 150M 左右的内存。
充裕采用主服务器的 CPU 内核:四核,采用 CPU 粘性配置选项(orker_cpu_affinity),每核处置器分配两个进程。
开启 gzip 压缩性能:gzip 压缩对 JS, CSS, XML 压缩功效非常好,能压缩一半,即减少一倍的传输时间;对图片文件,JPG 已经压缩过的,它的压缩功能要少一些。
图片本地缓存 1 天:网站上的图片许多,通常一张图片上传后,不会频繁的改动,只会频繁的拜访,所以将图片放在 Nginx 缓存里,可以减少服务器拜访加载次数,提升拜访速度。
JS、CSS 文件本地缓存 7 天:这两种网页文件,平时都不会去改动它,将它缓存起来,可以减少加载次数,提升拜访速度。为什么这两种文件不和图片一起设置缓存有效期,是斟酌了差异文件的改动频率不一样。
Nginx 日志每日切割一次:这个优化项能大大减小 Nginx 日志文件的大小,途经一周的察看,每日的日志文件是 50M 左右,假如不是每日切割,用月切割,那一个月的日志文件就是几个 G,要 Web 服务器在内存里加载这么大的文件,系统本身内存不够用,就天然会用到磁盘来缓存,这就阴碍功能。每日 50M 左右,在内存上彻底可以顺利加载,这样 Nginx 在处置拜访时,可以快速的保留拜访日志。
途经上述几个优化项目,Nginx 这边一共需要占用 200M 左右内存资源。
5、对 PHP CGI 进程功能进行优化Nginx 没有 PHP 模块,所以它对 PHP 的支持是通过 PHP-FPM 来实现的,PHP-FPM 是跑进程来处置并发请愿,在这个案例中,我们配置了 20 个进程,每个进程差不多占用 20M 左右内存资源,一共是 400M 左右。
同时,PHP-FPM 与 Nginx 交互机制,选用 Linux Socket 模式而不是 TCP 协议端口,Socks 是系统级处置模式,socks 也就是一个文件连接,而 TCP 协议端口,需要途经网络协议处置,功能不如前者,所以我们抉择了前者。
6、MySQL 数据库功能优化由于网站主程序是选用他人开发的开源程序,所以对数据库查询的程序优化我们无法处置,只能从 MySQL 本身寻找突破口。
我们可以想像一下,对于论坛网站,通常看贴、查贴的拜访量要远大于创造贴子、回复贴子的拜访量,体现在 MySQL 数据库上,就是读表与查询表数据的连接处置更多。
因此我们要抉择对读表、查询功能更好的存储引擎,交融以前了解的知识,MySQL 缺省的 MyISAM 引擎就是被设计为合适处置读频率远大于写频率的环境,查询效率相当可观,而且内存占用很少,这也与我们租用低内存配置的 VPS 相符。
具体到 MySQL 配置参数的优化上,受限于服务器上内存资源本身有限,就直接使用缺省的中型环境配置文件。
7、内容分发网络利用站点每日十多万的拜访,上万独立 IP 拜访,察看先前的拜访统计,拜访来自内地各个地域,采用多种网络连接拜访进来,为保证来自各网络的用户拜访速度,同时也减少对网站服务器的请愿,我们使用了 CDN 来分发静态内容,这样各地的用户可以就近拜访到已缓存在 CDN 上的文件,CDN 服务商会在静态内容第一次拜访时缓存到他们全国各地的服务器上,当第二次拜访时,用户实际是没有连接到网站服务器上获取文件的,而是直接从 CDN 服务器上获取,可以显著的提升网站功能。
要优化 Web 服务器的功能,我们先来看看 Web 服务器在 eb 页面处置上的步骤:Web 阅读器向一个特定的服务器发出 Web 页面请愿;
Web 服务器收取到 eb 页面请愿后,寻找所请愿的 eb 页面,并将所请愿的 Web 页面传送给 Web 阅读器;
Web 阅读器收取到所请愿的 eb 页面内容,并将它显示出来。
上面三个步骤都关系 Web 服务器,但实际 Web 服务器功能相关最大的是在第 2 步,这里 Web 服务器需要寻找来自阅读器所请愿的 Web 页面内容。
我们知道,Web 页面内容有静态的,也有动态的,静态的内容,eb 服务器可以直接将结局发回给阅读器,对于动态内容,则通常需要交给利用服务器先处置,由利用服务器返回结局。
当然,也有 Web 服务器本身可以处置动态内容的,例如 IIS 就可以自已辩白处置 ASP, ASPNET 这两种微软的动态网页脚本语言。
从上面简要的解析里,我们大致可以得到这样的结论,阴碍 Web 页面拜访的阴碍因素会有这几个:1、Web 服务器从磁盘中读取静态页面内容的速度,也即时间;
2、Web 服务器判定请愿内容是静态还是动态内容的时间;
3、Web 服务器转发请愿给利用服务器的时间;
4、利用服务器处置(辩白)动态内容所需的时间;
5、Web 服务器返回 Web 内容给阅读器的响应时间;
6、Web 服务器收取来自阅读器请愿的处置功能;
7、Web 拜访请愿数据在网络上传输的时间:包括从阅读器到服务器,和从服务器到阅读器两部门;
8、阅读器本地计算和渲染 Web 内容的时间,即收取内容后显现内容的时间。
上面 8 项很容易懂得,也很直接,其实还有以下几项也是关乎 Web 页面拜访速度体会的因素,你可以思索下是否如此?或者说是否会阴碍到页面拜访功能。
Web 服务器执行安全手段查验的时间,或者说功能;
Web 服务器读取日志文件、写日志内容、关闭对日志文件拜访的时间,先读后写再关闭,这三步中的读与写又涉及到磁盘拜访功能因素;
同时与 Web 服务器连接会话的客户端数目大小,即并发拜访量多大。
我们可以将上面几项阴碍因素抽像出来,那么就是:1、Web 服务器磁盘功能;
2、Web 服务器与利用服务器交互的功能;
3、利用服务器处置动态内容的功能,或者说动态内容利用处置功能;
4、客户端与 Web 服务器的连接速度,即网络传输功能;
5、Web 阅读器辩白和渲染 Web 内容的功能;
6、Web 拜访并发功能。
反应到我们进行功能优化,可以入手的角度就有:1、增加带宽,包括服务器和客户端两边的 Internet 连接带宽;
2、加快动态内容的处置功能;
3、尽可能多地采用静态内容,这样 Web 服务器就可以无需请愿利用服务器,直接将 Web 内容发给阅读器端,这里可以入手的方案又有:
4、动态内容缓存
5、动态内容静态化
6、多台服务器负载均衡同时处置大批的并发拜访;
7、提升服务器磁盘拜访功能,也即通常所说的 IO 功能;
8、减少网页中的 HTTP 请愿数;
9、更改更好功能的 Web 服务器;
10、合乎逻辑部署服务器,在离客户端更近的场所部署服务器,已经证实可以显著地提升拜访功能。
结算:我相信你对优化 Web 服务器有一定的思路了,你可以从硬件层面、软件层面、Web 代码三个层面去优化。
虚拟主机受限对照多,无法自己自定义配置 Web 服务器,无法配置 PHP 动态缓存,而且独立服务器可以独享内存、处置器资源,不再受虚拟主机商对每个虚拟主机用户的内存和处置器资源占用限制。处置器资源和内存资源,对承受更多并发拜访有直接功能提升功效。
独立服务器,我们选用 Linode 2048 型号,2G 内存,4 核处置器(Linode 所有 VPS 都是四核处置器),80G 硬盘空间,800G 网络流量。
2、由 Windos 操纵系统改为 Linux 操纵系统 网站采用的是 PHP + MySQL 程序,PHP 在 Windos 下的功能,受限于 IIS 需要通过 ISAPI 格式调用 PHP,所以功能不如 Linux 下 Apache 直接通过 PHP 模块辩白 PHP,更不如 Nginx 与 PHP-FPM 的功能,既然采用了独立服务器,操纵系统也可以自己确认,Linux 系统我们选用了认识的 Ubuntu Linux Server 1004(一年前还没有 1204),^-^。 3、Web 服务器使用 Nginx,而不采用 Apache 选用 Nginx 而不用 Apache 的原因非常直接和干脆,由于站点里有许多静态的附件文件,在处置静态内容上,Nginx 功能是 Apache 的差不多 10 倍。 在 PHP 辩白和伪静态条例方面,Apache 要比 Nginx 强,但这不阴碍我们抛却它,为缓解这一点,我们在后面对 PHP 进行了动态缓存。 对 PHP 查询进举动态缓存,采用 eAccelerator 这个加速器 PHP 加速器是一个为了提高 PHP 执行效率,从而缓存起 PHP 的操纵码,这样 PHP 后面执行就不用分析转换了,可以直接调用 PHP 操纵码,这样速度上就提高了不少。 eAccelerator 是一个开源 PHP 加速器,优化和动态内容缓存,提高了 PHP 脚本的缓存功能,使得 PHP 脚本在编译的状态下,对服务器的开销几乎彻底打消。 它还有对脚本起优化作用,以加快其执行效率。使得的 PHP 程序代码执效率能提高 1-10 倍,这个加速还是非常显著的。 具体地,我们计划对 eAccelerator 进行以下设置优化: 缓存采用物理内存来进行,不采用磁盘来缓存。我们知道内存的读写功能是硬盘的 N 倍,所以在内存资源可以规划场合下,强烈建议采用内存来保留 eAccelerator 的缓存内容。 缓存大小设置为 32MB,这个值是操纵系统默认支持最大的缓存容量。固然可以通过改动配置文件来加大这个值,但我们觉得没有必须,所以就抛却了。 4、Nginx 功能优化 选用了 Nginx,固然它的功能很好,但我们仍然需要对它进行功能优化,在这个案例中,我们做了以下优化: 采用 8 个进程,每个进程大约需要 20M 内存耗损,这里一共采用了 150M 左右的内存。 充裕采用主服务器的 CPU 内核:四核,采用 CPU 粘性配置选项(orker_cpu_affinity),每核处置器分配两个进程。 开启 gzip 压缩性能:gzip 压缩对 JS, CSS, XML 压缩功效非常好,能压缩一半,即减少一倍的传输时间;对图片文件,JPG 已经压缩过的,它的压缩功能要少一些。 图片本地缓存 1 天:网站上的图片许多,通常一张图片上传后,不会频繁的改动,只会频繁的拜访,所以将图片放在 Nginx 缓存里,可以减少服务器拜访加载次数,提升拜访速度。 JS、CSS 文件本地缓存 7 天:这两种网页文件,平时都不会去改动它,将它缓存起来,可以减少加载次数,提升拜访速度。为什么这两种文件不和图片一起设置缓存有效期,是斟酌了差异文件的改动频率不一样。 Nginx 日志每日切割一次:这个优化项能大大减小 Nginx 日志文件的大小,途经一周的察看,每日的日志文件是 50M 左右,假如不是每日切割,用月切割,那一个月的日志文件就是几个 G,要 Web 服务器在内存里加载这么大的文件,系统本身内存不够用,就天然会用到磁盘来缓存,这就阴碍功能。每日 50M 左右,在内存上彻底可以顺利加载,这样 Nginx 在处置拜访时,可以快速的保留拜访日志。 途经上述几个优化项目,Nginx 这边一共需要占用 200M 左右内存资源。 5、对 PHP CGI 进程功能进行优化 Nginx 没有 PHP 模块,所以它对 PHP 的支持是通过 PHP-FPM 来实现的,PHP-FPM 是跑进程来处置并发请愿,在这个案例中,我们配置了 20 个进程,每个进程差不多占用 20M 左右内存资源,一共是 400M 左右。 同时,PHP-FPM 与 Nginx 交互机制,选用 Linux Socket 模式而不是 TCP 协议端口,Socks 是系统级处置模式,socks 也就是一个文件连接,而 TCP 协议端口,需要途经网络协议处置,功能不如前者,所以我们抉择了前者。 6、MySQL 数据库功能优化 由于网站主程序是选用他人开发的开源程序,所以对数据库查询的程序优化我们无法处置,只能从 MySQL 本身寻找突破口。 我们可以想像一下,对于论坛网站,通常看贴、查贴的拜访量要远大于创造贴子、回复贴子的拜访量,体现在 MySQL 数据库上,就是读表与查询表数据的连接处置更多。 因此我们要抉择对读表、查询功能更好的存储引擎,交融以前了解的知识,MySQL 缺省的 MyISAM 引擎就是被设计为合适处置读频率远大于写频率的环境,查询效率相当可观,而且内存占用很少,这也与我们租用低内存配置的 VPS 相符。 具体到 MySQL 配置参数的优化上,受限于服务器上内存资源本身有限,就直接使用缺省的中型环境配置文件。 7、内容分发网络利用 站点每日十多万的拜访,上万独立 IP 拜访,察看先前的拜访统计,拜访来自内地各个地域,采用多种网络连接拜访进来,为保证来自各网络的用户拜访速度,同时也减少对网站服务器的请愿,我们使用了 CDN 来分发静态内容,这样各地的用户可以就近拜访到已缓存在 CDN 上的文件,CDN 服务商会在静态内容第一次拜访时缓存到他们全国各地的服务器上,当第二次拜访时,用户实际是没有连接到网站服务器上获取文件的,而是直接从 CDN 服务器上获取,可以显著的提升网站功能。 要优化 Web 服务器的功能,我们先来看看 Web 服务器在 eb 页面处置上的步骤: Web 阅读器向一个特定的服务器发出 Web 页面请愿; Web 服务器收取到 eb 页面请愿后,寻找所请愿的 eb 页面,并将所请愿的 Web 页面传送给 Web 阅读器; Web 阅读器收取到所请愿的 eb 页面内容,并将它显示出来。 上面三个步骤都关系 Web 服务器,但实际 Web 服务器功能相关最大的是在第 2 步,这里 Web 服务器需要寻找来自阅读器所请愿的 Web 页面内容。 我们知道,Web 页面内容有静态的,也有动态的,静态的内容,eb 服务器可以直接将结局发回给阅读器,对于动态内容,则通常需要交给利用服务器先处置,由利用服务器返回结局。 当然,也有 Web 服务器本身可以处置动态内容的,例如 IIS 就可以自已辩白处置 ASP, ASPNET 这两种微软的动态网页脚本语言。 从上面简要的解析里,我们大致可以得到这样的结论,阴碍 Web 页面拜访的阴碍因素会有这几个: 1、Web 服务器从磁盘中读取静态页面内容的速度,也即时间; 2、Web 服务器判定请愿内容是静态还是动态内容的时间; 3、Web 服务器转发请愿给利用服务器的时间; 4、利用服务器处置(辩白)动态内容所需的时间; 5、Web 服务器返回 Web 内容给阅读器的响应时间; 6、Web 服务器收取来自阅读器请愿的处置功能; 7、Web 拜访请愿数据在网络上传输的时间:包括从阅读器到服务器,和从服务器到阅读器两部门; 8、阅读器本地计算和渲染 Web 内容的时间,即收取内容后显现内容的时间。 上面 8 项很容易懂得,也很直接,其实还有以下几项也是关乎 Web 页面拜访速度体会的因素,你可以思索下是否如此?或者说是否会阴碍到页面拜访功能。 Web 服务器执行安全手段查验的时间,或者说功能; Web 服务器读取日志文件、写日志内容、关闭对日志文件拜访的时间,先读后写再关闭,这三步中的读与写又涉及到磁盘拜访功能因素; 同时与 Web 服务器连接会话的客户端数目大小,即并发拜访量多大。 我们可以将上面几项阴碍因素抽像出来,那么就是: 1、Web 服务器磁盘功能; 2、Web 服务器与利用服务器交互的功能; 3、利用服务器处置动态内容的功能,或者说动态内容利用处置功能; 4、客户端与 Web 服务器的连接速度,即网络传输功能; 5、Web 阅读器辩白和渲染 Web 内容的功能; 6、Web 拜访并发功能。 反应到我们进行功能优化,可以入手的角度就有: 1、增加带宽,包括服务器和客户端两边的 Internet 连接带宽; 2、加快动态内容的处置功能; 3、尽可能多地采用静态内容,这样 Web 服务器就可以无需请愿利用服务器,直接将 Web 内容发给阅读器端,这里可以入手的方案又有: 4、动态内容缓存 5、动态内容静态化 6、多台服务器负载均衡同时处置大批的并发拜访; 7、提升服务器磁盘拜访功能,也即通常所说的 IO 功能; 8、减少网页中的 HTTP 请愿数; 9、更改更好功能的 Web 服务器; 10、合乎逻辑部署服务器,在离客户端更近的场所部署服务器,已经证实可以显著地提升拜访功能。 我相信你对优化 Web 服务器有一定的思路了,你可以从硬件层面、软件层面、Web 代码三个层面去优化。
结算: