彪马工人VS独立的EC2实例

问题描述 投票:0回答:1

我从Java / Tomcat的堆栈和总的新手到回报率栈来了。我想了解一些身边PUMA配置的概念。我已阅读并this this但我仍然对工人术语不清楚。

据我所知,工人导致子进程运行彪马。所以基本上,可以让你实现并行,采用多核实例时。但是,你也可以通过启动尽可能多的EC2单核情况下这样做?

此外,将它曾经是有意义的集工> 0,如果实例并不多核心。

这里的任何信息将极大地帮助我。谢谢!

ruby-on-rails ruby puma puma-dev
1个回答
1
投票

在彪马的工人和线程的上下文都用来实现并发,使彪马能处理请求,而不总是等待前一个请求完成。一个良好的配置将需要找到工人和线程和部署的应用程序需要几个方面的量之间的良好平衡,要考虑:

  • 工作人员: 有更大的内存开销,因为每个分叉进程需要它自己的内存(这是减轻在Linux上,由于(https://en.wikipedia.org/wiki/Copy-on-write),但仍然是一个因素) 允许并行时,多内核是可用的。这主要是一个问题时处理的请求是计算繁重的 - 这是一件好事,以避免 - 如果一个请求需要执行一些繁重的计算这是一个好主意,使用库一样将它移到后台作业(https://github.com/mperham/sidekiq) 不能在JRuby上使用,因为它不支持分叉
  • 主题 线程的配置量将运行每个工作进程 - 这意味着,如果你有workers xthreads y然后你得到一个总的x * y请求处理线程 共享内存让他们有更小的内存占用(即使有陷阱这里还有:(https://www.speedshop.co/2017/12/04/malloc-doubles-ruby-memory.html) MRI检查,这是默认的Ruby实现,线程不允许用于并行执行Ruby代码由于GIL - 这不应该是作为GIL是不是在等待IO期间锁定一个大问题是那里有很多的执行时间将花在 - 访问数据库,使用API​​等通信 在JRuby线程可以实现并行。 如果你的应用程序是不是线程安全的,不能使用。 Rails是线程本身,而是你没有保证任何一方3D代码应用程序依赖于或应用程序代码本身。如果应用程序没有在这里线程安全的答案很简单 - 不使用线程(意思是配置的最小和最大线程1)。缺乏threadsafety就是多工人的配置是有道理的,即使在单核实例的情况。 对于线程的任何金额,你需要确保有连接池中足够的数据库连接。这通常意味着Rails的连接池的大小设置为您在工作进程中运行的线程数。

多个工人部署到多个EC2实例比较忽略了画面的一部分:使用彪马与多个工人时,有一个主彪马的过程,一个端口和路由每个请求到可用的工作进程上侦听。当你有多个EC2实例,那么你需要照顾负荷在某种程度上它们之间的平衡 - 在AWS的情况下,可能是ELB或ALB。部署到多个实例和负载平衡的部署任何严重的web应用程序的任何方式的正确方法,但不应该阻止你使用实例资源更好地通过职工和线程。

我建议与工人和线程的配置实验,并在工作人员设置为内核和线程数10起 - 然后进行调整,如果你遇到内存使用或在资源的利用问题。

© www.soinside.com 2019 - 2024. All rights reserved.