Java 将heroku cedar模型映射到多线程应用程序

Java 将heroku cedar模型映射到多线程应用程序,java,spring,heroku,concurrency,Java,Spring,Heroku,Concurrency,我并不真正理解Heroku的dyno和worker进程模型,因为它涉及一个单进程但基于Java的多线程服务器 例如:我如何知道(对于单个dyno)有多少处理器可用于我的后台线程?我是否需要使用RabbitMQ之类的工具,为每个后台处理任务创建一个单独的进程(应用程序),并在服务器和这些任务之间进行通信?对于某些使用线程缓存执行器的计划任务来说,似乎有点过分了。是否应将所有期货更改为进程间期货 我想归结到这个问题上。我是否可以不再编写多线程服务器并扩展服务器进程可用的处理器以适应线程活动?或者我需

我并不真正理解Heroku的dyno和worker进程模型,因为它涉及一个单进程但基于Java的多线程服务器

例如:我如何知道(对于单个dyno)有多少处理器可用于我的后台线程?我是否需要使用RabbitMQ之类的工具,为每个后台处理任务创建一个单独的进程(应用程序),并在服务器和这些任务之间进行通信?对于某些使用线程缓存执行器的计划任务来说,似乎有点过分了。是否应将所有期货更改为进程间期货

我想归结到这个问题上。我是否可以不再编写多线程服务器并扩展服务器进程可用的处理器以适应线程活动?或者我需要重构我的体系结构以使用单独的进程来实现并发性?如果是前者,我需要工人还是多个Dyno


谢谢。

Heroku支持多个并发模型,因此如何构建应用程序完全取决于您自己。您可以访问完整的Java堆栈,因此,如果在web进程中作为多个线程运行更有意义,您完全可以这样做,或者您可以始终将作业排队到RabbitMQ或Redis上,并在单独的工作动态节点上处理它们。如果工作量很轻,并且与web请求成比例,那么多线程就更简单,也更有意义,因为它将随着web动态进行缩放;然而,如果工作规模大,不成比例,和/或需要独立扩展,那么将其分解为单独的过程会更好


Heroku最初只是一个Ruby平台,它没有与Java相同的线程功能,因此使用单独的工作动态对Ruby更为重要,这反映在一些文档和示例中,这可能会导致您的混淆。幸运的是,有了Java,您就有了更多的选择,并且可以使用最适合手头工作的方法。

Heroku支持多个并发模型,因此您可以决定如何构建应用程序。您可以访问完整的Java堆栈,因此,如果在web进程中作为多个线程运行更有意义,您完全可以这样做,或者您可以始终将作业排队到RabbitMQ或Redis上,并在单独的工作动态节点上处理它们。如果工作量很轻,并且与web请求成比例,那么多线程就更简单,也更有意义,因为它将随着web动态进行缩放;然而,如果工作规模大,不成比例,和/或需要独立扩展,那么将其分解为单独的过程会更好


Heroku最初只是一个Ruby平台,它没有与Java相同的线程功能,因此使用单独的工作动态对Ruby更为重要,这反映在一些文档和示例中,这可能会导致您的混淆。幸运的是,有了Java,您就有了更多的选择,可以使用最适合手头工作的工具。

谢谢!我很难找到如何配置这些线程模型。你能给我指一个文档吗?这里没有特定于Heroku的内容,所以任何关于Java并发性的教程都可以。这是一个很好的起点:。它涵盖了整个范围,包括低级别线程和锁,您可能希望在实践中避免这些线程和锁,以支持
java.util.concurrent
包中的新抽象,但最好还是理解它们,因为它们是整个系统的基础。如果你想要更高层次的演员抽象,看看……如果你想看看特定于Heroku的multi-dyno web/worker方法如何与Heroku上的Java协同工作,看看这不是我真正的意思。我非常熟悉Java和其他语言中的线程。但是,我不知道如何分配Heroku资源,以便它们拥有适合单个进程的CPU等。我所看到的只是每个进程有一个DYNO,它们的内存大小可以是512M或1G。但对于那个dyno,并发性又如何呢?您链接的文章只是简单地使用多个进程进行并发(进程间通信),但我正在寻找配置Heroku进行进程内并发。在Heroku上没有什么真正需要配置的进程内并发,因为它与任何其他Java应用程序一样,只是开箱即用。只需创建一个线程池,并开始向它抛出作业。这里是一个简单的例子,下面是例子。至于CPU分配,除了选择1X或2X动态外,这是无法控制的。谢谢!我很难找到如何配置这些线程模型。你能给我指一个文档吗?这里没有特定于Heroku的内容,所以任何关于Java并发性的教程都可以。这是一个很好的起点:。它涵盖了整个范围,包括低级别线程和锁,您可能希望在实践中避免这些线程和锁,以支持
java.util.concurrent
包中的新抽象,但最好还是理解它们,因为它们是整个系统的基础。如果你想要更高层次的演员抽象,看看……如果你想看看特定于Heroku的multi-dyno web/worker方法如何与Heroku上的Java协同工作,看看这不是我真正的意思。我非常熟悉Java和其他语言中的线程。但是,我不知道如何分配Heroku资源,以便它们拥有适合单个进程的CPU等。我所看到的只是每个进程有一个DYNO,它们的内存大小可以是512M或1G。但对于那个dyno,并发性又如何呢?您链接的文章只是使用多个进程进行并发(进程间通信),但我正在寻找配置Heroku进行进程内通信