Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扩展调度程序Web服务_Java_Tomcat_Scalability - Fatal编程技术网

Java 扩展调度程序Web服务

Java 扩展调度程序Web服务,java,tomcat,scalability,Java,Tomcat,Scalability,我们正在开发一个应用程序,定期将不同客户机的LDAP服务器与我们的数据库同步。需要通过web门户访问此应用程序。web用户将在此应用程序上创建、修改或删除计划任务。因此,我们将此应用程序开发为web服务 现在,我们必须扩展此应用程序并确保高可用性 该应用程序是运行在Tomcat上的基于Axis2的web服务。我们想到了httpd+mod_jk+tomcat组合来实现负载平衡。问题是,如果出现修改/删除请求,那么它应该落在最初创建任务的同一个tomcat服务器上。但是,由于请求可能来自从不同ip地

我们正在开发一个应用程序,定期将不同客户机的LDAP服务器与我们的数据库同步。需要通过web门户访问此应用程序。web用户将在此应用程序上创建、修改或删除计划任务。因此,我们将此应用程序开发为web服务

现在,我们必须扩展此应用程序并确保高可用性

该应用程序是运行在Tomcat上的基于Axis2的web服务。我们想到了httpd+mod_jk+tomcat组合来实现负载平衡。问题是,如果出现修改/删除请求,那么它应该落在最初创建任务的同一个tomcat服务器上。但是,由于请求可能来自从不同ip地址访问web门户的不同web用户,因此我们不能有相同的会话id(粘性会话)

有什么解决办法吗?不同的架构?什么都行


我们还考虑过使用Quartz调度器api。该网站表示它支持负载平衡和集群。是否有人有使用Quartz处理此类场景的经验?

如果您使用Quartz进行调度,则可以使用数据库进行支持(请参阅JDBCJobStore)。然后您可以访问任何Tomcat服务器,并且调度将是集中的。我建议您在数据库中使用一个键,然后返回Axis服务,这样用户就可以在调用之间引用相同的数据


或者,将数据库用作作业调度器并不困难,然后让您的任务在Tomcat(任何位置)上运行,并将结果放入数据库。如果作业的结果(比如它的状态)很小,这将很好地工作。

听起来您的数据库——或者存储任务信息的任何地方——也是分布式的;i、 例如,不是所有web服务器都可以访问的公共数据库。这就是为什么您需要后续请求转到原始web服务器的原因吗?不,所有任务都共享一个公共数据库。那么,数据库就是您可以协调事情的单一点。您希望后续请求转到同一web服务器的原因是什么?如果已在服务器a上为客户端a创建了任务,则修改/删除该任务的后续请求必须转到同一web服务器。是的,我理解。我的问题是:为什么?毕竟,如果所有状态都存储在一个数据库中,并且该数据库对于所有web服务器都是公共的,那么为什么它们中的任何一个都不能处理后续请求呢。如果一个倒下了,为什么其他人就不能像什么都没发生一样捡起来呢?我猜web服务器中存储了一些状态。不管怎么说,如果这是你想要的,我不知道你将如何路由它。我将不得不为Quartz和JDBCJobStore做一些POC,从未使用过这些。