2017-08-11 17 views
1

之前,我开始与我的问题,让我简要介绍一下该架构,我们需要使用:通信和高性能高可用性的Java EE数据的同步分布式应用

  • 我们将有一个中央应用实例。

    • 这个应用程序实例部署与业务管理Web应用 - 它是用来改变“内部”数据(我会谈谈这一刻)
    • 这个应用程序实例实际上是服务器
    • 集群
  • 我们将有n个(n> 0 & &ñ< = 3000)本地应用程序实例 - 1对每个 “位置”

    • 这种情况下,作为数据处理器用于其位置
    • 这种情况下不使用全套中央数据 - 仅子集限于所需要的数据处理
    • 每个位置可以(并且可以期待它)脱机时的长时间(假设2周顶部)
  • 每个位置都会有几百个“客户”(让我们说多达300) - 之外的应用,将处理提供数据

现在将所有内容放在一起: 如果位置在线,则客户端可能会与Local实例或Central进行通话。但是,如果位置处于脱机状态,则中央不可用,客户端只能与本地实例通话。在这种情况下,本地实例应该像处理中央一样处理数据(所以根据中央定义的规则 - 我之前谈过的“内部”数据),缓存结果,当位置变为在线时,将其同步到中央(只是结果,中央没有重新计算)。 与此同时,本地实例应始终保持与Central的“内部”数据同步(当它们处于联机状态时,如果它们处于脱机状态,只要脱机时间未超过2周阈值,我们就认为数据是“新鲜的”) 。或者,从另一侧看 - 只要中央环境发生变化,就需要将其推送到所有可用的本地实例。因此,总结(并最终提出我的问题),我们需要一种方法将数据从中央实例同步到数千个本地实例,我们还需要一种将本地更改发送到中央的方法。考虑到本地实例的数量,可能的高流量(每个本地可能有多达300个客户端,每个客户端可以每分钟产生几个请求,每个请求的计算可能花费很多时间,结果可能会很大))和所有其他限制(例如中央实例将是Weblogic服务器的集群,但每个本地将是单一的WildFly,对于中央和本地数据库也将是不同的 - 包括不同的架构,这对于这个最好的方法是什么?通信和同步问题

回答

0

它看起来像一个消息代理模式将是最适合在这里 的了。“当地人 - >中央”方向,你可能会积聚在本地存储点,以点的消息的变化给发送的中央服务器d在线时段。您可以使用本地持久消息队列来达到此目的。 对于中央服务器启动的更改,您可以使用发布/订阅者模式并确保交付。 冲突的更改解决方案特定于您的业务逻辑。