Laravel 5 能否处理 1000 个并发用户而不会严重滞后



我想知道,如果 1000 个用户同时使用使用 laravel 5 构建的网站并定期查询数据库,那么 laravel 5 的表现如何? 我知道这会很慢,但会不会非常慢以至于无法忍受? 请注意,我也将大量使用 ajax。

假设我正在使用具有以下配置的数字海洋云服务

2GB memory
2 vCPU
40GB SSD

我不期望完全真实的数字,因为不可能这样做,但至少提供一些细节,我是否应该使用具有可观性能的 laravel。

还请提供一些工具,通过这些工具我可以检查我的 laravel 5 应用程序的速度以及它在实际负载时的性能,以及其他工具,我可以通过这些工具测试速度和性能。

如果有人有使用Laravel,尤其是Laravel5的真实经验,那就太好了。

那么流明呢,这真的比拉拉维尔更快吗?

简而言之,是的。至少较新版本的Laravel是有能力的(Laravel 7.*)。
话虽如此,这实际上是一个由三部分组成的难题。


1. 拉拉维尔 (菲律宾语)

  • 高并发架构和 Laravel 性能调优

老实说,我无法提供这篇精彩文章提供的一半细节。从并发的定义一直到pre-optimization times vs. after-optimization times.,他掌握了所有内容



2. 读取、写入和分区持久化数据(数据库)

  • MySQL vs. MongoDB

我很好奇真正的问题是Php的Laravel,还是更多的数据库读/写速度时序瓶颈。非关系数据库是一项令人难以置信的技术,与传统的关系数据库相比,它对大数据的好处要大得多。

  • 非关系数据库(Mongo)的读取速度比MySql快得多(如果我没记错的话,大约快60%)
  • 非关系数据库(Mongo)的写入速度确实较慢,但这通常不会阻碍用户体验。
  • 与关系数据库(MySQL)不同,Mongo DB可以真正分区,分布在多个服务器上。
  • Mongo DB有文档集合,集合是表的同义词,文档是行的同义词。
  • 不同的是,MongoDB有一种非常像JSON的感觉。(文档集合,其中每个文档看起来像一个 JSON 对象)。
  • 巨大的区别和好处是每个文档(AKA 行)没有相同的键。当在财富500强项目中使用mongo DB时,我当时的导师和负责人Logan有一句话。

蒙戈不在乎

这意味着您可以按照想要的方式调整数据检索方式,因此不仅读取速度更快,而且通常不会因为必须从多个表中检索数据而减慢速度。

这是一个经过个人测试和喜爱的软件包,用于在Laravel中设置MongoDB

  • Jessengers ~ MongoDB In Laravel中

如果您担心大量的用户和传输数据,MongoDB可能是您正在寻找的。有了这个,让我们继续第三点,也是最重要的一点。


3. 无服务器架构(又名水平扩展)


Aws、Google Cloud、Microsoft Azure等...我相信你听说过

最终,如果您遇到并发问题并希望保持在 Laravel 的范围内,这就是您正在寻找的。

这是一个全新的世界,人们可以敲打出令人难以置信的工具 - 它们很棒。这也是一个全新的、相当大的工具和思想世界。

首先,让我们深入了解一些无服务器概念。

  • 基础设施即代码地形

    "使用基础架构即代码来配置和管理任何云、基础架构或服务">

  • 通过的水平扩展示例

    "创建一个Laravel应用程序。这是一个单一的应用程序,整体式。然后你潜入云。你发现了Terraform。啊哈哈,首先你使用terraform来定义你的应用程序一次将运行多少个实例。您决定需要应用程序的 8 个实例。接下来,您当然要定义负载均衡器。负载均衡器只是平衡 8 个应用程序实例之间的流量负载。每个应用程序都连接到同一个数据库,最终共享相同的数据源。您只需将流量分散到同一应用程序的多个实例中即可。

  • 我们当然可以超越这个,非常简化的云答案,并深入研究lambdas,无服务器的该做什么,设置您的内部虚拟云网络......

或。。。我们可以提前感谢Laravel团队简化无服务器架构

  • 是的,Laravel简化无服务器(喊出Laravel团队)

    • 无服务器通过 Laravel 蒸汽

拉维尔蒸汽开头段落

">Laravel Vapor 是 Laravel 的自动扩展、无服务器部署平台,由 AWS Lambda 提供支持。在 Vapor 上管理您的 Laravel 基础设施,并爱上无服务器的可扩展性和简单性。


最后,让我们总结一下。

口语关注

能够在设定的时间内处理一定数量的流量

潜在解决方案的潜在瓶颈

Laravel&Php

  • (高并发架构和 Laravel 性能 调音

数据库和高效持久化/检索数据

  • Jessengers ~ MongoDB In Laravel中

用于水平扩展的无服务器体系结构

  • 无服务器通过 Laravel 蒸汽

我会根据我作为软件开发人员的经验来尝试回答这个问题。老实说,每当它同时达到 1000 个并发用户时,我肯定会要求升级,因为我不会冒服务器故障或数据故障的风险。

但是,让我们打破如何设计它。

  1. 如果获取的数据不复杂并且Laravel代码中的操作不多,它可以处理这些用户。如果它只是从数据库传递并且几乎没有对数据进行修改,它会很快。
  2. 用户获取的数据不是唯一的。假设您有一个没有用户个性化的新闻网站。用户获取的新闻大多是相同的。您从内存(Redis,我推荐)或Web服务器(Nginx,应避免)缓存数据,您的Laravel程序将运行得足够快。
  3. 直接从数据库查询比使用Laravel ORM更快。 如果需要,您可以考虑它,但我自己总是会尝试使用 ORM,因为它将有助于代码更具可读性和安全性。
  4. 拆分数据库、Web 服务器、CDN 和缓存服务器显然可以更轻松地监控服务器使用情况。
  5. 尝试将其升级到最新版本。我曾经与一家使用版本 5 的公司合作,它在性能方面并不好。
  6. 操作码缓存。缓存 PHP 文件代码。我自己从不使用它。
  7. 将应用拆分为后端和前端。使用前端应用的状态管理可减少对服务器的请求数据。

现在让我们回答您的问题

是否有任何检查性能的工具?您可以检查Laravel调试栏,这些工具提供了简单的性能报告。我自己鼓励你对你创建的每个功能进行测试。您可以从该单元测试创建报告,以查找需要时间才能完成的功能。

lume 比拉拉维尔快吗?是的,Lumen 更快,因为他们禁用了 Laravel 的某些功能。但请注意,泰勒似乎会停止流明的发展。您应该为将来考虑这一点。

如果您了解性能,则可能不会选择Laravel进行开发。

  1. 因为打开连接时每个服务器之间存在延迟。每当用户创建请求时,他们都会打开与服务器的连接。服务器打开与缓存服务器、数据库服务器、SMTP 服务器或其他第三方的连接。这是发生在拉拉维尔身上的真正瓶颈。您可以与数据库和缓存服务器建立keep-alive连接以减少连接延迟,但您不会在 Laravel 中找到它,因为它会在请求完成时释放连接。
  2. 它是一种类型语言,大多数编译语言都更快

最后,除非您正在创建一个非常简单的应用程序,否则您可能无法将该服务器资源一起使用Laravel。

像这样的问题需要一个实数的答案:

幸运的是,这家伙已经在类似的条件下完成了它,你想尝试和Laravel Forge。

使用此 PHP 配置:

opcache.enable=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.fast_shutdown=1

结果:

Without Sessions:
Laravel: 609.03 requests per second
With Sessions:
Laravel: 521.64 requests per second

所以回答你的问题:

有了这些内存,您将很难让 1000 个用户发出请求,使用 4gb 内存,您将处于更好的状态。

我不认为你可以用Laravel做到这一点。

我尝试使用 8 核 CPU、8 GB RAM 和 120GB 硬盘对 Laravel进行基准测试,但我每秒只收到 200-400 个请求。

最新更新