我们的场景如下(我猜这不是唯一的):我们在两个不同的托管设施中有我们的数据库支持的 Web 应用程序。一个设施有主数据库,另一个有从属数据库。
即使主数据库处于脱机状态,我们也希望从属设施继续工作(必要时在受限模式下)。当主数据库备份时,数据应该得到同步。
我在想我可以使用消息队列来发送数据更新指令。如果从服务器和主服务器之间断开连接,从服务器中的消息队列将保存其消息。当连接恢复时,消息将流动,主服务器将更新数据库。
我错过了什么吗?这不是消息队列的好用处吗?
我们的场景如下(我猜这不是唯一的):我们在两个不同的托管设施中有我们的数据库支持的 Web 应用程序。一个设施有主数据库,另一个有从属数据库。
即使主数据库处于脱机状态,我们也希望从属设施继续工作(必要时在受限模式下)。当主数据库备份时,数据应该得到同步。
我在想我可以使用消息队列来发送数据更新指令。如果从服务器和主服务器之间断开连接,从服务器中的消息队列将保存其消息。当连接恢复时,消息将流动,主服务器将更新数据库。
我错过了什么吗?这不是消息队列的好用处吗?
是的,但是它不像在数据中心使用消息队列那么简单。您可能需要在两个持久消息集群之间建立桥接架构。一种方法是在每个物理位置设置一个 RabbitMQ 代理(或代理集群),然后使用另一个协议桥接这些位置,例如使用这个 ZeroMQ 插件https://github.com/rabbitmq/rmq-0mq /维基
最终结果是消息代理的联合。根据数据量和位置之间的距离,您可能希望将压缩构建到架构中,或者使用用于桥接的压缩 VPN 链接,或者在集群之间进行某种批处理和压缩。
但这不是唯一的方法。另一种方法是拥有一个中央 RabbitMQ 集群并使用 SSL 客户端通过 Internet 连接到该集群。如果位置相对靠近,这将是一个更好的解决方案。例如,如果所有地点都在美国东北部,这就是我会这样做的方式。但是,如果这些位置位于美国、欧洲和亚洲,那么最好使用联合解决方案来桥接代理集群之间的数据。
在一个非常大的组织中,比如在三大洲有 100 个地点,您可能希望将这两种解决方案结合起来。
但是,如果这真的就像两个位置一样简单,一个主数据库和一个副本,我认为你最好坚持使用标准的数据库复制解决方案,如果数据量真的很大,可以考虑用它们之间的压缩链接来补充它大的。我知道的复制解决方案已经处理了保存更新以供以后发送,当主从之间的链接断开时。在那种情况下最好忘记 AMQP。
IBM DB2 有一个工具"Q Replication"
,用于将提交的事务数据从 DB2(R) UDB 源复制到目标。Q Replication 使用WebSphere MQ
队列和两个程序Q Capture
来Q Apply
复制数据。该Q Capture
程序在源上运行,捕获数据并发送到 WebSphere MQ 队列。Q Apply 程序在目标上运行,从 WebSphere MQ 队列接收消息并将数据应用到目标数据库。
您可以在此处找到有关 Q 复制的更多信息