我并不是真正理解Heroku的dyno和worker进程模型,因为它与单个进程相关,但是基于多线程的Java服务器。
例如:我如何知道(对于单个dyno)我的后台线程有多少处理器可用?我是否需要使用RabbitMQ之类的东西,为每个后台处理任务创建一个单独的进程(app),并在服务器和这些之间进行通信?对于使用Thread Cached Executors的某些计划任务,似乎有点过分。是否应将所有期货改为跨行业期货?
我想这归结为这个问题。我是否可以不再编写多线程服务器并扩展我的服务器进程可用的处理器以适应我的线程活动?或者我是否需要重构我的架构以使用单独的并发进程?如果是前者,我需要工人还是只需要多个dynos?
感谢。
答案 0 :(得分:1)
Heroku支持多种并发模型,因此您需要如何构建应用程序。您可以访问完整的Java堆栈,因此如果某些内容更有意义,只需在Web进程中作为多个线程运行,您肯定可以这样做,或者您可以随时将作业列入RabbitMQ或Redis等工作并在单独处理它们工人dynos。多线程更简单,如果工作量很轻并且与您的Web请求成比例,则有意义,因为它将与Web dynos一起缩放;但是,如果工作量大,不成比例,和/或需要独立调整,那么将其分解为单独的过程会更好。
Heroku最初只是一个Ruby平台,它没有与Java相同的线程功能,因此使用单独的worker dynos对Ruby来说更为重要,这反映在一些文档和示例中,导致你的困惑。幸运的是,使用Java,您可以获得更多选项,并可以使用最适合您手头的工作。