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

2022-08-30 22:16:54

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

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

2GB memory
2 vCPU
40GB SSD

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

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

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

那么Lumen呢,这真的使应用程序比laravel更快,多少?


答案 1

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


1. 拉拉维尔 (菲律宾比索)


老实说,我无法像这篇惊人的文章那样提供一半的细节。他已经掌握了从并发性定义一直到所有东西pre-optimization times vs. after-optimization times.



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


我很好奇,如果真正关心的是Php的Laravel,还是更多的数据库读/写速度计时瓶颈。非关系数据库是一种令人难以置信的技术,它比传统的关系数据库更能使大数据受益。

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

"蒙戈不在乎"

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

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

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


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


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

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

这是一个全新的世界,里面有不可思议的工具,人们可以锤炼出来-- 它们真棒。这也是一个全新的,相当大的世界,工具和学习思想。

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

  • 基础设施即代码地形

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

  • 通过云进行水平扩展示例

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

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

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

拉拉维尔蒸汽开篇段落

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


最后,让我们总结一下。

正题

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

潜在解决方案的潜在瓶颈

Laravel & Php

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

用于水平扩展的无服务器架构


答案 2

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

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

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

现在让我们回答您的问题

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

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

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

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

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


推荐