1

我并不真正了解 Heroku 的测功机和工作进程模型,因为它与单个进程但多线程的基于 Java 的服务器有关。

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

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

谢谢。

4

1 回答 1

1

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

Heroku 最初只是一个 Ruby 平台,它没有与 Java 相同的线程功能,因此使用单独的 worker dyno 对 Ruby 来说更为重要,这反映在一些文档和示例中,这可能导致你的困惑。幸运的是,使用 Java,您可以使用更多选项,并且可以使用最适合手头工作的选项。

于 2013-04-18T05:27:28.323 回答