2013-04-17 53 views
1

我并不真正了解Heroku的dyno和工作进程模型,因为它涉及单个进程但是是基于多线程的基于Java的服务器。将heroku雪松模型映射到多线程应用程序

例如:我如何知道(对于单个测试仪)有多少处理器可用于我的后台线程?我是否需要使用像RabbitMQ这样的东西,并为每个后台处理任务创建一个单独的进程(app),并在服务器和这些进程之间进行通信?对于使用线程缓存执行程序的某些计划任务似乎有点矫枉过正。所有期货是否应改为进程间期货?

我想它归结为这个问题。我是否可以不再编写多线程服务器,并将可用于服务器进程的处理器扩展为适应我的线程活动?还是我需要重构我的架构以使用单独的进程进行并发?如果前者,我需要工人还是只需要多个工具?

谢谢。

回答

1

Heroku支持多种并发模型,所以真正由您决定如何构建您的应用程序。您可以访问完整的Java堆栈,因此如果某些东西更适合在Web进程中作为多个线程运行,那么您绝对可以这样做,或者您始终可以将作业加入类似RabbitMQ或Redis的工作中,并分别处理它们工人dynos。多线程更简单,如果工作量很轻并且与您的Web请求成比例,则它是有意义的,因为它将与Web dynos一起缩放;但是,如果工作量大,不成比例,和/或需要独立调整,那么将其分解为单独的过程会更好。

Heroku最初只是一个Ruby平台,它不具有与Java相同的线程能力,因此对于Ruby来说,使用单独的工作器dynos更重要,这反映在一些文档和示例中,可能会导致你的困惑。幸运的是,使用Java可以为您提供更多选择,并且可以使用最适合您的工作。

+1

谢谢!我很难找到如何配置这些线程模型。你能指给我一份文件吗? –

+0

这里没有任何Heroku特定的,所以任何关于Java并发的教程都可以工作。这是一个很好的开始:http://www.vogella.com/articles/JavaConcurrency/article.html。它贯穿整个领域,包括低级线程和锁,你可能想在实践​​中避免使用java.util.concurrent包中的新抽象,但仍然很好理解它们,因为它们是基础的整体系统。如果你想要与演员进行更高层次的抽象,请看[Akka](http://akka.io/)。 – ryanbrainard

+0

...如果您确实想看Heroku特定的多测试网页/工作者方法如何在Heroku上与Java一起使用,请查看https://devcenter.heroku.com/articles/asynchronous-web-worker -model-using-rabbitmq-in-java – ryanbrainard

相关问题