【问题标题】:In case of an error occurred only on one node of grid, how assure data replication by infinispan in all other nodes?如果仅在网格的一个节点上发生错误,如何确保 infinispan 在所有其他节点上进行数据复制?
【发布时间】:2014-07-15 07:47:51
【问题描述】:

我目前正在使用具有以下配置的 infinispan:

  1. 事务模式(乐观锁定 - 可重复读取)

  2. 只有一个网格节点被分配执行 put/remove 操作(以下称为主节点),其余所有网格节点只能执行读取操作(以下称为读取节点)。我的网格节点总数很少。

  3. 同步回复模式

现在,我想知道我必须如何更改我的 infinispan 配置才能同时使用以下所有特性:

  1. 保持事务模式(乐观锁定 - 可重复读取)

  2. 只维护一个主节点,其他所有节点作为读节点

  3. 异步回复模式

  4. 如果仅在一个读取节点 X 中发生数据复制错误(例如,ISPN000220:从字节缓冲区解组远程命令时出现问题:java.io.InvalidObjectException:尝试读取具有无效 ID 的反向引用),确保数据在所有其他节点正确复制,然后将无限期在读取节点X上重试数据复制(一旦重新部署并修复错误)

  5. 最后,我需要在主节点中拦截所有与异步事务执行期间可能发生的错误相关的异常,以便将错误消息存储在专用的数据库表中。如何拦截这些异常?

非常感谢

弗朗切斯科·斯克拉诺

【问题讨论】:

    标签: asynchronous transactions infinispan


    【解决方案1】:

    您不需要将写入节点和读取节点分开,因为 Infinispan 已经在单个节点中获取了锁,从而避免了死锁。

    如果您想跟踪故障,最好切换异步缓存 API 并将侦听器添加到通知未来,以了解操作何时完成或何时发生错误。这样,缓存的调用者不必立即等待响应。

    另外,如果切换到异步的原因是性能,也许您可​​以切换到分布式,当您向集群添加更多节点时,它可以更好地扩展,因为它只将数据复制到集群的一个子集。通过分发启用 L1 缓存可确保读取仍然高效。

    【讨论】:

    • 如果仅在一个读取节点 X 中发生数据复制错误(例如,ISPN000220:从字节缓冲区取消编组远程命令时出现问题:java.io.InvalidObjectException:尝试使用无效ID),确保数据在所有其他节点正确复制,然后将在读取节点X上重试数据复制(一旦重新部署并修复错误)
    • 为我的项目设计的网格拓扑要求只有一个能够写入的节点。不幸的是,我必须使用复制的、事务的、同步的缓存。那么,是不是不能通过复制事务同步缓存来获得4.上面的点呢?
    • 你可以实现,但是重试必须由你的代码来完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多