推荐的服务器堆栈

推荐的服务器堆栈

我们的 Web 服务器每秒处理大约 1000 个请求,在到达最终的 LAMP 堆栈之前,会经过多层缓存和平衡。我们有 6 台 Apache(Prefork MPM;2.2.12)+ PHP(5.3.2)服务器,它们使用公共的内存缓存来处理最终请求,以防 Varnish 无法处理。现在我们面临的问题是扩展。我们对响应时间要求非常严格,如果后端在一秒钟内没有响应,我们的反向代理就会断开与后端的连接。随着每秒请求数的增加,我们面临的上游错误越来越多,我们的 LAMP 机器无法承受负载。

我们正在重新考虑新的服务器架构,目前正在寻找一些好的替代方案。

没有涉及静态图像/静态内容。到达这些服务器的仅有的 4 个请求是(3 个收集数据,1 个发送数据 - 最大 2KB 动态文件)

我们正在研究 Apache (worker MPM) + PHP CLI nginx + PHP FPM

我想知道是否有好的教程或基准测试报告可以参考,以及是否有其他配置可以尝试

感谢 Sparsh Gupta

答案1

对于服务器堆栈来说,这是非常少的信息:

  • 你是在寻求硬件还是软件推荐(假设是软件)
  • 为什么上游服务器是否发生故障?(CPU、网络、磁盘 IO,上游的上游是否发生故障 - 读取数据库或任何类型的持久性)
  • 您似乎可以优雅地失败。如果您在一秒钟内超时并返回某些内容,那么您无论如何都会这样做。您应该有以下数字:
    • 多少次失败是可以接受的?
    • 您何时(日期/时间和请求数)通过了可接受的失败率?

我想知道是否有好的教程或基准测试报告可以参考,以及是否有其他配置可以尝试

请不要依赖别人在另一个用例上做的基准测试。请为你的数据你的客户行为你的系统

我可以假设:

  • 收集数据 == POST(或在服务器上存储数据的东西)
  • 发送数据 == GET(回复客户端)

这实际上并不重要,但您是否尝试过将“收集”服务器与“发送”服务器分开?

客户端缓存似乎对您没有帮助,因为收集部分不可能被缓存。

对应用程序架构的猜测(软件方面):

你正在使用类似的东西亚太经合组织

如果您的应用程序可行,我建议您切换到某些异步模型。

很粗糙的:

  1. 只需将“收集”作业提交到队列即可
  2. 立即返回 HTTP 202,并将内容位置设置为您期望内容出现的位置(如果客户端是浏览器,则返回带有位置的 302/303)
  3. 只要你没有收到工人的消息,就返回一个带有一些默认内容的 200,然后
  4. 如果它完成了 200 的实际内容

硬件方面:

很难说,但似乎只要投入更多 Apache 服务器就可以解决问题。您已经有 6 个了,为什么不添加更多服务器并完成它呢 - 计算一下开发人员的时间或硬件是否更便宜应该不会太难。无论如何:我不会立即丢弃“旧”服务器,只需在您的负载平衡器中为它们分配较低的优先级。

您还提到了“反向代理”(单数),您是否尝试过在该层进行扩展?

总的来说,我想说:您似乎有能力通过投入更多 LAMP 服务器来扩展。您为什么不这样做呢?

相关内容