gpt4 book ai didi

java - Ruby on Rails 与 jRuby

转载 作者:数据小太阳 更新时间:2023-10-29 07:26:57 25 4
gpt4 key购买 nike

我正在开发一个 Ruby on Rails 应用程序,目前托管在 Heroku 上。我们平均有大约 5 个 web dynos 和大约 2 个工作进程在运行。但是因为我们正在使用 adeptscale这些可能会发生很大变化,并且成本逐月增加。

我们正在考虑改变流程和基础设施(使用我们自己的,亚马逊/谷歌等)。并且由于性能、对 Java 库的访问以及我们计划与 jRuby 一起使用的其他 yield 。

我对 jRuby 没有多少经验,但我有 Java 经验。所以我有几个问题:

问题介绍:由于 rails 的哲学/方法与 Java 不同,即 ruby​​ 网络服务器使用的内存少得多,但一次只能处理一个请求,因此拥有多个服务器可以弥补无法处理多个请求。

  1. 如果我们使用 jRuby(并将我们的 rails 项目打包为 war 文件并部署到任何 servlet 容器,即 Tomcat 或 Jboss(不仅仅是容器)),那么我们是否能够处理多个请求?

问题介绍:目前我们在工作线程中运行了一些应用程序逻辑(而不是阻塞网络服务器,并且无法为其他客户端/浏览器客户端提供服务)。即当用户提交一些表单然后我们的应用程序需要联系第 3 方服务以返回响应时,我们只需让工作人员完成从第 3 方服务返回并通过 websockets 更新 ui(报告等待状态)的工作量第 3 方服务返回 x/y 或任何状态。

  1. 如果我们改用jRuby,我们将如何实现类似的逻辑?我的意思是我们是否使用具有某种工作线程池的 Java 代码,然后免费工作人员承担联系第 3 方服务等的工作量?如果我们决定使用 jRuby,我们将如何处理?

最佳答案

1) 在 jruby 中,您几乎可以使用任何容器一次处理多个请求,但是您也可以使用 mri-ruby 一次处理多个请求。你只需要有一个线程安全的应用程序(config.threadsafe!在 rails4 中是默认的)。不同的机架服务器有不同的方法来一次处理多个请求。例如unicorn在乘客或 puma 时使用多个进程寻求多线程方法

根据我的经验,jruby 容器(如 jboss 或 tomcat)的正确配置更为复杂。但是有像tourquebox这样的东西, trinidad帮助你解决这个问题。但是你甚至仍然可以选择一些不使用 c 扩展的 ruby​​ 服务器(例如 puma)。

2) 如果我理解正确的话,你正在寻找一些后台处理库?您可以将 sidekiq 或 resque 与 ruby​​ 或 jruby 一起使用(而 jruby 通常会更快,并且更容易调试内存泄漏)。您甚至可以为您的机架服务器使用 ruby​​,为您的工作人员使用 jruby(甚至可以与 rvm/rbenv 之类的东西并行运行)

一般来说,如果您知道自己在做什么并且需要为您的应用程序服务器提供更好的性能,或者如果您想要加速您的工作服务器,我只会选择 jruby 选项。如果我是你,我可能会留在 ruby​​ 世界并使用 puma 作为你的应用程序和 sidekiq 作为后台服务。两者都非常优雅,不需要那么多配置。

关于java - Ruby on Rails 与 jRuby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27154650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com