在开始我的问题之前,让我先解释一下我们需要使用的体系结构:
- this application instance is deployed with business administration webapp - it is used to change "internal" data (I'll talk about this in a moment)
- this application instance is actually a cluster of servers
- this instances serve as data-processors for their locations
- this instance does not use full set of Central data - only subset limited to what is needed for data-processing
- each location may (and we should expect it) go offline for extended periods of time (let's say 2 weeks top)
现在,将所有内容组合在一起:如果位置处于联机状态,那么客户端可以与location或Central进行对话。但是,如果位置离线,则中央不可用,客户端只能与本地实例对话。在这种情况下,Local实例应该处理数据,就像它们是Central一样(因此,根据在Central中定义的规则-我以前讲过的“内部”数据),缓存结果,当位置在线时,将其同步到Central (只是结果,没有在Central上重新计算)。同时,本地实例应该始终保持其“内部”数据与Central同步(当它们处于联机状态时,如果它们是脱机的,则假设数据是“新的”,只要脱机时间不超过2周阈值)。或者,从另一个角度看它--每当在Central上发生变化时,就需要将它推送到所有可用的本地实例中。
总之(最后问我的问题),我们需要一种将数据从中央实例同步到数千个本地实例的方法,我们还需要一种将Local发送到Central的方法。考虑到本地实例的数量,可能的高流量(每个本地可以有多达300个客户机,每个客户机可以每分钟生成几个请求,每个请求的计算可能需要很长时间,结果可能很大)和所有其他约束(例如中央实例将是Weblogic集群,但每个本地将是单个WildFly,对于中央和本地数据库也会不同--包括不同的模式、是解决这种通信和同步问题的最佳方法??)
发布于 2017-08-14 22:18:36
在这里,消息代理模式看起来最合适。对于“局部变量中心”方向,您可能会在本地存储的点对点消息中积累更改,这些消息在联机期间发送到中央服务器。为此,您可以使用本地持久消息队列。对于中央服务器启动的更改,您可以使用发布/订阅者模式,并确保交付。冲突更改解决方案是特定于您的业务逻辑的。
https://stackoverflow.com/questions/45628045
复制相似问题