【问题标题】:PHP Slim Application MongoDB - get request blocking post requestsPHP Slim Application MongoDB - 获取请求阻止发布请求
【发布时间】:2016-10-12 00:25:49
【问题描述】:

我的系统架构是一个 Web 应用程序服务器,它运行带有 PHP-Slim 3 的 LAMP 堆栈,作为 API 和 Web 应用程序前端。 API 允许获取请求以检索数据,还允许传感器设备每秒向其发送 POST。在同一台服务器上,我们运行用 Python 编写的处理算法,该算法每 5 分钟执行一次,以处理 600 秒的数据。

MongoDB 位于具有自己资源的单独服务器上。一开始只有很少的传感器,性能就像你想象的那样好。但是随着时间的推移,随着索引的增长与数据量成正比,以及发布数据的传感器数量的增加,来自 Web 应用程序前端的 get 请求已经减慢到即使显示图表也会导致很大的延迟,从而阻塞传感器数据的发布。这是一个大问题,需要我们解决。

我一直认为 Web 应用程序可能需要拆分为 3 个组件 - 一个用于 POST API 的 Web 服务器,一个用于 Web 应用程序,另一个用于处理 API 获取请求。这样一来,我们就有了 3 个到 MongoDB 服务器的单独连接,并且希望我们不会对发布数据的 get 请求产生不利的阻塞影响。

我的问题是,我将如何开始使用 PHP Slim 执行此操作?

【问题讨论】:

  • 嗯,这听起来不像是 Slim 的问题,或者可以单独使用 Slim 解决。您是否尝试过缓存?例如,您可以使用 Redis 缓存非规范化/准备显示数据。您能否解释一下“用 Python 编写的处理算法,每 5 分钟执行一次以处理 600 秒的数据”?
  • 我会研究缓存,因为我们目前绝对不会这样做。处理算法需要一批最后 600 秒的传感器数据,并执行许多不同的转换来规范化数据(因此在 Python 中完成)。它每 5 分钟运行一次 crontab,并为过去 10 分钟内所有传感器设备处理数据。使用更多传感器进行扩展并持续记录数据将使我进入大数据领域。

标签: php mongodb api slim restful-architecture


【解决方案1】:

这确实不是一个小问题,它是一个数据库问题。您的苗条应用程序可能只是从数据库中提取数据......使瓶颈成为等待数据库响应所花费的时间,或者将所有数据从您的数据库发送到苗条应用程序的传输时间。

试着找出瓶颈在哪里。在 CLI 中运行数据库查询,看看在本地获取数据需要多长时间......如果是 MB 的数据,那么即使在数据中心,传输时间也会成为问题......我见过糟糕的DC 有 500kbs,因此即使是几 MB 的数据也会明显变慢。

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2021-12-30
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多