【问题标题】:How to synchronize data between server nodes?如何在服务器节点之间同步数据?
【发布时间】:2013-08-18 17:12:18
【问题描述】:

我有一个集群在两个 WebSphere V7 节点上的 Java EE 应用程序。如果客户端更改了保存在节点 1 上的数据库的数据,我想确保数据也立即在节点 2 上更新。

我考虑使用 EJB 计时器服务,它每隔几分钟检查一次数据库。但是,如果我想按时执行更新,在节点 2 上没有任何延迟并且不将间隔设置为一秒左右,我该怎么办?好吧,我可以从节点 1 调用节点 2 上的 servlet 并以这种方式触发更新。但在这种情况下,我的应用程序必须知道所有节点的 http 地址。这不是我想要的。还有其他建议吗?

是否有在服务器节点之间同步数据更改的最佳实践?

【问题讨论】:

    标签: java synchronization nodes


    【解决方案1】:

    由于您使用的是 WebSphere,我建议您使用 WAS 中内置的 DistributedMap

    【讨论】:

    • 嗯.. 听起来很有希望。但是我没有阅读任何有关服务器节点之间同步的信息。它似乎更像是 JSP 和 servlet 输出的公共缓存?你有更多的信息/经验吗?
    【解决方案2】:

    我建议使用提供不同同步方法的 Jboss JGroups。 http://www.jgroups.org/

    【讨论】:

    • 好吧,我宁愿使用更轻量级的解决方案来解决我的问题 - 如果可能,不使用额外的 jar 或框架。
    • 我明白了。然而,即使您不使用 Jgroups 实现,jgroups 文档也提供了一些可能有用的模式。
    【解决方案3】:

    假设您的两个 WebSphere 节点与同一个数据库通信,并且您没有添加任何形式的缓存,那么只要节点 2 在数据库上运行 SQL 查询,数据就会立即可用。

    我在你的问题中遗漏了什么吗?

    【讨论】:

    • 问题是我在应用程序启动时将主数据加载到单例 POJO 中。初始化后,所有请求都使用单例访问此数据,以避免额外的(和长时间运行的)主数据数据库访问。但是因为应用程序是集群的,我不幸有两个单例(每个节点上一个),我必须以某种方式保持同步......
    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 2012-09-26
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多