根据个人经验选择Web服务器操作模式

对于那些已经拥有自己的网站或计划打开它的人来说,本文将是有用的。 雄心勃勃的网站管理员会特别有趣,他们认为他们项目的最佳时机即将来临,并希望为页面访问者的涌入做准备。

即使是那些仍然只梦想在其站点上拥有数千个用户的用户,也可能会想:“如果他们同时登录,我的站点将拥有多少用户?” 我立即回想起著名的表述“ Habraeffect”-站点故障现象,当链接在Internet上出现后,事实证明它还不准备进行大量转换。

假设该站点已经存在(或将很快出现):该站点位于何处? 它应该是经典托管还是vps服务器? 如果是vps,哪个配置更好? 也许根本没有区别,选择更便宜的商品更容易? 在本文中,我们将考虑几种选择,并在实践中确保哪种选择最适合我们的网站。

我们将进行实验:设置不同的服务器操作模式并评估性能。 我们将使用Loaddy.com服务在网站上模拟负载。 您可以在此处设置用户数量,负载类型的增长,该图将显示服务器如何响应用户。 可以相信,一个用户在10秒内向该站点发出了大约一个请求。 作为测试站点,请在cms moguta上进行在线演示商店。 它将根据几个标准(即,在形成页面,正在使用数据库等工作的情况下)在主页上显示测试“商品”。 一种或另一种方式,这将使您可以比较它们之间的模式。

作为测试站点,我们将在Ubuntu上创建VPS服务器。 其配置为[1核,1Gb RAM]。 我们假设正是在大多数情况下为新项目创建的这些入门级服务器。 在线商店的测试版本将在以下IP地址提供: http://130.193.44.219/

经典托管也很有用,为此,我们还将在同一家网上商店中进行测试。 您可以按照自己的方式对项目进行相同的测试!

由于在大多数情况下,连同vps一起提供了控制面板,因此我们将对其进行主要更改。 在vps服务器上,我们有3种操作模式:

  • 阿帕奇
  • Apache处于CGI模式;
  • Nginx + php-fpm(不带Apache)。

但是首先,让我们测试托管:

经典的低成本托管


图片
结果可在此处获得

访客人数超过50人时会出现错误。 托管不再提供内容,但是,如果您转到托管控制面板,我们会看到类似以下内容:
您的网站在过去24小时内一直受到限制。 处理器资源仅限于您的站点。 您已达到输入过程的限制(同时运行PHP和CGI脚本,计划的任务和控制台会话的数量)126次。
好吧,当然,托管是托管,更便宜。 当然,您可以找到可以提供更多选择的费率,但是您需要考虑所有这些,以某种方式找出限制的确切数据以及每个托管服务提供商。

VPS:Apache


接下来的测试是我们的带有Apache模式的空军测试,顺便说一下,在安装ISP控制面板时默认提供该模式。

图片

结果可在此处获得

当用户数超过90时,问题就开始了。如果我们通过ssh进入服务器,然后使用top命令以Shift + M(按消耗的内存量)排​​序,在进程列表中查看该时刻,我们将看到类似以下内容:

图片

我们看到apache2进程已经成长为许多子公司,它们吞噬了vps服务器的整个RAM。

在这里,您需要做一点说明。 事实是,从理论上讲,Apache服务器有一种模式,该模式允许每个连接创建多个所谓的多线程,而不是为每个连接创建大量的子进程,每个多线程将服务于多个连接。 与默认的前叉不同,此模式称为工作程序。 但是安装起来并不容易,在ISP之类的面板中无法做到这一点,而且如果您困惑并尝试通过ssh进行操作,那么事实证明,关闭prefork并打开worker还是不够的,您仍然需要线程安全的php版本。 而且,如果使用Zend或IonCube之类的模块,那么它们也必须是线程安全的。 无论如何,官方PHP网站不建议设置此模式。

VPS:CGI


让我们看看使用CGI模式时会发生什么。 为此,您需要允许在ISP控制面板中以CGI模式使用PHP,这可以在“帐户-用户-用户设置”部分中完成。

图片

结果可在此处获得

一张惨淡的画面证明了。 服务器已经拒绝了55位以上的访问者发布内容,RAM被“ php”进程吞噬了。 接下来是恢复功能的尝试,但仍然以几乎100%的失败而告终。

VPS:Nginx + PHP-FPM


现在是时候了,根本不使用Apache服务器,而是使用Nginx,而php由php-fpm模块处理的模式已经来临。 如果使用ISP控制面板,则必须为用户启用此模式。 这也可以在“帐户-用户-用户设置”部分中完成。 另外,该模式应该在“设置-功能-Web服务器(www)”部分中可用。

图片

结果可在此处获得

你需要什么! 100%的可用性,而下载速度和服务器响应时间处于可接受的水平,尽管它们随着负载的增加而增加。 尽管如此,服务器正在应对!

让我们看一下服务器上最大负载时的进程表:

图片

我们看到我们仍然有可用的RAM供应。 而且php-fpm7.0子进程不会大量增长,而仅限于5个实例,每个实例提供多个线程。

好吧,看起来像是定义了“获胜模式”。 让我们找出在这种模式下我们的服务器可以服务多少个同时访问者。 但是在此之前,我们做了一些“调整”。 首先,由于apache不用于这种服务器操作,因此可以完全禁用它。 我们将在“系统-服务”部分的ISP控制面板中执行此操作。 其次,我们改变了启动php-fpm进程的原理。 默认情况下,它是动态的。 这意味着子进程即使在不需要时也会挂在内存中。 同时,不会释放内存,并且随着时间的流逝,这些进程的增长可能会超出我们的预期。 因此,建议按需设置“按需”模式。 并设置子进程的数量和超时。

为此,您将需要通过ssh进入服务器,并将这些设置注册到php配置文件中。 对于在ISP中为其创建域的用户而言,在文件中方便地完成此操作。

它通常位于/etc/php/7.0/fpm/pool.d中

因此:
sudo nano /etc/php/7.0/fpm/pool.d/www-root.conf 


我们默认在此处看到以下设置:

 [www-root] pm = dynamic pm.start_servers = 1 pm.min_spare_servers = 1 pm.max_children = 5 pm.max_spare_servers = 5 

要启用按需模式,您需要将其替换为:
 pm = ondemand pm.max_children = 5 pm.process_idle_timeout = 10s 

然后使用以下命令重新启动php-fpm

 sudo service php7.0-fpm restart 

之后,将按需创建php-fpm7.0进程(如果有负载),最大进程数= 5,停机10秒后,该进程将被杀死,从而释放RAM。

为了以防万一,我们将再次运行测试,以确保所有这些业余活动都不会影响网站性能,甚至更糟:

图片

结果可在此处获得

现在让我们与很多访问者一起运行Loaddy,以了解我们的服务器可以处理多少个连接:

图片

结果可在此处获得

好消息是,尽管所有请求都被延迟了很多,但每秒处理的请求数量很大。 服务器响应时间接近190秒,接近10秒,但让我们回想一下apache模式的图表,其中80位用户已经获得4秒服务器响应,而在php-fpm模式下,我们特别分配了130个请求,观察到类似的延迟光标在上面的图表上。
但这是相同的VPS。

测试结束时的主要流程表(有200个用户):

图片

请注意,在测试之后,将释放pfp-fpm使用的内存:

图片

因此,我们的服务器已准备好进行新负载。

必须记住,该站点以nginx + php-fpm模式运行,这意味着在工作中未使用apache2,因此未使用.htaccess。 这看似不方便,但它是最快的选择,搜索引擎可以更好地对可以快速运行的网站进行排名。

结论


总之,还有一点要注意:如果在服务器上配置了所需的一切,并决定断开ISP控制面板的连接,或者您用尽了许可证,请注意,从其进行的“核心”进程仍将挂在服务器上。 几个月后,它会增长,因此最好“杀死”它,并将其从创业公司和皇冠上删除。

如果要使用Loaddy或其他方法独立测试站点,请访问http://130.193.44.219/。

Source: https://habr.com/ru/post/zh-CN434198/


All Articles