我有一个场景,我最初可以传播许多线程,但是经过一段时间后如果我发现机器加载太多,那么我应该在运行时将一些线程移到其他机器上,类似的话如果线程减少了利用资源,然后我应该能够启动更多的线程。这一切都应该在运行时。任何人都可以帮助设计这种类型的架构。编程语言:JAVA
答案 0 :(得分:1)
听起来你需要一个分布式作业调度程序;见Distributed Job scheduling, management, and reporting。
应该注意的是,作业调度程序方法假定您的工作负载可以分解为独立的作业,并且这些作业(通常)可以分发到数据所在的不同机器(或者可以驻留)。当您尝试平衡的工作负载是线程本身时,您无法应用此功能。换句话说,将活动线程从一台机器移动到另一台机器将不起作用。 (问题是线程的状态与当前运行的JVM紧密交织在一起。当前生成的JVM不支持线程迁移,也不提供可用于执行此操作的任何内容。)
另一种方法(例如,如果您正在处理Web请求)是将负载均衡器放在服务器前面,根据负载将请求发送到不同的服务器。这假定请求的必要数据在所有服务器中均可用或可从所有服务器访问。
答案 1 :(得分:1)
此链接可帮助您找到解决方案。 http://www.infoq.com/news/2006/12/terracotta-jvm-clustering