【问题标题】:nginx, Unicorn, Rails, Postgres and database parallelism when requests take a long time to finish?当请求需要很长时间才能完成时,nginx、Unicorn、Rails、Postgres 和数据库并行性?
【发布时间】:2018-02-23 22:27:58
【问题描述】:

在半生产环境中使用 nginx、Unicorn、Rails、Postgres 部署。在同一个应用程序中,我有两个用户请求一些信息,其中一个请求大约需要 10 秒。在此期间,其他用户必须坐在那里,因为请求任何 URL 似乎都停止了。

如何解决?

【问题讨论】:

    标签: ruby-on-rails postgresql nginx


    【解决方案1】:

    您需要的是 nginx 后面的应用服务器(使用 nginx 作为负载平衡器和/或反向代理),它具有多个进程和集群支持。

    如果没有多个进程,您的应用会受到 Ruby 代码执行的瓶颈,因为一次只有一个进程线程可以运行 Ruby 代码。如果没有多线程,您的应用可能会因 I/O 速度慢而过早地成为瓶颈。

    您应该研究一下 Puma、Unicorn 和 Passenger,并确定哪一个适合您。我在不同的设置中使用过 Puma 和 Unicorn,我非常喜欢它们各自的方式。

    一般来说,如果你在 nginx 后面使用 Puma、Unicorn 或 Passenger,你将能够并行处理多个请求。

    关于这个问题有很多文章,我在这里找到了一些:

    【讨论】:

    • 我已经在 nginx 后面安装了 Unicorn,嗯,我想我可能配置错了,然后按照 web 上的一些基本教程让它运行。我需要寻找什么?
    • 您正在寻找独角兽工人数量,以提高吞吐量。 - 见worker_processes设置digitalocean.com/community/tutorials/…
    最近更新 更多