Java 向可扩展系统中添加新节点,零停机时间

Java 向可扩展系统中添加新节点,零停机时间,java,cloud,distributed-computing,Java,Cloud,Distributed Computing,我是批处理解决方案的开发人员,它的工作原理是我们分割一个大文件并跨JVM处理它。因此,我们有4个处理器jvm,它们获取一大块文件并对其进行处理,网关jvm的1个网关jvm任务是将文件拆分为处理器jvm的数量,即4个,并发送一个由处理器jvm使用的rest请求,rest请求包含所有细节,它必须从中选择文件的文件位置以及一些其他细节 现在,如果我想在不停机的情况下添加另一个处理器jvm,我们有什么方法可以做到这一点。目前我们正在一个属性文件中维护4个JVM的URL,有更好的方法吗?它使我能够在不重启

我是批处理解决方案的开发人员,它的工作原理是我们分割一个大文件并跨JVM处理它。因此,我们有4个处理器jvm,它们获取一大块文件并对其进行处理,网关jvm的1个网关jvm任务是将文件拆分为处理器jvm的数量,即4个,并发送一个由处理器jvm使用的rest请求,rest请求包含所有细节,它必须从中选择文件的文件位置以及一些其他细节


现在,如果我想在不停机的情况下添加另一个处理器jvm,我们有什么方法可以做到这一点。目前我们正在一个属性文件中维护4个JVM的URL,有更好的方法吗?它使我能够在不重启任何组件的情况下添加更多的JVM(

),可以考虑设置负载均衡器并将JVM(S)放在它后面。负载平衡器将负责将传入请求分发到JVM


通过这种方式,您可以根据工作负载放大或缩小JVM。另外,如果其中一个JVM不工作,系统的其他部分就不必再关心它了。

不确定您遵循的用例和技术堆栈是什么。但似乎您需要具有自动扩展和动态资源调配功能的分布式系统。你考虑过Hadoop、Spark clusters或Akka吗

如果您不能使用其中任何一个,那么解决方案是在一些数据存储中维护JVM列表(比如在一个表中);它的动态数据意味着可以添加/删除/更新JVM。然后,您需要一个资源管理器,它可以根据负载或任何其他条件逻辑决定是否启动新的JVM。此资源管理器需要监视整个系统。此外,无论何时创建任务或区块或切片数据,都可以使用消息队列(如ApacheQ、ActiveMQ)分发它。对于复杂的用例,您也可以考虑卡夫卡。如今,websphere(Libery profile)、weblogic等应用服务器也提供了自动伸缩功能。因此,如果您已经在使用任何这样的应用服务器,那么您可以考虑使用该功能。我希望这能有所帮助。

“目前我们正在一个属性文件中维护4个JVM的URL”——这是一个原始的、难以扩展的文件。您正在寻找的体系结构是消息队列,如JMS或IBM MQ(或现在的名称)或其他任何产品。