应用程序级复制技术
我正在构建一种解决方案,该解决方案将部署在全球多个区域的多个数据中心中,每个数据中心都具有在每个区域中主动更新的数据副本。我将在每个数据中心结合使用多个数据库和文件系统,这些状态必须保持一致(在数据中心内)。这些多个存储库将以SOA服务层为首。
我可以容忍复制中的某些延迟,并且需要允许区域脱机,然后再进行追赶。
考虑到数据的多个后端存储库,我不能轻易地依靠每个独立的复制解决方案来保持一致的状态。因此,我以某种方式复制SOA请求,从而导致在应用程序层实现复制。我需要确保不会发生复制循环,并且正确地解决了最后一个写程序的条件。
根据经验,解决此问题的最佳方法是什么?是否应研究优质产品(免费或者其他)?
解决方案
回答
我们没有提供足够的细节来确定需求,但是我认为我们应该检查一下SQL Server Merge复制。它允许使用完全冲突解决方案异步复制多个数据库。我们将需要指定一个全局主数据库,所有其他数据库都将复制到该数据库,但是所有数据库实例都具有完整的功能(读/写),因此我们可以按自己的需要安排复制时间。如果任何区域脱机,他们可以稍后再追赶,如果主服务器脱机,每个人都将独立工作,直到恢复复制。
我想知道这种灵活的其他解决方案(当然,除了Lotus Notes / Domino之外,这些解决方案如今并不十分流行)。
回答
Lotus / Domino是答案。我已经使用它十年了,它正是我们需要的。它可能不是新潮(我会挑战这种感觉),但是它功能强大,适应性强并且非常安全。
回答
我认为答案将必须基于发布/订阅架构。我假设我们在数据中心之间拥有可靠的消息传递,以便我们可以依赖最终收到的已发布更新。如果我们对数据存储库的所有访问都是通过服务进行的,则可以向每个更新服务的业务流程中添加事件通知,以将所有事件通知所有感兴趣的数据中心。理想情况下,主数据库是唯一发出这些更新的数据库。如果主数据库是唯一发送更新的数据库,则可以排除将通知路由到首先生成通知的节点,从而避免更新循环。
回答
我们绝对应该考虑使用IBM Lotus Domino。 Lotus Notes数据库可以按预定义的时间表在站点之间复制。 Notes / Domino中的复制绝对是一项非常强大的功能,可以在站点之间完全复制数据。即使服务器下次连接时不可用,它也将简单地复制并恢复同步。
至于SOA服务层,则可以使用Domino Designer编写Web服务。从Notes / Domino 7.5.x开始(我相信),Domino能够配置和使用Web服务。
回答
根据其他建议,我还将推荐Lotus Notes / Domino。 8.5确实是非常强大的应用程序开发平台