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

标签 java spring heroku concurrency

我并没有真正理解 Heroku 的 dyno 和工作进程模型,因为它涉及单进程但多线程的基于 Java 的服务器。

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

我想这可以归结为这个问题。我是否可以不再编写多线程服务器并扩展服务器进程可用的处理器以适应我的线程 Activity ?或者我是否需要重构我的架构以使用单独的进程来实现并发?如果是前者,我需要 worker 还是只需要多个测功机?

谢谢。

最佳答案

Heroku 支持多种并发模型,因此这完全取决于您希望如何构建应用程序。您可以访问完整的 Java 堆栈,因此,如果某些东西在 Web 进程中作为多个线程运行更有意义,您绝对可以这样做,或者您始终可以将作业排入 RabbitMQ 或 Redis 之类的队列,并在单独的工作测功机上处理它们。如果工作量很轻并且与您的 Web 请求成正比,多线程更简单并且有意义,因为它会随着 Web dynos 进行扩展;然而,如果工作量很大,不成比例,和/或需要独立扩展,那么将其分解为一个单独的流程会更好。

Heroku 最初只是一个 Ruby 平台,它不具备与 Java 相同的线程功能,因此使用单独的工作测功机对于 Ruby 来说更为重要,这在一些文档和示例中有所反射(reflect),这可能会导致您感到困惑。幸运的是,使用 Java,您可以有更多选择,并且可以使用最适合手头工作的选项。

关于java - 将heroku cedar模型映射到多线程应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069333/

相关文章:

java - Java中的SGML解析器?

Spring : get response as Multipart File from REST WebService

ruby - 访问页面 :backups from Heroku Scheduler

java - Web应用程序和应用程序之间的区别?

java - 将 CSS 资源添加到 Wicket Web 应用程序

java - addValueEventListener后ArrayList变为null

java - 来自 adb install 的 INSTALL_PARSE_FAILED_NO_CERTIFICATES;使用Java 6、Android 5.0.2

spring - 以编程方式在 Magnolia 中创建 Assets

java - 使用 Spring 4.0.6.RELEASE 使用不同的 *.properties 文件运行我的集成测试

ruby-on-rails - 从 Heroku 建立与/Amazon s3 的连接