我的问题很容易暴露:
我有一些应用程序可以在此之间共享数据。我需要一种方法来支持数据共享(跨多台计算机),当一个应用程序更改数据时,应该通知其他人。
我的问题是什么技术对我有用。我现在意识到的解决方案是拥有一个共享数据的数据库和一个外部发布订阅系统(如http://pubsub.codeplex.com/)以在数据更改时通知所有应用程序。但我相信可能存在一些有用的解决方案。
你知道吗?谢谢。
我的问题很容易暴露:
我有一些应用程序可以在此之间共享数据。我需要一种方法来支持数据共享(跨多台计算机),当一个应用程序更改数据时,应该通知其他人。
我的问题是什么技术对我有用。我现在意识到的解决方案是拥有一个共享数据的数据库和一个外部发布订阅系统(如http://pubsub.codeplex.com/)以在数据更改时通知所有应用程序。但我相信可能存在一些有用的解决方案。
你知道吗?谢谢。
嗯,在提交这样的架构时要小心,它们在实践中永远不会很好地工作。第一个问题是您将创建的大量网络流量永远无法很好地扩展。更严重的是,你会遇到巨大的并发问题。根据定义,“数据更改”通知将延迟发送,并且不能保证它们会被订购。只要通知之间有足够长的时间延迟,一切都会运行良好,让子系统有机会同步查看数据。
但是当负载增加并且通知开始缓冲时,纸牌屋就会崩溃。子系统将开始对数据的旧视图做出决策,并与其他子系统持有的视图不同步。您也无能为力,您无法通过网络“锁定”。并且极其难以调试,同步不匹配是完全随机和虚假的。
采用集中式服务器方式,并发处理起来容易得多。
如果您使用 Java,JMX 会想到Sun 的 JMX 教程。它有很多支持并且易于使用。
您可以使用Windows Communication Foundation (WCF) 在客户端和服务器之间进行通信。通信可以有两种方式,因此客户端可以通知服务器有关更改,服务器将向所有需要通知的相关客户端推送消息。双向通信在 WCF中称为双工合同。这样,如果您真的不需要数据库,就不必使用数据库。
我可以使用 Sql Server 来存储我的数据,并使用 Sql Server 通知服务 ( http://msdn.microsoft.com/en-gb/library/ms172483(SQL.90).aspx ) 在数据更改时获取通知。