【问题标题】:Scalability of Laravel Web AppLaravel Web 应用的可扩展性
【发布时间】:2014-06-20 08:27:34
【问题描述】:

我们正在运行一个用 Laravel 编码的基于 MySQL/PHP 的 Web 应用程序。基本上,我们用它来管理电脑维修店的服务工作/工作订单。我们那里有近 2500 个工单,有时运行速度有点慢,尤其是当多个技术人员正在输入或更新工单时。什么是使它更快和更有效地工作的最佳方法,尤其是在我们继续添加客户和工作订单时。该服务器在 Linux 软件 RAID1 中运行 CentOS 6 x64、cPanel、Intel Xeon E3、2x Enterprise SATA。 谢谢!

【问题讨论】:

  • 瓶颈是什么?
  • 感谢您的提问。我会假设 MySQL 是瓶颈,因为该服务器以 0.13 的负载运行一堆共享 Web 托管帐户。我正在尝试减少磁盘撞击,因为我认为这是问题所在。
  • 测量好于假设,但您可以尝试使用内存缓存,例如 memcached。 SO 并不是真正适合此的地方,但测量可以帮助我们将您引导到 StackExchange 网络中更相关的站点。

标签: mysql optimization laravel


【解决方案1】:

不确定一个答案在指定解决方案时能走多远,但有许多最佳实践可供遵循。我认为这就是您所追求的,因为您没有指定任何特定的瓶颈。

一些快速提示将是

  • 缓存您的查询:

因此,如果在您的应用程序上运行查询,其数据仅每 x 天更新一次,为什么不将其缓存 x 天,以便您的数据库节省在两者之间不必要的打击?来自docs 的示例:

$value = Cache::remember('users', $minutes, function()
{
    return DB::table('users')->get();
});
  • 利用队列:

当用户运行后台任务时,例如,更新工作订单(电子邮件、调用其他逻辑)可能需要一些时间并导致该用户必须等待。与其让这些任务在那个时刻运行并为用户减慢速度,您可以将它们排队等待稍后运行。 Laravel supports 为此目的使用了许多不同的队列驱动程序。我个人使用过Beanstalk,但你也可以试试IronMQ

Beanstalk 的基本用法:更改 /app/config/queue.php 以指定您的默认队列驱动程序和任何配置,包括队列名称:

'default' => 'beanstalkd',


'beanstalkd' => array(
        'driver' => 'beanstalkd',
        'host'   => 'localhost',
        'queue'  => array('default','SendEmail'),
    ),

然后,在您的控制器中,您可以执行以下操作来推送到该队列:

Queue::push('SendEmail', array('message' => 'Something...'));

仅供参考,Fideloper 对此有很好的 tutorial

  • 警惕 n+1 问题并使用急切加载:

docs 解释了这个问题。

  • 考虑切换到像 MongoDB 这样的 NoSql 数据库(完全取决于要求):

正如我所提到的,这完全取决于您的应用程序和您正在做什么,但在某些情况下使用 NoSql 数据库而不是 MySQL 有其优点。您可以利用分片和复制来帮助使用 MongoDB 扩展您的应用程序,但当然不仅限于 mongo。

您还可以做很多其他事情,但仅凭上述提示,我认为您可以让您的应用程序变得更快、更高效。

【讨论】:

  • 这是一个很好的答案。我将把它传递给开发人员。非常感谢,非常感谢!
【解决方案2】:

确保您最常用的表是 Innodb 而不是 MyIsam 以避免表锁定。

对于 MyIsam 表,当插入或更新行时,对该表的所有其他更改都会暂停,直到该请求完成。

【讨论】:

    【解决方案3】:

    您可以尝试使用这个packagist https://packagist.org/packages/enfil/sharding

    【讨论】:

      猜你喜欢
      • 2014-09-13
      • 2011-07-09
      • 2012-07-30
      • 2010-09-30
      • 2014-10-25
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 2011-02-10
      相关资源
      最近更新 更多